1 package org.opendaylight.groupbasedpolicy.renderer.vpp;
3 import java.util.Arrays;
5 import java.util.stream.Collectors;
6 import java.util.stream.Stream;
8 import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.VppPathMapper;
9 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.KeyFactory;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainment;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.ForwardingContextContainmentBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocation;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L2FloodDomain;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.ConfigurationBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.Endpoints;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.EndpointsBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpointsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroupsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRuleBuilder;
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
45 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
50 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
52 import com.google.common.base.Strings;
54 public class DtoFactory {
56 public static final ContextId CTX_ID = new ContextId("ctx");
57 public static final ContextId L2FD_CTX = new ContextId("l2fd");
58 public static final ContractId CONTRACT_ID = new ContractId("contract");
59 public static final TenantId TENANT_ID = new TenantId("tenant");
60 public static final SubjectName SUBJECT_NAME = new SubjectName("subject");
61 public static final RuleName RULE_NAME = new RuleName("rule");
62 public static final RuleGroupWithRendererEndpointParticipation RULE_GROUP_WITH_CONSUMER =
63 new RuleGroupWithRendererEndpointParticipationBuilder().setContractId(CONTRACT_ID)
64 .setTenantId(TENANT_ID)
65 .setSubjectName(SUBJECT_NAME)
66 .setRendererEndpointParticipation(EndpointPolicyParticipation.CONSUMER)
68 public static final RuleGroupWithRendererEndpointParticipation RULE_GROUP_WITH_PROVIDER =
69 new RuleGroupWithRendererEndpointParticipationBuilder().setContractId(CONTRACT_ID)
70 .setTenantId(TENANT_ID)
71 .setSubjectName(SUBJECT_NAME)
72 .setRendererEndpointParticipation(EndpointPolicyParticipation.PROVIDER)
74 public static final RuleGroup RULE_GROUP = new RuleGroupBuilder().setContractId(CONTRACT_ID)
75 .setTenantId(TENANT_ID)
76 .setSubjectName(SUBJECT_NAME)
77 .setResolvedRule(Arrays.asList(new ResolvedRuleBuilder().setName(RULE_NAME).build()))
79 public final static TopologyKey TOPO_KEY = new TopologyKey(new TopologyId("topology-netconf"));
80 public final static InstanceIdentifier<Node> VPP_NODE_1_IID = InstanceIdentifier.builder(NetworkTopology.class)
81 .child(Topology.class, TOPO_KEY)
82 .child(Node.class, new NodeKey(new NodeId("node1")))
84 public final static InstanceIdentifier<Node> VPP_NODE_2_IID = InstanceIdentifier.builder(NetworkTopology.class)
85 .child(Topology.class, TOPO_KEY)
86 .child(Node.class, new NodeKey(new NodeId("node2")))
89 public static Configuration createConfiguration(List<AddressEndpointWithLocation> consumers,
90 List<AddressEndpointWithLocation> providers) {
91 List<AddressEndpointWithLocation> eps =
92 Stream.concat(consumers.stream(), providers.stream()).collect(Collectors.toList());
93 Endpoints endpoints = new EndpointsBuilder().setAddressEndpointWithLocation(eps).build();
94 List<RendererEndpoint> consumersAsRendererEps = consumers.stream().map(cons -> {
95 List<PeerEndpoint> peers = providers.stream()
96 .map(web -> new PeerEndpointBuilder().setKey(KeyFactory.peerEndpointKey(web.getKey()))
97 .setRuleGroupWithRendererEndpointParticipation(Arrays.asList(RULE_GROUP_WITH_CONSUMER))
99 .collect(Collectors.toList());
100 return new RendererEndpointBuilder().setKey(KeyFactory.rendererEndpointKey(cons.getKey()))
101 .setPeerEndpoint(peers)
103 }).collect(Collectors.toList());
104 List<RendererEndpoint> providersAsRendererEps = providers.stream().map(prov -> {
105 List<PeerEndpoint> peers = consumers.stream()
106 .map(client -> new PeerEndpointBuilder().setKey(KeyFactory.peerEndpointKey(client.getKey()))
107 .setRuleGroupWithRendererEndpointParticipation(Arrays.asList(RULE_GROUP_WITH_PROVIDER))
109 .collect(Collectors.toList());
110 return new RendererEndpointBuilder().setKey(KeyFactory.rendererEndpointKey(prov.getKey()))
111 .setPeerEndpoint(peers)
113 }).collect(Collectors.toList());
114 List<RendererEndpoint> rendererEps = Stream
115 .concat(consumersAsRendererEps.stream(), providersAsRendererEps.stream()).collect(Collectors.toList());
116 return new ConfigurationBuilder().setEndpoints(endpoints)
117 .setRendererEndpoints(new RendererEndpointsBuilder().setRendererEndpoint(rendererEps).build())
118 .setRuleGroups(new RuleGroupsBuilder().setRuleGroup(Arrays.asList(RULE_GROUP)).build())
122 public static AddressEndpointWithLocation createEndpoint(String ip, String l2FdIdAsNetCont,
123 AbsoluteLocation absoluteLocation) {
124 AddressEndpointWithLocationKey key =
125 new AddressEndpointWithLocationKey(ip, AddressType.class, CTX_ID, ContextType.class);
126 NetworkContainment networkContainment =
127 new NetworkContainmentBuilder().setContainment(new ForwardingContextContainmentBuilder()
128 .setContextType(L2FloodDomain.class).setContextId(new ContextId(l2FdIdAsNetCont)).build()).build();
129 return new AddressEndpointWithLocationBuilder().setKey(key)
130 .setNetworkContainment(networkContainment)
131 .setAbsoluteLocation(absoluteLocation)
135 public static AbsoluteLocation absoluteLocation(InstanceIdentifier<?> mountPoint, String nodeName,
136 String nodeConnectorName) {
137 ExternalLocationCaseBuilder extLocBuilder =
138 new ExternalLocationCaseBuilder().setExternalNodeMountPoint(mountPoint);
139 if (!Strings.isNullOrEmpty(nodeName)) {
140 extLocBuilder.setExternalNode(VppPathMapper.bridgeDomainToRestPath(nodeName));
142 if (!Strings.isNullOrEmpty(nodeConnectorName)) {
143 extLocBuilder.setExternalNodeConnector(VppPathMapper.interfaceToRestPath(nodeConnectorName));
145 return new AbsoluteLocationBuilder().setLocationType(extLocBuilder.build()).build();