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