2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
\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
8 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper;
\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
83 import java.util.ArrayList;
\r
84 import java.util.List;
\r
86 public abstract class MapperUtilsTest {
\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
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
135 protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match,
\r
136 Instructions instructions) {
\r
137 return FlowUtils.base(tableId)
\r
139 .setPriority(priority)
\r
141 .setInstructions(instructions);
\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
149 NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build();
\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
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
164 return endpointL3Builder;
\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
172 NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build();
\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
180 return endpointL3Builder;
\r
183 public SegmentationBuilder buildSegmentation() {
\r
184 return new SegmentationBuilder().setSegmentationId(1);
\r
187 protected TenantBuilder buildTenant() {
\r
188 Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())
\r
189 .setSubjectFeatureInstances(getSubjectFeatureInstances())
\r
192 return new TenantBuilder().setId(TENANT_ID)
\r
193 .setForwardingContext(buildForwardingContext().build())
\r
194 .setPolicy(policy);
\r
197 protected TenantBuilder buildTenant(ActionInstance actionInstance) {
\r
198 Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())
\r
199 .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance))
\r
202 return new TenantBuilder().setId(TENANT_ID)
\r
203 .setForwardingContext(buildForwardingContext().build())
\r
204 .setPolicy(policy);
\r
207 protected IndexedTenant getTestIndexedTenant() {
\r
208 return new IndexedTenant(buildTenant().build());
\r
211 protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) {
\r
212 return new IndexedTenant(buildTenant(actionInstance).build());
\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
222 protected List<L3Context> getL3ContextList() {
\r
223 L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build();
\r
224 return ImmutableList.of(l3Context);
\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
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
237 l2FloodDomainBuilder.setId(L2_FD_ID_EXT);
\r
239 return ImmutableList.of(l2FloodDomainBuilder.build());
\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
246 return ImmutableList.of(l3Address);
\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
254 protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) {
\r
255 return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID);
\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
272 return endpointBuilder;
\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
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
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
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
309 new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).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
317 new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).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
324 .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))
\r
325 .setActionDefinitionId(new AllowAction().getId())
\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
340 new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).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
348 new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).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
355 .setActionInstance(ImmutableList.of(actionInstance))
\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
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
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
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