2 * Copyright © 2017 Ericsson India Global Services Pvt Ltd. 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
8 package org.opendaylight.netvirt.elanmanager.tests;
10 import static org.opendaylight.netvirt.elan.l2gw.nodehandlertest.NodeConnectedHandlerUtils.getUUid;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.UUID;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
17 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
18 import org.opendaylight.netvirt.elan.l2gw.nodehandlertest.GlobalAugmentationHelper;
19 import org.opendaylight.netvirt.elan.l2gw.nodehandlertest.TestBuilders;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.Devices;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.DevicesBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.devices.Interfaces;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.devices.InterfacesBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.L2gatewayConnections;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnection;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnectionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnectionKey;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.L2gateways;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.l2gateways.L2gateway;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.l2gateways.L2gatewayBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.l2gateways.L2gatewayKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentationBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalRef;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepNodeName;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentationBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacs;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacsBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelIps;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelIpsBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelIpsKey;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
52 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
53 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
54 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
55 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
57 public class L2gwBuilders {
59 private final SingleTransactionDataBroker singleTransactionDataBroker;
61 public L2gwBuilders(SingleTransactionDataBroker singleTransactionDataBroker) {
62 this.singleTransactionDataBroker = singleTransactionDataBroker;
65 public L2gatewayConnection buildConnection(String connectionName, String l2gwName, String elan,
66 Integer segmentationId) {
68 final L2gatewayConnectionBuilder l2gatewayConnectionBuilder = new L2gatewayConnectionBuilder();
70 String uuidConnectionName = UUID.nameUUIDFromBytes(connectionName.getBytes()).toString();
71 l2gatewayConnectionBuilder.setUuid(new Uuid(uuidConnectionName));
73 String uuidL2gwName = UUID.nameUUIDFromBytes(l2gwName.getBytes()).toString();
74 l2gatewayConnectionBuilder.setL2gatewayId(new Uuid(uuidL2gwName));
75 l2gatewayConnectionBuilder.setNetworkId(new Uuid(elan));
76 l2gatewayConnectionBuilder.setSegmentId(segmentationId);
77 l2gatewayConnectionBuilder.setTenantId(new Uuid(ExpectedObjects.ELAN1));
79 String portName = "port";
80 String uuidPort = UUID.nameUUIDFromBytes(portName.getBytes()).toString();
81 l2gatewayConnectionBuilder.setPortId(new Uuid(uuidPort));
82 return l2gatewayConnectionBuilder.build();
85 public L2gateway buildL2gw(String l2gwName, String deviceName, List<String> intfNames) {
86 final L2gatewayBuilder l2gatewayBuilder = new L2gatewayBuilder();
87 String uuid = UUID.nameUUIDFromBytes(l2gwName.getBytes()).toString();
88 //String tenantUuid = UUID.fromString(ELAN1).toString();
89 l2gatewayBuilder.setUuid(new Uuid(uuid));
90 l2gatewayBuilder.setTenantId(new Uuid(ExpectedObjects.ELAN1));
92 final List<Devices> devices = new ArrayList<>();
93 final DevicesBuilder deviceBuilder = new DevicesBuilder();
94 final List<Interfaces> interfaces = new ArrayList<>();
95 for (String intfName : intfNames) {
96 final InterfacesBuilder interfacesBuilder = new InterfacesBuilder();
97 interfacesBuilder.setInterfaceName(intfName);
98 interfacesBuilder.setSegmentationIds(new ArrayList<>());
99 interfaces.add(interfacesBuilder.build());
101 deviceBuilder.setDeviceName(deviceName);
102 deviceBuilder.setUuid(new Uuid(uuid));
103 deviceBuilder.setInterfaces(interfaces);
105 devices.add(deviceBuilder.build());
106 l2gatewayBuilder.setDevices(devices);
107 return l2gatewayBuilder.build();
110 public InstanceIdentifier<L2gateway> buildL2gwIid(String l2gwName) {
111 String l2gwNameUuid = UUID.nameUUIDFromBytes(l2gwName.getBytes()).toString();
112 return InstanceIdentifier.create(Neutron.class).child(L2gateways.class)
113 .child(L2gateway.class, new L2gatewayKey(toUuid(l2gwNameUuid)));
116 public InstanceIdentifier<L2gatewayConnection> buildConnectionIid(String connectionName) {
117 String l2gwConnectionNameUuid = UUID.nameUUIDFromBytes(connectionName.getBytes()).toString();
118 return InstanceIdentifier.create(Neutron.class).child(L2gatewayConnections.class)
119 .child(L2gatewayConnection.class, new L2gatewayConnectionKey(toUuid(l2gwConnectionNameUuid)));
122 public Uuid toUuid(String name) {
123 return new Uuid(UUID.fromString(name).toString());
126 static InstanceIdentifier<Node> createInstanceIdentifier(String nodeIdString) {
127 org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId nodeId
128 = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021
129 .NodeId(new Uri(nodeIdString));
130 org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology
131 .topology.NodeKey nodeKey = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network
132 .topology.rev131021.network.topology.topology.NodeKey(nodeId);
133 TopologyKey topoKey = new TopologyKey(new TopologyId(new Uri("hwvtep:1")));
134 return InstanceIdentifier.builder(NetworkTopology.class)
135 .child(Topology.class, topoKey)
136 .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology
137 .rev131021.network.topology.topology.Node.class, nodeKey)
141 public void buildTorNode(String torNodeId, String deviceName, String tepIp)
144 InstanceIdentifier<Node> nodePath =
145 createInstanceIdentifier(torNodeId);
146 InstanceIdentifier<Node> psNodePath =
147 createInstanceIdentifier(torNodeId + "/physicalswitch/" + deviceName);
150 NodeBuilder nodeBuilder = new NodeBuilder();
151 nodeBuilder.setNodeId(psNodePath.firstKeyOf(Node.class).getNodeId());
152 PhysicalSwitchAugmentationBuilder physicalSwitchAugmentationBuilder = new PhysicalSwitchAugmentationBuilder();
153 physicalSwitchAugmentationBuilder.setManagedBy(new HwvtepGlobalRef(nodePath));
154 physicalSwitchAugmentationBuilder.setPhysicalSwitchUuid(new Uuid(UUID.nameUUIDFromBytes(deviceName.getBytes())
156 physicalSwitchAugmentationBuilder.setHwvtepNodeName(new HwvtepNodeName(deviceName));
157 physicalSwitchAugmentationBuilder.setHwvtepNodeDescription("torNode");
158 List<TunnelIps> tunnelIps = new ArrayList<>();
159 IpAddress ip = IpAddressBuilder.getDefaultInstance(tepIp);
160 tunnelIps.add(new TunnelIpsBuilder().withKey(new TunnelIpsKey(ip)).setTunnelIpsKey(ip).build());
161 physicalSwitchAugmentationBuilder.setTunnelIps(tunnelIps);
162 nodeBuilder.addAugmentation(PhysicalSwitchAugmentation.class, physicalSwitchAugmentationBuilder.build());
163 singleTransactionDataBroker.syncWrite(LogicalDatastoreType.OPERATIONAL, psNodePath, nodeBuilder.build());
165 nodeBuilder = new NodeBuilder();
166 nodeBuilder.setNodeId(nodePath.firstKeyOf(Node.class).getNodeId());
167 HwvtepGlobalAugmentationBuilder builder = new HwvtepGlobalAugmentationBuilder();
168 builder.setDbVersion("1.6.0");
169 builder.setManagers(TestBuilders.buildManagers1());
170 GlobalAugmentationHelper.addSwitches(builder, psNodePath);
171 nodeBuilder.addAugmentation(HwvtepGlobalAugmentation.class, builder.build());
172 singleTransactionDataBroker.syncWrite(LogicalDatastoreType.OPERATIONAL, nodePath, nodeBuilder.build());
175 public LocalUcastMacs createLocalUcastMac(InstanceIdentifier<Node> nodeId, String mac, String ipAddr,
176 String tepIp) throws TransactionCommitFailedException {
178 NodeBuilder nodeBuilder = new NodeBuilder();
179 nodeBuilder.setNodeId(nodeId.firstKeyOf(Node.class).getNodeId());
180 final List<LocalUcastMacs> localUcastMacses = new ArrayList<>();
181 LocalUcastMacsBuilder localUcastMacsBuilder = new LocalUcastMacsBuilder();
182 localUcastMacsBuilder.setIpaddr(IpAddressBuilder.getDefaultInstance(ipAddr));
183 localUcastMacsBuilder.setMacEntryKey(new MacAddress(mac));
184 localUcastMacsBuilder.setMacEntryUuid(getUUid(mac));
185 localUcastMacsBuilder.setLocatorRef(TestBuilders.buildLocatorRef(nodeId, tepIp));
186 localUcastMacsBuilder.setLogicalSwitchRef(TestBuilders.buildLogicalSwitchesRef(nodeId, ExpectedObjects.ELAN1));
187 LocalUcastMacs localUcastMacs = localUcastMacsBuilder.build();
188 localUcastMacses.add(localUcastMacs);
189 HwvtepGlobalAugmentationBuilder builder1 =
190 new HwvtepGlobalAugmentationBuilder().setLocalUcastMacs(localUcastMacses) ;
191 nodeBuilder.addAugmentation(HwvtepGlobalAugmentation.class, builder1.build());
192 singleTransactionDataBroker.syncUpdate(LogicalDatastoreType.OPERATIONAL, nodeId, nodeBuilder.build());
193 return localUcastMacs;
196 public InstanceIdentifier<LocalUcastMacs> buildMacIid(InstanceIdentifier<Node> nodeIid, LocalUcastMacs mac) {
197 return nodeIid.augmentation(HwvtepGlobalAugmentation.class).child(LocalUcastMacs.class, mac.key());
200 public void deletel2GWConnection(String connectionName) throws TransactionCommitFailedException {
201 singleTransactionDataBroker.syncDelete(LogicalDatastoreType.CONFIGURATION, buildConnectionIid(connectionName));