-/*\r
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper;\r
-\r
-import com.google.common.base.Preconditions;\r
-import com.google.common.collect.ImmutableList;\r
-import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;\r
-import org.opendaylight.groupbasedpolicy.dto.IndexedTenant;\r
-import org.opendaylight.groupbasedpolicy.dto.PolicyInfo;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.ChainAction;\r
-import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-public abstract class MapperUtilsTest {\r
-\r
- protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00");\r
- protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01");\r
- protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02");\r
- protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1");\r
- protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1");\r
- protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1");\r
- protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334");\r
- protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba");\r
- protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0");\r
- protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1");\r
- protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2");\r
- protected static final SubnetId SUBNET_0 = new SubnetId("subnet0");\r
- protected static final SubnetId SUBNET_1 = new SubnetId("subnet1");\r
- protected static final SubnetId SUBNET_2 = new SubnetId("subnet2");\r
- protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet");\r
- protected static final String IP_PREFIX_32 = "/32";\r
- protected static final String IP_PREFIX_128 = "/128";\r
- protected static final TenantId TENANT_ID = new TenantId("tenantId");\r
- protected static final NodeId NODE_ID = new NodeId("nodeId");\r
- protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0");\r
- protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1");\r
- protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2");\r
- protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId");\r
- protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId");\r
- protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId");\r
- protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId");\r
- protected static final L3ContextId L3C_ID = new L3ContextId("l3cId");\r
- protected static final ContractId CONTRACT_ID = new ContractId("contractId");\r
- protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId");\r
- // Often used strings\r
- protected static final String ALLOW = "allow";\r
- protected static final String CHAIN = "chain";\r
- protected static final String L2 = "L2";\r
- protected static final String OPENFLOW = "openflow:";\r
- protected static final String DROP_ALL = "dropAll";\r
- protected static final String DROP = "drop";\r
- protected static final String TCP_SRC = "tcp_src_80";\r
- // Mock variables\r
- protected Short tableId;\r
- protected OfContext ctx;\r
- protected OfWriter ofWriter;\r
- protected SwitchManager switchManager;\r
- protected PolicyManager policyManager;\r
- protected EndpointManager endpointManager;\r
- protected PolicyInfo policyInfo;\r
- protected FlowTable table;\r
-\r
- protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match,\r
- Instructions instructions) {\r
- return FlowUtils.base(tableId)\r
- .setId(flowId)\r
- .setPriority(priority)\r
- .setMatch(match)\r
- .setInstructions(instructions);\r
- }\r
-\r
- protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) {\r
- Preconditions.checkNotNull(natIp);\r
- Preconditions.checkNotNull(ip);\r
- Preconditions.checkNotNull(mac);\r
-\r
- NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build();\r
-\r
- EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)\r
- .setIpAddress(new IpAddress(ip))\r
- .setMacAddress(new MacAddress(mac));\r
- if (l2bd != null) {\r
- endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
- }\r
- if (ip.equals(IPV4_0)) {\r
- endpointL3Builder.setNetworkContainment(SUBNET_0);\r
- } else if (ip.equals(IPV4_1)) {\r
- endpointL3Builder.setNetworkContainment(SUBNET_1);\r
- } else if (ip.equals(IPV4_2)) {\r
- endpointL3Builder.setNetworkContainment(SUBNET_2);\r
- }\r
- return endpointL3Builder;\r
- }\r
-\r
- protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) {\r
- Preconditions.checkNotNull(natIp);\r
- Preconditions.checkNotNull(ip);\r
- Preconditions.checkNotNull(mac);\r
-\r
- NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build();\r
-\r
- EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)\r
- .setIpAddress(new IpAddress(ip))\r
- .setMacAddress(new MacAddress(mac));\r
- if (l2bd != null) {\r
- endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));\r
- }\r
- return endpointL3Builder;\r
- }\r
-\r
- public SegmentationBuilder buildSegmentation() {\r
- return new SegmentationBuilder().setSegmentationId(1);\r
- }\r
-\r
- protected TenantBuilder buildTenant() {\r
- Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())\r
- .setSubjectFeatureInstances(getSubjectFeatureInstances())\r
- .build();\r
-\r
- return new TenantBuilder().setId(TENANT_ID)\r
- .setForwardingContext(buildForwardingContext().build())\r
- .setPolicy(policy);\r
- }\r
-\r
- protected TenantBuilder buildTenant(ActionInstance actionInstance) {\r
- Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())\r
- .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance))\r
- .build();\r
-\r
- return new TenantBuilder().setId(TENANT_ID)\r
- .setForwardingContext(buildForwardingContext().build())\r
- .setPolicy(policy);\r
- }\r
-\r
- protected IndexedTenant getTestIndexedTenant() {\r
- return new IndexedTenant(buildTenant().build());\r
- }\r
-\r
- protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) {\r
- return new IndexedTenant(buildTenant(actionInstance).build());\r
- }\r
-\r
- protected ForwardingContextBuilder buildForwardingContext() {\r
- return new ForwardingContextBuilder().setL2FloodDomain(getL2FloodDomainList(false))\r
- .setL2BridgeDomain(getL2BridgeDomainList())\r
- .setL3Context(getL3ContextList())\r
- .setSubnet(getSubnetList());\r
- }\r
-\r
- protected List<L3Context> getL3ContextList() {\r
- L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build();\r
- return ImmutableList.of(l3Context);\r
- }\r
-\r
- protected List<L2BridgeDomain> getL2BridgeDomainList() {\r
- L2BridgeDomain l2BridgeDomain = new L2BridgeDomainBuilder().setId(L2BD_ID).setParent(L3C_ID).build();\r
- return ImmutableList.of(l2BridgeDomain);\r
- }\r
-\r
- protected List<L2FloodDomain> getL2FloodDomainList(boolean external) {\r
- L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder().setId(L2FD_ID)\r
- .setParent(new L2BridgeDomainId(L2BD_ID))\r
- .addAugmentation(Segmentation.class, buildSegmentation().build());\r
- if (external) {\r
- l2FloodDomainBuilder.setId(L2_FD_ID_EXT);\r
- }\r
- return ImmutableList.of(l2FloodDomainBuilder.build());\r
- }\r
-\r
- protected List<L3Address> getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) {\r
- L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress))\r
- .setL3Context(new L3ContextId(l3ContextId))\r
- .build();\r
- return ImmutableList.of(l3Address);\r
- }\r
-\r
- protected List<L3Address> getL3AddressList(Ipv6Address l3IpAddress) {\r
- L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)).build();\r
- return ImmutableList.of(l3Address);\r
- }\r
-\r
- protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) {\r
- return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID);\r
- }\r
-\r
- protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
- EndpointBuilder endpointBuilder = new EndpointBuilder().setTenant(TENANT_ID)\r
- .setL3Address(getL3AddressList(l3IpAddress, L3C_ID))\r
- .setMacAddress(new MacAddress(mac))\r
- .setL2Context(new L2BridgeDomainId(L2BD_ID))\r
- .setEndpointGroup(ENDPOINT_GROUP_0)\r
- .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
- if (l3IpAddress.equals(IPV4_0)) {\r
- endpointBuilder.setNetworkContainment(SUBNET_0);\r
- } else if (l3IpAddress.equals(IPV4_1)) {\r
- endpointBuilder.setNetworkContainment(SUBNET_1);\r
- } else if (l3IpAddress.equals(IPV4_2)) {\r
- endpointBuilder.setNetworkContainment(SUBNET_2);\r
- }\r
- return endpointBuilder;\r
- }\r
-\r
- protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {\r
- return new EndpointBuilder().setTenant(TENANT_ID)\r
- .setL3Address(getL3AddressList(l3IpAddress))\r
- .setMacAddress(new MacAddress(mac))\r
- .setL2Context(new L2BridgeDomainId(L2BD_ID))\r
- .setEndpointGroup(ENDPOINT_GROUP_0)\r
- .setNetworkContainment(NET_DOMAIN_ID)\r
- .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());\r
- }\r
-\r
- public List<EndpointGroup> getEndpointGroups() {\r
- return ImmutableList.of(\r
- new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0)\r
- .setNetworkDomain(SUBNET_0)\r
- .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()\r
- .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
- .build(),\r
- new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1)\r
- .setNetworkDomain(SUBNET_1)\r
- .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()\r
- .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))\r
- .build());\r
- }\r
-\r
- protected SubjectFeatureInstances getSubjectFeatureInstances() {\r
- SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();\r
- return builder.setClassifierInstance(ImmutableList.of(\r
- new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))\r
- .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
- .setParameterValue(ImmutableList.of(\r
- new ParameterValueBuilder().setName(new ParameterName("destport"))\r
- .setIntValue(80L) // Endpoint\r
-\r
- .build(),\r
- new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
- .build(),\r
- new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))\r
- .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
- .setParameterValue(ImmutableList.of(\r
- new ParameterValueBuilder().setName(new ParameterName("sourceport"))\r
- .setIntValue(80L)\r
- .build(),\r
- new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
- .build(),\r
- new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))\r
- .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
- .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
- .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))\r
- .build()))\r
- .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))\r
- .setActionDefinitionId(new AllowAction().getId())\r
- .build()))\r
- .build();\r
- }\r
-\r
- protected SubjectFeatureInstances getSubjectFeatureInstances(ActionInstance actionInstance) {\r
- SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();\r
- return builder.setClassifierInstance(ImmutableList.of(\r
- new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))\r
- .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())\r
- .setParameterValue(ImmutableList.of(\r
- new ParameterValueBuilder().setName(new ParameterName("destport"))\r
- .setIntValue(80L) // Endpoint\r
-\r
- .build(),\r
- new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
- .build(),\r
- new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))\r
- .setClassifierDefinitionId(Classifier.L4_CL.getId())\r
- .setParameterValue(ImmutableList.of(\r
- new ParameterValueBuilder().setName(new ParameterName("sourceport"))\r
- .setIntValue(80L)\r
- .build(),\r
- new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))\r
- .build(),\r
- new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))\r
- .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())\r
- .setParameterValue(ImmutableList.of(new ParameterValueBuilder()\r
- .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))\r
- .build()))\r
- .setActionInstance(ImmutableList.of(actionInstance))\r
- .build();\r
- }\r
-\r
- protected List<Subnet> getSubnetList() {\r
- return ImmutableList.of(\r
- new SubnetBuilder().setId(SUBNET_0)\r
- .setParent(L2FD_ID)\r
- .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))\r
- .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))\r
- .build(),\r
- new SubnetBuilder().setId(SUBNET_1)\r
- .setParent(L2FD_ID)\r
- .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))\r
- .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))\r
- .build(),\r
- new SubnetBuilder().setId(SUBNET_2)\r
- .setParent(L2BD_ID)\r
- .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))\r
- .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))\r
- .build(),\r
- new SubnetBuilder().setId(SUBNET_EXT)\r
- .setParent(L2_FD_ID_EXT)\r
- .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24")))\r
- .build());\r
- }\r
-}\r
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
+import org.opendaylight.groupbasedpolicy.dto.IndexedTenant;
+import org.opendaylight.groupbasedpolicy.dto.PolicyInfo;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.ChainAction;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class MapperUtilsTest {
+
+ protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00");
+ protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01");
+ protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02");
+ protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1");
+ protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1");
+ protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1");
+ protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334");
+ protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba");
+ protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0");
+ protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1");
+ protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2");
+ protected static final SubnetId SUBNET_0 = new SubnetId("subnet0");
+ protected static final SubnetId SUBNET_1 = new SubnetId("subnet1");
+ protected static final SubnetId SUBNET_2 = new SubnetId("subnet2");
+ protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet");
+ protected static final String IP_PREFIX_32 = "/32";
+ protected static final String IP_PREFIX_128 = "/128";
+ protected static final TenantId TENANT_ID = new TenantId("tenantId");
+ protected static final NodeId NODE_ID = new NodeId("nodeId");
+ protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0");
+ protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1");
+ protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2");
+ protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId");
+ protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId");
+ protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId");
+ protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId");
+ protected static final L3ContextId L3C_ID = new L3ContextId("l3cId");
+ protected static final ContractId CONTRACT_ID = new ContractId("contractId");
+ protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId");
+ // Often used strings
+ protected static final String ALLOW = "allow";
+ protected static final String CHAIN = "chain";
+ protected static final String L2 = "L2";
+ protected static final String OPENFLOW = "openflow:";
+ protected static final String DROP_ALL = "dropAll";
+ protected static final String DROP = "drop";
+ protected static final String TCP_SRC = "tcp_src_80";
+ // Mock variables
+ protected Short tableId;
+ protected OfContext ctx;
+ protected OfWriter ofWriter;
+ protected SwitchManager switchManager;
+ protected PolicyManager policyManager;
+ protected EndpointManager endpointManager;
+ protected PolicyInfo policyInfo;
+ protected FlowTable table;
+
+ protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match,
+ Instructions instructions) {
+ return FlowUtils.base(tableId)
+ .setId(flowId)
+ .setPriority(priority)
+ .setMatch(match)
+ .setInstructions(instructions);
+ }
+
+ protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) {
+ Preconditions.checkNotNull(natIp);
+ Preconditions.checkNotNull(ip);
+ Preconditions.checkNotNull(mac);
+
+ NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build();
+
+ EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)
+ .setIpAddress(new IpAddress(ip))
+ .setMacAddress(new MacAddress(mac));
+ if (l2bd != null) {
+ endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));
+ }
+ if (ip.equals(IPV4_0)) {
+ endpointL3Builder.setNetworkContainment(SUBNET_0);
+ } else if (ip.equals(IPV4_1)) {
+ endpointL3Builder.setNetworkContainment(SUBNET_1);
+ } else if (ip.equals(IPV4_2)) {
+ endpointL3Builder.setNetworkContainment(SUBNET_2);
+ }
+ return endpointL3Builder;
+ }
+
+ protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) {
+ Preconditions.checkNotNull(natIp);
+ Preconditions.checkNotNull(ip);
+ Preconditions.checkNotNull(mac);
+
+ NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build();
+
+ EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress)
+ .setIpAddress(new IpAddress(ip))
+ .setMacAddress(new MacAddress(mac));
+ if (l2bd != null) {
+ endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd));
+ }
+ return endpointL3Builder;
+ }
+
+ public SegmentationBuilder buildSegmentation() {
+ return new SegmentationBuilder().setSegmentationId(1);
+ }
+
+ protected TenantBuilder buildTenant() {
+ Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())
+ .setSubjectFeatureInstances(getSubjectFeatureInstances())
+ .build();
+
+ return new TenantBuilder().setId(TENANT_ID)
+ .setForwardingContext(buildForwardingContext().build())
+ .setPolicy(policy);
+ }
+
+ protected TenantBuilder buildTenant(ActionInstance actionInstance) {
+ Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups())
+ .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance))
+ .build();
+
+ return new TenantBuilder().setId(TENANT_ID)
+ .setForwardingContext(buildForwardingContext().build())
+ .setPolicy(policy);
+ }
+
+ protected IndexedTenant getTestIndexedTenant() {
+ return new IndexedTenant(buildTenant().build());
+ }
+
+ protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) {
+ return new IndexedTenant(buildTenant(actionInstance).build());
+ }
+
+ protected ForwardingContextBuilder buildForwardingContext() {
+ return new ForwardingContextBuilder().setL2FloodDomain(getL2FloodDomainList(false))
+ .setL2BridgeDomain(getL2BridgeDomainList())
+ .setL3Context(getL3ContextList())
+ .setSubnet(getSubnetList());
+ }
+
+ protected List<L3Context> getL3ContextList() {
+ L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build();
+ return ImmutableList.of(l3Context);
+ }
+
+ protected List<L2BridgeDomain> getL2BridgeDomainList() {
+ L2BridgeDomain l2BridgeDomain = new L2BridgeDomainBuilder().setId(L2BD_ID).setParent(L3C_ID).build();
+ return ImmutableList.of(l2BridgeDomain);
+ }
+
+ protected List<L2FloodDomain> getL2FloodDomainList(boolean external) {
+ L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder().setId(L2FD_ID)
+ .setParent(new L2BridgeDomainId(L2BD_ID))
+ .addAugmentation(Segmentation.class, buildSegmentation().build());
+ if (external) {
+ l2FloodDomainBuilder.setId(L2_FD_ID_EXT);
+ }
+ return ImmutableList.of(l2FloodDomainBuilder.build());
+ }
+
+ protected List<L3Address> getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) {
+ L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress))
+ .setL3Context(new L3ContextId(l3ContextId))
+ .build();
+ return ImmutableList.of(l3Address);
+ }
+
+ protected List<L3Address> getL3AddressList(Ipv6Address l3IpAddress) {
+ L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)).build();
+ return ImmutableList.of(l3Address);
+ }
+
+ protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) {
+ return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID);
+ }
+
+ protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {
+ EndpointBuilder endpointBuilder = new EndpointBuilder().setTenant(TENANT_ID)
+ .setL3Address(getL3AddressList(l3IpAddress, L3C_ID))
+ .setMacAddress(new MacAddress(mac))
+ .setL2Context(new L2BridgeDomainId(L2BD_ID))
+ .setEndpointGroup(ENDPOINT_GROUP_0)
+ .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());
+ if (l3IpAddress.equals(IPV4_0)) {
+ endpointBuilder.setNetworkContainment(SUBNET_0);
+ } else if (l3IpAddress.equals(IPV4_1)) {
+ endpointBuilder.setNetworkContainment(SUBNET_1);
+ } else if (l3IpAddress.equals(IPV4_2)) {
+ endpointBuilder.setNetworkContainment(SUBNET_2);
+ }
+ return endpointBuilder;
+ }
+
+ protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) {
+ return new EndpointBuilder().setTenant(TENANT_ID)
+ .setL3Address(getL3AddressList(l3IpAddress))
+ .setMacAddress(new MacAddress(mac))
+ .setL2Context(new L2BridgeDomainId(L2BD_ID))
+ .setEndpointGroup(ENDPOINT_GROUP_0)
+ .setNetworkContainment(NET_DOMAIN_ID)
+ .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build());
+ }
+
+ public List<EndpointGroup> getEndpointGroups() {
+ return ImmutableList.of(
+ new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0)
+ .setNetworkDomain(SUBNET_0)
+ .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder()
+ .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))
+ .build(),
+ new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1)
+ .setNetworkDomain(SUBNET_1)
+ .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder()
+ .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build()))
+ .build());
+ }
+
+ protected SubjectFeatureInstances getSubjectFeatureInstances() {
+ SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();
+ return builder.setClassifierInstance(ImmutableList.of(
+ new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))
+ .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
+ .setParameterValue(ImmutableList.of(
+ new ParameterValueBuilder().setName(new ParameterName("destport"))
+ .setIntValue(80L) // Endpoint
+
+ .build(),
+ new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+ .build(),
+ new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))
+ .setClassifierDefinitionId(Classifier.L4_CL.getId())
+ .setParameterValue(ImmutableList.of(
+ new ParameterValueBuilder().setName(new ParameterName("sourceport"))
+ .setIntValue(80L)
+ .build(),
+ new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+ .build(),
+ new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))
+ .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())
+ .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
+ .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))
+ .build()))
+ .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow"))
+ .setActionDefinitionId(new AllowAction().getId())
+ .build()))
+ .build();
+ }
+
+ protected SubjectFeatureInstances getSubjectFeatureInstances(ActionInstance actionInstance) {
+ SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder();
+ return builder.setClassifierInstance(ImmutableList.of(
+ new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80"))
+ .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId())
+ .setParameterValue(ImmutableList.of(
+ new ParameterValueBuilder().setName(new ParameterName("destport"))
+ .setIntValue(80L) // Endpoint
+
+ .build(),
+ new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+ .build(),
+ new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC))
+ .setClassifierDefinitionId(Classifier.L4_CL.getId())
+ .setParameterValue(ImmutableList.of(
+ new ParameterValueBuilder().setName(new ParameterName("sourceport"))
+ .setIntValue(80L)
+ .build(),
+ new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build()))
+ .build(),
+ new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type"))
+ .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId())
+ .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
+ .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build()))
+ .build()))
+ .setActionInstance(ImmutableList.of(actionInstance))
+ .build();
+ }
+
+ protected List<Subnet> getSubnetList() {
+ return ImmutableList.of(
+ new SubnetBuilder().setId(SUBNET_0)
+ .setParent(L2FD_ID)
+ .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24")))
+ .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1")))
+ .build(),
+ new SubnetBuilder().setId(SUBNET_1)
+ .setParent(L2FD_ID)
+ .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24")))
+ .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1")))
+ .build(),
+ new SubnetBuilder().setId(SUBNET_2)
+ .setParent(L2BD_ID)
+ .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24")))
+ .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1")))
+ .build(),
+ new SubnetBuilder().setId(SUBNET_EXT)
+ .setParent(L2_FD_ID_EXT)
+ .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24")))
+ .build());
+ }
+}