2 * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.policy.acl;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.List;
15 import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition;
16 import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;
17 import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
18 import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
19 import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.PolicyContext;
20 import org.opendaylight.groupbasedpolicy.renderer.vpp.sf.L4Classifier;
21 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
22 import org.opendaylight.groupbasedpolicy.test.CustomDataBrokerTest;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.AccessLists;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCase;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpoint;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpoint;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.parent.endpoint._case.ParentEndpointBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.IpPrefixType;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.L2BridgeDomain;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.L2FloodDomain;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.L3Context;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.MacAddressType;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.Subnet;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.SubnetAugmentRenderer;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.SubnetAugmentRendererBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.SubnetBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.fields.Parent;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.fields.ParentBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererPolicyBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.ConfigurationBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.EndpointsBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpointsBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererForwardingBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroups;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroupsBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationKey;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointKey;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointKey;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.RendererForwardingByTenant;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.RendererForwardingByTenantBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererForwardingContext;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererForwardingContextBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererNetworkDomain;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.renderer.forwarding.by.tenant.RendererNetworkDomainBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.Action;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.ActionBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRule;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRuleBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev170615.access.lists.acl.access.list.entries.ace.matches.ace.type.VppAce;
96 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
98 import com.google.common.collect.ImmutableList;
100 public class TestResources extends CustomDataBrokerTest {
102 protected enum SECURITY_GROUP {
106 private static final String EP1_IP = "10.0.0.10/32";
107 private static final String EP2_EP = "10.0.0.20/32";
108 private static final String EP3_IP = "10.0.0.30/32";
109 private static final String EP1_MAC = "aa:bb:cc:dd:ee:ff";
110 private static final String EP2_MAC = "ff:ee:dd:cc:bb:aa";
111 private static final String EP3_MAC = "11:11:22:22:33:33";
112 protected static final NodeId NODE1 = new NodeId("node1");
113 protected static final String NODE1_CONNECTOR_1 =
114 "/ietf-interfaces:interfaces/ietf-interfaces:interface[ietf-interfaces:name='nodeConnector1']";
115 protected static final String NODE1_CONNECTOR_2 =
116 "/ietf-interfaces:interfaces/ietf-interfaces:interface[ietf-interfaces:name='nodeConnector2']";
117 protected static final String NODE1_CONNECTOR_3 =
118 "/ietf-interfaces:interfaces/ietf-interfaces:interface[ietf-interfaces:name='nodeConnector3']";
119 private static final ContextId L2_FD_ID = new ContextId("l2FdId");
120 protected static final ContextId L2_BD_ID = new ContextId("l2BridgeDomainId");
121 protected static final ContextId L3_CTX_ID = new ContextId("l3CtxId");
122 protected static final SubjectName SUBJECT_NAME = new SubjectName("subject");
123 protected static final SubjectName SUBJECT_NAME2 = new SubjectName("subject2");
124 protected static final ContractId CONTRACT_ID = new ContractId("contract");
126 private static final NetworkDomainId SUBNET_ID = new NetworkDomainId("subnet");
127 private static final IpPrefix SUBNET_PREFIX = new IpPrefix(new Ipv4Prefix("10.0.0.0/24"));
128 private static final IpAddress VIRTUAL_ROUTER_IP = new IpAddress(new Ipv4Address("10.0.0.1"));
130 protected static final TenantId TENANT_ID = new TenantId("tenant1");
132 public final AddressEndpointWithLocation l2AddrEp1 =
133 l2AddressEndpointWithLocation(EP1_MAC, L2_BD_ID, EP1_IP, L3_CTX_ID);
134 public final AddressEndpointWithLocation l3AddrEp1 = appendLocationToEndpoint(
135 l3AddressEndpointWithLocation(EP1_MAC, L2_BD_ID, EP1_IP, L3_CTX_ID), NODE1, NODE1_CONNECTOR_1);
136 public final AddressEndpointWithLocation l2AddrEp2 =
137 l2AddressEndpointWithLocation(EP2_MAC, L2_BD_ID, EP2_EP, L3_CTX_ID);
138 public final AddressEndpointWithLocation l3AddrEp2 = appendLocationToEndpoint(
139 l3AddressEndpointWithLocation(EP2_MAC, L2_BD_ID, EP2_EP, L3_CTX_ID), NODE1, NODE1_CONNECTOR_2);
141 public final AddressEndpointWithLocation l2AddrEp3 =
142 l2AddressEndpointWithLocation(EP3_MAC, L2_BD_ID, EP3_IP, L3_CTX_ID);
143 public final AddressEndpointWithLocation l3AddrEp3 = appendLocationToEndpoint(
144 l3AddressEndpointWithLocation(EP3_MAC, L2_BD_ID, EP3_IP, L3_CTX_ID), NODE1, NODE1_CONNECTOR_3);
146 protected AddressEndpointWithLocation appendLocationToEndpoint(AddressEndpointWithLocationBuilder builder,
147 NodeId nodeId, String nodeConnector) {
148 ExternalLocationCase extLocation = new ExternalLocationCaseBuilder().setExternalNodeConnector(nodeConnector)
149 .setExternalNodeMountPoint(VppIidFactory.getNetconfNodeIid(nodeId))
151 return builder.setAbsoluteLocation(new AbsoluteLocationBuilder().setLocationType(extLocation).build()).build();
154 protected AddressEndpointWithLocation l2AddressEndpointWithLocation(String macAddress, ContextId macAddrContextId,
155 String ipAddress, ContextId ipAddressContextId) {
156 ParentEndpoint parentEndpoint = new ParentEndpointBuilder().setAddress(ipAddress)
157 .setAddressType(IpPrefixType.class)
158 .setContextType(L3Context.class)
159 .setContextId(ipAddressContextId)
161 return new AddressEndpointWithLocationBuilder().setAddress(macAddress)
162 .setAddressType(MacAddressType.class)
163 .setContextId(macAddrContextId)
164 .setContextType(L2BridgeDomain.class)
165 .setParentEndpointChoice(new ParentEndpointCaseBuilder()
166 .setParentEndpoint(ImmutableList.<ParentEndpoint>of(parentEndpoint)).build())
170 protected AddressEndpointWithLocationBuilder l3AddressEndpointWithLocation(String macAddress,
171 ContextId macAddrContextId, String ipAddress, ContextId ipAddressContextId) {
172 ChildEndpoint childEndpoint = new ChildEndpointBuilder().setAddress(macAddress)
173 .setAddressType(MacAddressType.class)
174 .setContextType(L2BridgeDomain.class)
175 .setContextId(macAddrContextId)
177 return new AddressEndpointWithLocationBuilder().setAddress(ipAddress)
178 .setAddressType(IpPrefixType.class)
179 .setContextId(ipAddressContextId)
180 .setContextType(L3Context.class)
181 .setChildEndpoint(ImmutableList.<ChildEndpoint>of(childEndpoint));
184 PolicyContext createPolicyContext(List<AddressEndpointWithLocation> addrEps,
185 List<RendererEndpoint> rendererEndpoints, RuleGroups ruleGroups, RendererForwardingByTenant fwdng) {
186 ConfigurationBuilder config = new ConfigurationBuilder();
187 config.setEndpoints(new EndpointsBuilder().setAddressEndpointWithLocation(addrEps).build()).build();
188 config.setRendererEndpoints(new RendererEndpointsBuilder().setRendererEndpoint(rendererEndpoints).build());
189 config.setRuleGroups(ruleGroups);
190 config.setRendererForwarding(new RendererForwardingBuilder()
191 .setRendererForwardingByTenant(ImmutableList.<RendererForwardingByTenant>of(fwdng)).build());
192 return new PolicyContext(new RendererPolicyBuilder().setConfiguration(config.build()).build());
196 public Collection<Class<?>> getClassesFromModules() {
197 return ImmutableList.<Class<?>>of(AccessLists.class, VppAce.class);
200 public List<AddressEndpointWithLocation> createAddressEndpoints() {
201 List<AddressEndpointWithLocation> addrEps = new ArrayList<>();
202 addrEps.add(l2AddrEp1);
203 addrEps.add(l3AddrEp1);
204 addrEps.add(l2AddrEp2);
205 addrEps.add(l3AddrEp2);
206 addrEps.add(l2AddrEp3);
207 addrEps.add(l3AddrEp3);
211 public List<RendererEndpoint> createRendEps() {
212 List<RendererEndpoint> rEps = new ArrayList<>();
213 rEps.add(createRendEndpoint(rendererEndpointKey(l3AddrEp1.getKey()), SECURITY_GROUP.SERVER,
214 peerEndpointKey(l3AddrEp2.getKey()), peerEndpointKey(l3AddrEp3.getKey())));
215 rEps.add(createRendEndpoint(rendererEndpointKey(l3AddrEp2.getKey()), SECURITY_GROUP.CLIENT,
216 peerEndpointKey(l3AddrEp1.getKey())));
217 rEps.add(createRendEndpoint(rendererEndpointKey(l3AddrEp3.getKey()), SECURITY_GROUP.CLIENT,
218 peerEndpointKey(l3AddrEp1.getKey())));
222 protected RendererEndpointKey rendererEndpointKey(AddressEndpointWithLocationKey addrEp) {
223 return new RendererEndpointKey(addrEp.getAddress(), addrEp.getAddressType(), addrEp.getContextId(),
224 addrEp.getContextType());
227 protected PeerEndpointKey peerEndpointKey(AddressEndpointWithLocationKey addrEp) {
228 return new PeerEndpointKey(addrEp.getAddress(), addrEp.getAddressType(), addrEp.getContextId(),
229 addrEp.getContextType());
232 public RendererEndpoint createRendEndpoint(RendererEndpointKey key, SECURITY_GROUP sg,
233 PeerEndpointKey... peerKeys) {
234 EndpointPolicyParticipation participation;
235 if (sg.equals(SECURITY_GROUP.SERVER)) {
236 participation = EndpointPolicyParticipation.PROVIDER;
237 } else if (sg.equals(SECURITY_GROUP.CLIENT)) {
238 participation = EndpointPolicyParticipation.CONSUMER;
240 throw new IllegalStateException("Specify proper endpoint group participation");
242 List<PeerEndpoint> peers = new ArrayList<>();
243 for (PeerEndpointKey peer : peerKeys) {
244 PeerEndpoint pEp1 = new PeerEndpointBuilder().setKey(peer)
245 .setRuleGroupWithRendererEndpointParticipation(
246 ImmutableList.<RuleGroupWithRendererEndpointParticipation>of(
247 createRuleGroup(CONTRACT_ID, SUBJECT_NAME, TENANT_ID, participation),
248 createRuleGroup(CONTRACT_ID, SUBJECT_NAME2, TENANT_ID, participation)))
252 return new RendererEndpointBuilder().setKey(key).setPeerEndpoint(peers).build();
255 private RuleGroupWithRendererEndpointParticipation createRuleGroup(ContractId ctrctId, SubjectName sn,
256 TenantId tnntId, EndpointPolicyParticipation participation) {
257 return new RuleGroupWithRendererEndpointParticipationBuilder().setRendererEndpointParticipation(participation)
258 .setContractId(ctrctId)
264 public RuleGroups createRuleGroups() {
265 ParameterValue ipv4Param = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE)
266 .setName(new ParameterName(EtherTypeClassifierDefinition.ETHERTYPE_PARAM))
268 ParameterValue tcpParam = new ParameterValueBuilder().setIntValue(IpProtoClassifierDefinition.TCP_VALUE)
269 .setName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM))
271 ParameterValue udpParam = new ParameterValueBuilder().setIntValue(IpProtoClassifierDefinition.UDP_VALUE)
272 .setName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM))
274 RuleGroup rg1 = createSimpleRuleGroups(ImmutableList.of(ipv4Param, tcpParam), IpProtoClassifierDefinition.ID,
276 RuleGroup rg2 = createSimpleRuleGroups(ImmutableList.of(ipv4Param, udpParam), IpProtoClassifierDefinition.ID,
278 return new RuleGroupsBuilder().setRuleGroup(ImmutableList.<RuleGroup>of(rg1, rg2)).build();
281 public RuleGroups createRuleGroupsDhcpTest() {
282 ParameterValue ipv4Param = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE)
283 .setName(new ParameterName(EtherTypeClassifierDefinition.ETHERTYPE_PARAM))
285 ParameterValue tcpParam = new ParameterValueBuilder().setIntValue(IpProtoClassifierDefinition.TCP_VALUE)
286 .setName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM))
288 ParameterValue udpParam = new ParameterValueBuilder().setIntValue(IpProtoClassifierDefinition.UDP_VALUE)
289 .setName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM))
291 ParameterValue srcDhcp = new ParameterValueBuilder().setIntValue(Long.valueOf(68))
292 .setName(new ParameterName(L4ClassifierDefinition.SRC_PORT_PARAM))
294 ParameterValue dstDhcp = new ParameterValueBuilder().setIntValue(Long.valueOf(67))
295 .setName(new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM))
297 RuleGroup rg1 = createSimpleRuleGroups(ImmutableList.of(ipv4Param, tcpParam), IpProtoClassifierDefinition.ID,
299 RuleGroup rg2 = createSimpleRuleGroups(ImmutableList.of(ipv4Param, udpParam, srcDhcp, dstDhcp), L4ClassifierDefinition.ID,
301 return new RuleGroupsBuilder().setRuleGroup(ImmutableList.<RuleGroup>of(rg1, rg2)).build();
304 private RuleGroup createSimpleRuleGroups(List<ParameterValue> pv, ClassifierDefinitionId id,
305 SubjectName subjectName) {
306 final ClassifierName classifierName = new ClassifierName("cl-name");
307 Classifier classifIn = new ClassifierBuilder().setClassifierDefinitionId(id)
308 .setDirection(Direction.In)
309 .setName(classifierName)
310 .setParameterValue(pv)
312 Classifier classifOut = new ClassifierBuilder().setClassifierDefinitionId(id)
313 .setDirection(Direction.Out)
314 .setName(classifierName)
315 .setParameterValue(pv)
317 Action action = new ActionBuilder().setActionDefinitionId(AllowActionDefinition.ID)
318 .setName(new ActionName("Allow"))
320 final RuleName ruleNameIn = new RuleName("rule_in" + subjectName.getValue());
321 final RuleName ruleNameOut = new RuleName("rule_out" + subjectName.getValue());
322 ResolvedRule ruleIn =
323 resolveRule(ruleNameIn, ImmutableList.<Classifier>of(classifIn), ImmutableList.<Action>of(action), 0);
324 ResolvedRule ruleOut =
325 resolveRule(ruleNameOut, ImmutableList.<Classifier>of(classifOut), ImmutableList.<Action>of(action), 1);
326 return new RuleGroupBuilder().setOrder(0)
327 .setTenantId(TENANT_ID)
328 .setSubjectName(subjectName)
329 .setContractId(CONTRACT_ID)
330 .setResolvedRule(ImmutableList.<ResolvedRule>of(ruleIn, ruleOut))
334 private ResolvedRule resolveRule(RuleName ruleName, List<Classifier> classifs, List<Action> actions,
336 ResolvedRuleBuilder rrBuilder = new ResolvedRuleBuilder();
337 rrBuilder.setClassifier(classifs);
338 rrBuilder.setAction(actions);
339 rrBuilder.setName(ruleName);
340 rrBuilder.setOrder(order);
341 return rrBuilder.build();
344 protected RendererForwardingByTenant createForwarding() {
345 RendererForwardingContext l2Fd = createRendererForwardingCtx(L2_FD_ID, new Name("l2fd"), L2FloodDomain.class)
346 .setParent(createParent(L2_BD_ID, L2BridgeDomain.class)).build();
347 RendererForwardingContext l2Bd = createRendererForwardingCtx(L3_CTX_ID, new Name("l3ctx"), L3Context.class)
348 .setParent(createParent(L3_CTX_ID, L3Context.class)).build();
349 RendererForwardingContext l3Ctx =
350 createRendererForwardingCtx(L2_BD_ID, new Name("l2bd"), L2BridgeDomain.class).build();
351 RendererNetworkDomain subnet =
352 new RendererNetworkDomainBuilder().setNetworkDomainId(SUBNET_ID)
353 .setName(new Name("subnet"))
354 .setNetworkDomainType(Subnet.class)
355 .setParent(createParent(L2_FD_ID, L2FloodDomain.class))
356 .addAugmentation(SubnetAugmentRenderer.class,
357 new SubnetAugmentRendererBuilder().setSubnet(new SubnetBuilder().setIsTenant(true)
358 .setIpPrefix(SUBNET_PREFIX)
359 .setVirtualRouterIp(VIRTUAL_ROUTER_IP)
362 return new RendererForwardingByTenantBuilder().setTenantId(TENANT_ID)
363 .setRendererForwardingContext(ImmutableList.<RendererForwardingContext>of(l2Fd, l2Bd, l3Ctx))
364 .setRendererNetworkDomain(ImmutableList.<RendererNetworkDomain>of(subnet))
368 private RendererForwardingContextBuilder createRendererForwardingCtx(ContextId id, Name name,
369 Class<? extends ContextType> type) {
370 return new RendererForwardingContextBuilder().setName(name).setContextId(id).setContextType(type);
373 private Parent createParent(ContextId ctxId, Class<? extends ContextType> type) {
374 return new ParentBuilder().setContextId(ctxId).setContextType(type).build();