Merge "EPG controller and service"
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / mapper / MapperUtilsTest.java
1 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper;\r
2 \r
3 import com.google.common.base.Preconditions;\r
4 import com.google.common.collect.ImmutableList;\r
5 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
6 import org.opendaylight.groupbasedpolicy.dto.IndexedTenant;\r
7 import org.opendaylight.groupbasedpolicy.dto.PolicyInfo;\r
8 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;\r
9 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;\r
10 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;\r
11 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;\r
12 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable;\r
13 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils;\r
14 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;\r
15 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;\r
16 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;\r
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;\r
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;\r
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
72 \r
73 import java.util.ArrayList;\r
74 import java.util.List;\r
75 \r
76 public abstract class MapperUtilsTest {\r
77 \r
78     protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00");\r
79     protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01");\r
80     protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02");\r
81     protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1");\r
82     protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1");\r
83     protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1");\r
84     protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334");\r
85     protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba");\r
86     protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0");\r
87     protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1");\r
88     protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2");\r
89     protected static final SubnetId SUBNET_0 = new SubnetId("subnet0");\r
90     protected static final SubnetId SUBNET_1 = new SubnetId("subnet1");\r
91     protected static final SubnetId SUBNET_2 = new SubnetId("subnet2");\r
92     protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet");\r
93     protected static final String IP_PREFIX_32 = "/32";\r
94     protected static final String IP_PREFIX_128 = "/128";\r
95     protected static final TenantId TENANT_ID = new TenantId("tenantId");\r
96     protected static final NodeId NODE_ID = new NodeId("nodeId");\r
97     protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0");\r
98     protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1");\r
99     protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2");\r
100     protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId");\r
101     protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId");\r
102     protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId");\r
103     protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId");\r
104     protected static final L3ContextId L3C_ID = new L3ContextId("l3cId");\r
105     protected static final ContractId CONTRACT_ID = new ContractId("contractId");\r
106     protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId");\r
107     // Often used strings\r
108     protected static final String ALLOW = "allow";\r
109     protected static final String L2 = "L2";\r
110     protected static final String OPENFLOW = "openflow:";\r
111     protected static final String DROP_ALL = "dropAll";\r
112     protected static final String DROP = "drop";\r
113     protected static final String TCP_SRC = "tcp_src_80";\r
114     // Mock variables\r
115     protected Short tableId;\r
116     protected OfContext ctx;\r
117     protected OfWriter ofWriter;\r
118     protected SwitchManager switchManager;\r
119     protected PolicyManager policyManager;\r
120     protected EndpointManager endpointManager;\r
121     protected PolicyInfo policyInfo;\r
122     protected FlowTable table;\r
123 \r
124     protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match, Instructions instructions) {\r
125         FlowBuilder flowBuilder = FlowUtils.base(tableId);\r
126         flowBuilder.setId(flowId)\r
127                 .setPriority(priority)\r
128                 .setMatch(match)\r
129                 .setInstructions(instructions);\r
130         return flowBuilder;\r
131     }\r
132 \r
133     protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) {\r
134         Preconditions.checkNotNull(natIp);\r
135         Preconditions.checkNotNull(ip);\r
136         Preconditions.checkNotNull(mac);\r
137         EndpointL3Builder endpointL3Builder = new EndpointL3Builder();\r
138         NatAddressBuilder natAddressBuilder = new NatAddressBuilder();\r
139         natAddressBuilder.setNatAddress(new IpAddress(new Ipv4Address(natIp)));\r
140         endpointL3Builder.addAugmentation(NatAddress.class, natAddressBuilder.build());\r
141         endpointL3Builder.setIpAddress(new IpAddress(ip));\r
142         endpointL3Builder.setMacAddress(new MacAddress(mac));\r
143         if (l2bd != null) {\r
144             endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
145         }\r
146         if(ip.equals(IPV4_0)) {\r
147             endpointL3Builder.setNetworkContainment(SUBNET_0);\r
148         }\r
149         else if(ip.equals(IPV4_1)) {\r
150             endpointL3Builder.setNetworkContainment(SUBNET_1);\r
151         }\r
152         else if(ip.equals(IPV4_2)) {\r
153             endpointL3Builder.setNetworkContainment(SUBNET_2);\r
154         }\r
155         return endpointL3Builder;\r
156     }\r
157 \r
158     protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) {\r
159         Preconditions.checkNotNull(natIp);\r
160         Preconditions.checkNotNull(ip);\r
161         Preconditions.checkNotNull(mac);\r
162         EndpointL3Builder endpointL3Builder = new EndpointL3Builder();\r
163         NatAddressBuilder natAddressBuilder = new NatAddressBuilder();\r
164         natAddressBuilder.setNatAddress(new IpAddress(new Ipv6Address(natIp)));\r
165         endpointL3Builder.addAugmentation(NatAddress.class, natAddressBuilder.build());\r
166         endpointL3Builder.setIpAddress(new IpAddress(ip));\r
167 \r
168         endpointL3Builder.setMacAddress(new MacAddress(mac));\r
169         if (l2bd != null) {\r
170             endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
171         }\r
172         return endpointL3Builder;\r
173     }\r
174 \r
175     public SegmentationBuilder buildSegmentation() {\r
176         SegmentationBuilder segmentationBuilder = new SegmentationBuilder();\r
177         segmentationBuilder.setSegmentationId(1);\r
178         return  segmentationBuilder;\r
179     }\r
180 \r
181     protected TenantBuilder buildTenant() {\r
182         TenantBuilder tenantBuilder = new TenantBuilder();\r
183         tenantBuilder.setId(TENANT_ID);\r
184         tenantBuilder.setForwardingContext(buildForwardingContext().build());\r
185         PolicyBuilder policyBuilder = new PolicyBuilder();\r
186         policyBuilder.setEndpointGroup(getEndpointGroups());\r
187         policyBuilder.setSubjectFeatureInstances(getSubjectFeatureInstances());\r
188         tenantBuilder.setPolicy(policyBuilder.build());\r
189         return tenantBuilder;\r
190     }\r
191 \r
192     protected IndexedTenant getTestIndexedTenant() {\r
193         return new IndexedTenant(buildTenant().build());\r
194     }\r
195 \r
196     protected ForwardingContextBuilder buildForwardingContext() {\r
197         ForwardingContextBuilder forwardingContextBuilder = new ForwardingContextBuilder();\r
198         forwardingContextBuilder.setL2FloodDomain(getL2FloodDomainList(false));\r
199         forwardingContextBuilder.setL2BridgeDomain(getL2BridgeDomainList());\r
200         forwardingContextBuilder.setL3Context(getL3ContextList());\r
201         forwardingContextBuilder.setSubnet(getSubnetList());\r
202         return forwardingContextBuilder;\r
203     }\r
204 \r
205     protected List<L3Context> getL3ContextList() {\r
206         List<L3Context> l3Contexts = new ArrayList<>();\r
207         L3ContextBuilder l3ContextBuilder = new L3ContextBuilder();\r
208         l3ContextBuilder.setId(L3C_ID);\r
209         l3Contexts.add(l3ContextBuilder.build());\r
210         return l3Contexts;\r
211     }\r
212 \r
213     protected List<L2BridgeDomain> getL2BridgeDomainList() {\r
214         List<L2BridgeDomain> l2BridgeDomains = new ArrayList<>();\r
215         L2BridgeDomainBuilder l2BridgeDomainBuilder = new L2BridgeDomainBuilder();\r
216         l2BridgeDomainBuilder.setId(L2BD_ID);\r
217         l2BridgeDomainBuilder.setParent(L3C_ID);\r
218         l2BridgeDomains.add(l2BridgeDomainBuilder.build());\r
219         return l2BridgeDomains;\r
220     }\r
221 \r
222     protected List<L2FloodDomain> getL2FloodDomainList(boolean external) {\r
223         List<L2FloodDomain> l2FloodDomains = new ArrayList<>();\r
224         L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder();\r
225         l2FloodDomainBuilder.setId(L2FD_ID);\r
226         if (external) {\r
227             l2FloodDomainBuilder.setId(L2_FD_ID_EXT);\r
228         }\r
229         l2FloodDomainBuilder.setParent(new L2BridgeDomainId(L2BD_ID));\r
230         l2FloodDomainBuilder.addAugmentation(Segmentation.class, buildSegmentation().build());\r
231         l2FloodDomains.add(l2FloodDomainBuilder.build());\r
232         return l2FloodDomains;\r
233     }\r
234 \r
235     protected List<L3Address> getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) {\r
236         List<L3Address> l3Addresses = new ArrayList<>();\r
237         L3AddressBuilder l3AddressBuilder = new L3AddressBuilder();\r
238         l3AddressBuilder.setIpAddress(new IpAddress(l3IpAddress));\r
239         l3AddressBuilder.setL3Context(new L3ContextId(l3ContextId));\r
240         l3Addresses.add(l3AddressBuilder.build());\r
241         return l3Addresses;\r
242     }\r
243 \r
244     protected List<L3Address> getL3AddressList(Ipv6Address l3IpAddress) {\r
245         List<L3Address> l3Addresses = new ArrayList<>();\r
246         L3AddressBuilder l3AddressBuilder = new L3AddressBuilder();\r
247         l3AddressBuilder.setIpAddress(new IpAddress(l3IpAddress));\r
248         l3Addresses.add(l3AddressBuilder.build());\r
249         return l3Addresses;\r
250     }\r
251 \r
252     protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) {\r
253         OfOverlayContextBuilder ofOverlayContextBuilder = new OfOverlayContextBuilder();\r
254         ofOverlayContextBuilder.setNodeConnectorId(connector);\r
255         ofOverlayContextBuilder.setNodeId(NODE_ID);\r
256         return ofOverlayContextBuilder;\r
257     }\r
258 \r
259     protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
260         EndpointBuilder endpointBuilder = new EndpointBuilder();\r
261         endpointBuilder.setTenant(TENANT_ID);\r
262         endpointBuilder.setL3Address(getL3AddressList(l3IpAddress, L3C_ID));\r
263         endpointBuilder.setMacAddress(new MacAddress(mac));\r
264         endpointBuilder.setL2Context(new L2BridgeDomainId(L2BD_ID));\r
265         endpointBuilder.setEndpointGroup(ENDPOINT_GROUP_0);\r
266         endpointBuilder.addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
267         if(l3IpAddress.equals(IPV4_0)) {\r
268             endpointBuilder.setNetworkContainment(SUBNET_0);\r
269         }\r
270         else if(l3IpAddress.equals(IPV4_1)) {\r
271             endpointBuilder.setNetworkContainment(SUBNET_1);\r
272         }\r
273         else if(l3IpAddress.equals(IPV4_2)) {\r
274             endpointBuilder.setNetworkContainment(SUBNET_2);\r
275         }\r
276         return endpointBuilder;\r
277     }\r
278 \r
279     protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
280         EndpointBuilder endpointBuilder = new EndpointBuilder();\r
281         endpointBuilder.setTenant(TENANT_ID);\r
282         endpointBuilder.setL3Address(getL3AddressList(l3IpAddress));\r
283         endpointBuilder.setMacAddress(new MacAddress(mac));\r
284         endpointBuilder.setL2Context(new L2BridgeDomainId(L2BD_ID));\r
285         endpointBuilder.setEndpointGroup(ENDPOINT_GROUP_0);\r
286         endpointBuilder.addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
287         endpointBuilder.setNetworkContainment(NET_DOMAIN_ID);\r
288         return endpointBuilder;\r
289     }\r
290 \r
291     public List<EndpointGroup> getEndpointGroups() {\r
292         return ImmutableList.of(\r
293                 new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0)\r
294                         .setNetworkDomain(SUBNET_0)\r
295                         .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
296                                 .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
297                         .build(),\r
298                 new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1)\r
299                         .setNetworkDomain(SUBNET_1)\r
300                         .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
301                                 .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
302                         .build());\r
303     }\r
304 \r
305     protected SubjectFeatureInstances getSubjectFeatureInstances() {\r
306         SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();\r
307         return builder.setClassifierInstance(ImmutableList.of(new ClassifierInstanceBuilder()\r
308                 .setName(new ClassifierName("tcp_dst_80"))\r
309                 .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
310                 .setParameterValue(ImmutableList.of(new ParameterValueBuilder().setName(new ParameterName("destport"))\r
311                         .setIntValue(80L)        // Endpoint\r
312 \r
313                         .build(), new ParameterValueBuilder().setName(new ParameterName("proto"))\r
314                         .setIntValue(6L)\r
315                         .build()))\r
316                 .build(), new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))\r
317                 .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
318                 .setParameterValue(ImmutableList.of(new ParameterValueBuilder().setName(new ParameterName("sourceport"))\r
319                         .setIntValue(80L)\r
320                         .build(), new ParameterValueBuilder().setName(new ParameterName("proto"))\r
321                         .setIntValue(6L)\r
322                         .build()))\r
323                 .build(), new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))\r
324                 .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
325                 .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
326                         .setName(new ParameterName("ethertype"))\r
327                         .setIntValue(FlowUtils.IPv4)\r
328                         .build()))\r
329                 .build()))\r
330                 .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))\r
331                         .setActionDefinitionId(new AllowAction().getId())\r
332                         .build()))\r
333                 .build();\r
334     }\r
335 \r
336     protected List<Subnet> getSubnetList() {\r
337         return ImmutableList.of(\r
338                 new SubnetBuilder().setId(SUBNET_0)\r
339                         .setParent(L2FD_ID)\r
340                         .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))\r
341                         .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))\r
342                         .build(),\r
343                 new SubnetBuilder().setId(SUBNET_1)\r
344                         .setParent(L2FD_ID)\r
345                         .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))\r
346                         .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))\r
347                         .build(),\r
348                 new SubnetBuilder().setId(SUBNET_2)\r
349                         .setParent(L2BD_ID)\r
350                         .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))\r
351                         .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))\r
352                         .build(),\r
353                 new SubnetBuilder().setId(SUBNET_EXT)\r
354                         .setParent(L2_FD_ID_EXT)\r
355                         .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24")))\r
356                         .build());\r
357     }\r
358 }\r