2 * Copyright (c) 2015 CableLabs 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.unimgr.impl;
10 import java.net.InetAddress;
11 import java.net.UnknownHostException;
12 import java.util.ArrayList;
13 import java.util.HashMap;
14 import java.util.HashSet;
15 import java.util.List;
17 import java.util.Map.Entry;
19 import java.util.UUID;
21 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
22 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
23 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
24 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
25 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
26 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
27 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
28 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes.VlanMode;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsKey;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
58 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
59 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
60 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
61 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
62 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
63 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
64 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
65 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
66 import org.opendaylight.yangtools.yang.binding.DataObject;
67 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
68 import org.slf4j.Logger;
69 import org.slf4j.LoggerFactory;
71 import com.google.common.base.Optional;
72 import com.google.common.collect.ImmutableBiMap;
73 import com.google.common.collect.Lists;
74 import com.google.common.util.concurrent.CheckedFuture;
76 public class UnimgrUtils {
78 private static final Logger LOG = LoggerFactory.getLogger(UnimgrUtils.class);
81 public static void createBridgeNode(DataBroker dataBroker,
85 LOG.info("Creating a bridge on node {}", ovsdbNodeId);
86 InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper
87 .getOvsdbNodeIid(uni.getIpAddress());
88 ConnectionInfo connectionInfo = UnimgrUtils.getConnectionInfo(dataBroker, ovsdbNodeId);
89 if (connectionInfo != null) {
90 NodeBuilder bridgeNodeBuilder = new NodeBuilder();
91 InstanceIdentifier<Node> bridgeIid = UnimgrMapper
92 .getOvsdbBridgeNodeIid(ovsdbNodeId, bridgeName);
93 NodeId bridgeNodeId = new NodeId(ovsdbNodeId
94 + UnimgrConstants.DEFAULT_BRIDGE_NODE_ID_SUFFIX
96 bridgeNodeBuilder.setNodeId(bridgeNodeId);
97 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
98 ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridgeName));
99 ovsdbBridgeAugmentationBuilder.setProtocolEntry(UnimgrUtils
100 .createMdsalProtocols());
101 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
102 ovsdbBridgeAugmentationBuilder.setManagedBy(ovsdbNodeRef);
103 bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class,
104 ovsdbBridgeAugmentationBuilder.build());
105 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
106 transaction.put(LogicalDatastoreType.CONFIGURATION,
108 bridgeNodeBuilder.build());
109 transaction.submit();
111 LOG.error("The OVSDB node is not connected {}", ovsdbNodeId);
115 public static void createBridgeNode(DataBroker dataBroker,
119 LOG.info("Creating a bridge on node {}", ovsdbNode.getNodeId());
120 @SuppressWarnings("unchecked")
121 InstanceIdentifier<Node> ovsdbNodeIid = (InstanceIdentifier<Node>) uni.getOvsdbNodeRef().getValue();
122 if (ovsdbNodeIid != null) {
123 NodeBuilder bridgeNodeBuilder = new NodeBuilder();
124 InstanceIdentifier<Node> bridgeIid = UnimgrMapper.getOvsdbBridgeNodeIid(ovsdbNode.getNodeId(),
126 NodeId bridgeNodeId = new NodeId(ovsdbNode.getNodeId()
127 + UnimgrConstants.DEFAULT_BRIDGE_NODE_ID_SUFFIX
129 bridgeNodeBuilder.setNodeId(bridgeNodeId);
130 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
131 ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridgeName));
132 ovsdbBridgeAugmentationBuilder.setProtocolEntry(UnimgrUtils.createMdsalProtocols());
133 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
134 ovsdbBridgeAugmentationBuilder.setManagedBy(ovsdbNodeRef);
135 bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbBridgeAugmentationBuilder.build());
136 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
137 transaction.put(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build());
138 transaction.submit();
140 LOG.info("OvsdbNodeRef is null");
144 public static void createBridgeNode(DataBroker dataBroker,
145 InstanceIdentifier<Node> ovsdbNodeIid,
148 LOG.info("Creating a bridge on node {}", ovsdbNodeIid);
149 if (ovsdbNodeIid != null) {
150 NodeBuilder bridgeNodeBuilder = new NodeBuilder();
151 Optional<Node> optionalOvsdbNode = UnimgrUtils.readNode(dataBroker,
152 LogicalDatastoreType.OPERATIONAL,
154 if (optionalOvsdbNode.isPresent()) {
155 Node ovsdbNode = optionalOvsdbNode.get();
156 InstanceIdentifier<Node> bridgeIid = UnimgrMapper.getOvsdbBridgeNodeIid(ovsdbNode.getNodeId(),
158 NodeId bridgeNodeId = new NodeId(ovsdbNode.getNodeId().getValue()
159 + UnimgrConstants.DEFAULT_BRIDGE_NODE_ID_SUFFIX
161 bridgeNodeBuilder.setNodeId(bridgeNodeId);
162 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
163 ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridgeName));
164 ovsdbBridgeAugmentationBuilder.setProtocolEntry(UnimgrUtils.createMdsalProtocols());
165 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
166 ovsdbBridgeAugmentationBuilder.setManagedBy(ovsdbNodeRef);
167 bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class,
168 ovsdbBridgeAugmentationBuilder.build());
169 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
170 transaction.put(LogicalDatastoreType.CONFIGURATION,
172 bridgeNodeBuilder.build());
173 transaction.submit();
176 LOG.info("OvsdbNodeRef is null");
180 public static List<ControllerEntry> createControllerEntries(String targetString) {
181 List<ControllerEntry> controllerEntries = new ArrayList<ControllerEntry>();
182 ControllerEntryBuilder controllerEntryBuilder = new ControllerEntryBuilder();
183 controllerEntryBuilder.setTarget(new Uri(targetString));
184 controllerEntries.add(controllerEntryBuilder.build());
185 return controllerEntries;
188 public static void createGreTunnel(DataBroker dataBroker,
194 InstanceIdentifier<TerminationPoint> tpIid =
195 UnimgrMapper.getTerminationPointIid(bridgeNode,
197 OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder =
198 new OvsdbTerminationPointAugmentationBuilder();
199 tpAugmentationBuilder.setName(portName);
200 ArrayList<Options> options = Lists.newArrayList();
201 OptionsKey optionKey = new OptionsKey("remote_ip");
202 Options destinationIp = new OptionsBuilder()
203 .setOption(destination.getIpAddress().getIpv4Address().getValue())
204 .setKey(optionKey).setValue(destination.getIpAddress().getIpv4Address().getValue())
206 options.add(destinationIp);
207 tpAugmentationBuilder.setOptions(options);
208 tpAugmentationBuilder.setInterfaceType(SouthboundConstants.OVSDB_INTERFACE_TYPE_MAP.get("gre"));
209 TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
210 tpBuilder.setKey(InstanceIdentifier.keyOf(tpIid));
211 tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
212 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
213 transaction.put(LogicalDatastoreType.CONFIGURATION,
216 transaction.submit();
219 public static List<ProtocolEntry> createMdsalProtocols() {
220 List<ProtocolEntry> protocolList = new ArrayList<ProtocolEntry>();
221 ImmutableBiMap<String, Class<? extends OvsdbBridgeProtocolBase>> mapper =
222 SouthboundConstants.OVSDB_PROTOCOL_MAP.inverse();
223 protocolList.add(new ProtocolEntryBuilder().
224 setProtocol((Class<? extends OvsdbBridgeProtocolBase>) mapper.get("OpenFlow13")).build());
228 public static OvsdbBridgeAugmentation createOvsdbBridgeAugmentation(Uni uni) throws Exception {
229 OvsdbNodeRef ovsdbNodeRef = uni.getOvsdbNodeRef();
230 if (ovsdbNodeRef != null && ovsdbNodeRef.getValue() != null) {
231 UUID bridgeUuid = UUID.randomUUID();
232 OvsdbBridgeAugmentation ovsdbBridge = new OvsdbBridgeAugmentationBuilder()
234 new OvsdbBridgeName(UnimgrConstants.DEFAULT_BRIDGE_NAME))
235 .setManagedBy(ovsdbNodeRef)
237 new Uuid(bridgeUuid.toString()))
241 throw new Exception("Ovsdb Node Reference does not exist !");
245 public static void createOvsdbNode(DataBroker dataBroker,
248 InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper.getOvsdbNodeIid(uni.getIpAddress());
250 NodeKey ovsdbNodeKey = new NodeKey(ovsdbNodeId);
251 Node nodeData = new NodeBuilder()
252 .setNodeId(ovsdbNodeId)
253 .setKey(ovsdbNodeKey)
254 .addAugmentation(OvsdbNodeAugmentation.class,
255 UnimgrUtils.createOvsdbNodeAugmentation(uni))
257 // Submit the node to the datastore
258 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
259 transaction.put(LogicalDatastoreType.CONFIGURATION, ovsdbNodeIid, nodeData);
260 transaction.submit();
261 LOG.info("Created and submitted a new OVSDB node {}", nodeData.getNodeId());
262 } catch (Exception e) {
263 LOG.error("Exception while creating OvsdbNodeAugmentation, " + "Uni is null. Node Id: {}", ovsdbNodeId);
267 public static Node createOvsdbNode(DataBroker dataBroker,
268 UniAugmentation uni) {
269 NodeId ovsdbNodeId = new NodeId(createOvsdbNodeId(uni.getIpAddress()));
271 InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper.getOvsdbNodeIid(ovsdbNodeId);
272 NodeKey ovsdbNodeKey = new NodeKey(ovsdbNodeId);
273 Node nodeData = new NodeBuilder()
274 .setNodeId(ovsdbNodeId)
275 .setKey(ovsdbNodeKey)
276 .addAugmentation(OvsdbNodeAugmentation.class,
277 UnimgrUtils.createOvsdbNodeAugmentation(uni))
279 // Submit the node to the datastore
280 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
281 transaction.put(LogicalDatastoreType.CONFIGURATION, ovsdbNodeIid, nodeData);
282 transaction.submit();
283 LOG.info("Created and submitted a new OVSDB node {}", nodeData.getNodeId());
285 } catch (Exception e) {
286 LOG.error("Exception while creating OvsdbNodeAugmentation, " + "Uni is null. Node Id: {}", ovsdbNodeId);
291 public static OvsdbNodeAugmentation createOvsdbNodeAugmentation(Uni uni) {
292 ConnectionInfo connectionInfos = new ConnectionInfoBuilder()
293 .setRemoteIp(uni.getIpAddress())
294 .setRemotePort(new PortNumber(UnimgrConstants.OVSDB_PORT))
296 OvsdbNodeAugmentation ovsdbNode = new OvsdbNodeAugmentationBuilder()
297 .setConnectionInfo(connectionInfos).build();
301 public static NodeId createOvsdbNodeId(IpAddress ipAddress) {
302 String nodeId = UnimgrConstants.OVSDB_PREFIX
303 + ipAddress.getIpv4Address().getValue().toString()
305 + UnimgrConstants.OVSDB_PORT;
306 return new NodeId(nodeId);
309 public static OvsdbTerminationPointAugmentation createOvsdbTerminationPointAugmentation(Uni uni) {
310 // we will use nodeId to set interface port id
311 VlanId vlanID = new VlanId(1);
312 OvsdbTerminationPointAugmentation terminationPoint = new OvsdbTerminationPointAugmentationBuilder()
313 .setName(UnimgrConstants.DEFAULT_INTERNAL_IFACE)
315 .setVlanMode(VlanMode.Access)
317 return terminationPoint;
320 public static void createTerminationPointNode(DataBroker dataBroker,
326 InstanceIdentifier<TerminationPoint> tpIid = UnimgrMapper
327 .getTerminationPointIid(bridgeNode,
329 OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder = new OvsdbTerminationPointAugmentationBuilder();
330 tpAugmentationBuilder.setName(portName);
332 tpAugmentationBuilder.setInterfaceType(SouthboundConstants.OVSDB_INTERFACE_TYPE_MAP.get(type));
334 TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
335 tpBuilder.setKey(InstanceIdentifier.keyOf(tpIid));
336 tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class,
337 tpAugmentationBuilder.build());
338 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
339 transaction.put(LogicalDatastoreType.CONFIGURATION,
342 transaction.submit();
345 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extract(
346 Map<InstanceIdentifier<?>, DataObject> changes, Class<T> klazz) {
347 Map<InstanceIdentifier<T>,T> result = new HashMap<InstanceIdentifier<T>,T>();
348 if (changes != null && changes.entrySet() != null) {
349 for (Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
350 if (klazz.isInstance(created.getValue())) {
351 @SuppressWarnings("unchecked")
352 T value = (T) created.getValue();
353 Class<?> type = created.getKey().getTargetType();
354 if (type.equals(klazz)) {
355 @SuppressWarnings("unchecked") // Actually checked above
356 InstanceIdentifier<T> iid = (InstanceIdentifier<T>) created.getKey();
357 result.put(iid, value);
365 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractOriginal(
366 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
367 return extract(changes.getOriginalData(),klazz);
370 public static <T extends DataObject> Set<InstanceIdentifier<T>> extractRemoved(
371 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
372 Set<InstanceIdentifier<T>> result = new HashSet<InstanceIdentifier<T>>();
373 if (changes != null && changes.getRemovedPaths() != null) {
374 for (InstanceIdentifier<?> iid : changes.getRemovedPaths()) {
375 if (iid.getTargetType().equals(klazz)) {
376 @SuppressWarnings("unchecked") // Actually checked above
377 InstanceIdentifier<T> iidn = (InstanceIdentifier<T>)iid;
385 public static Optional<Node> findOvsdbNode(DataBroker dataBroker,
386 UniAugmentation uni) {
387 List<Node> ovsdbNodes = getOvsdbNodes(dataBroker);
388 Optional<Node> optionalOvsdb;
389 if (!ovsdbNodes.isEmpty()) {
390 for (Node ovsdbNode : ovsdbNodes) {
391 OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode
392 .getAugmentation(OvsdbNodeAugmentation.class);
393 if (ovsdbNodeAugmentation.getConnectionInfo()
396 .equals(uni.getIpAddress().getIpv4Address())) {
397 LOG.info("Found ovsdb node");
398 optionalOvsdb = Optional.of(ovsdbNode);
399 return optionalOvsdb;
403 return Optional.absent();
406 public static Optional<Node> findUniNode(DataBroker dataBroker,
407 IpAddress ipAddress) {
408 List<Node> uniNodes = getUniNodes(dataBroker);
409 if (!uniNodes.isEmpty()) {
410 for (Node uniNode : uniNodes) {
411 UniAugmentation uniAugmentation = uniNode.getAugmentation(UniAugmentation.class);
412 if (uniAugmentation.getIpAddress().equals(ipAddress)) {
413 LOG.info("Found Uni node");
414 return Optional.of(uniNode);
418 return Optional.absent();
421 public static ConnectionInfo getConnectionInfo(DataBroker dataBroker,
422 NodeId ovsdbNodeId) {
423 InstanceIdentifier<Node> nodeIid = UnimgrMapper.getOvsdbNodeIid(ovsdbNodeId);
424 Optional<Node> node = readNode(dataBroker,
425 LogicalDatastoreType.OPERATIONAL,
427 if (node.isPresent()) {
428 Node ovsdbNode = node.get();
429 OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode
430 .getAugmentation(OvsdbNodeAugmentation.class);
431 ConnectionInfo connectionInfo = ovsdbNodeAugmentation.getConnectionInfo();
432 return connectionInfo;
438 public static List<Link> getEvcLinks(DataBroker dataBroker,
439 IpAddress ipAddress) {
440 List<Link> evcLinks = new ArrayList<>();
441 InstanceIdentifier<Topology> evcTopology = UnimgrMapper.getEvcTopologyIid();
442 Topology topology = UnimgrUtils.read(dataBroker,
443 LogicalDatastoreType.OPERATIONAL,
445 if (topology != null && topology.getLink() != null) {
446 for (Link link : topology.getLink()) {
447 EvcAugmentation evcAugmentation = link.getAugmentation(EvcAugmentation.class);
448 if (evcAugmentation != null) {
456 public static IpAddress getLocalIp() {
459 ip = InetAddress.getLocalHost().getHostAddress();
460 Ipv4Address ipv4 = new Ipv4Address(ip);
461 IpAddress ipAddress = new IpAddress(ipv4);
463 } catch (UnknownHostException e) {
464 LOG.info("Unable to retrieve controller's ip address, using loopback.");
466 return new IpAddress(UnimgrConstants.LOCAL_IP);
469 public static List<Node> getOvsdbNodes(DataBroker dataBroker) {
470 List<Node> ovsdbNodes = new ArrayList<>();
471 InstanceIdentifier<Topology> ovsdbTopoIdentifier = UnimgrMapper.getOvsdbTopologyIid();
472 Topology topology = UnimgrUtils.read(dataBroker,
473 LogicalDatastoreType.OPERATIONAL,
474 ovsdbTopoIdentifier);
475 if (topology != null && topology.getNode() != null) {
476 for (Node node : topology.getNode()) {
477 OvsdbNodeAugmentation ovsdbNodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
478 if (ovsdbNodeAugmentation != null) {
479 ovsdbNodes.add(node);
486 public static List<Node> getUniNodes(DataBroker dataBroker) {
487 List<Node> uniNodes = new ArrayList<>();
488 InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.getUniTopologyIid();
489 Topology topology = read(dataBroker,
490 LogicalDatastoreType.CONFIGURATION,
491 topologyInstanceIdentifier);
492 if (topology != null && topology.getNode() != null) {
493 for (Node node : topology.getNode()) {
494 UniAugmentation uniAugmentation = node.getAugmentation(UniAugmentation.class);
495 if (uniAugmentation != null) {
503 public static List<Node> getUniNodes(DataBroker dataBroker,
504 LogicalDatastoreType store) {
505 List<Node> uniNodes = new ArrayList<>();
506 InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.getUniTopologyIid();
507 Topology topology = read(dataBroker,
509 topologyInstanceIdentifier);
510 if (topology != null && topology.getNode() != null) {
511 for (Node node : topology.getNode()) {
512 UniAugmentation uniAugmentation = node.getAugmentation(UniAugmentation.class);
513 if (uniAugmentation != null) {
521 public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> D read(
522 DataBroker dataBroker,
523 final LogicalDatastoreType store,
524 final InstanceIdentifier<D> path) {
526 final ReadOnlyTransaction transaction = dataBroker.newReadOnlyTransaction();
527 Optional<D> optionalDataObject;
528 CheckedFuture<Optional<D>, ReadFailedException> future = transaction.read(store, path);
530 optionalDataObject = future.checkedGet();
531 if (optionalDataObject.isPresent()) {
532 result = optionalDataObject.get();
534 LOG.debug("{}: Failed to read {}",
535 Thread.currentThread().getStackTrace()[1], path);
537 } catch (ReadFailedException e) {
538 LOG.warn("Failed to read {} ", path, e);
545 public static final Optional<Node> readNode(DataBroker dataBroker,
546 InstanceIdentifier<?> genericNode) {
547 ReadTransaction read = dataBroker.newReadOnlyTransaction();
548 InstanceIdentifier<Node> nodeIid = genericNode.firstIdentifierOf(Node.class);
549 CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture =
550 read.read(LogicalDatastoreType.OPERATIONAL,
553 return nodeFuture.checkedGet();
554 } catch (ReadFailedException e) {
555 LOG.info("Unable to read node with Iid {}", nodeIid);
557 return Optional.absent();
560 public static final Optional<Node> readNode(DataBroker dataBroker,
561 LogicalDatastoreType store,
562 InstanceIdentifier<?> genericNode) {
563 ReadTransaction read = dataBroker.newReadOnlyTransaction();
564 InstanceIdentifier<Node> nodeIid = genericNode.firstIdentifierOf(Node.class);
565 CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture = read
566 .read(store, nodeIid);
568 return nodeFuture.checkedGet();
569 } catch (ReadFailedException e) {
570 LOG.info("Unable to read node with Iid {}", nodeIid);
572 return Optional.absent();
575 public static void updateUniNode(LogicalDatastoreType dataStore,
576 InstanceIdentifier<?> uniKey,
579 DataBroker dataBroker) {
580 InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper.getOvsdbNodeIid(ovsdbNode.getNodeId());
581 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
582 UniAugmentationBuilder updatedUniBuilder = new UniAugmentationBuilder(uni);
583 if (ovsdbNodeRef != null) {
584 updatedUniBuilder.setOvsdbNodeRef(ovsdbNodeRef);
586 Optional<Node> optionalNode = readNode(dataBroker,
587 LogicalDatastoreType.CONFIGURATION,
589 if (optionalNode.isPresent()) {
590 Node node = optionalNode.get();
591 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
592 NodeBuilder nodeBuilder = new NodeBuilder();
593 nodeBuilder.setKey(node.getKey());
594 nodeBuilder.setNodeId(node.getNodeId());
595 nodeBuilder.addAugmentation(UniAugmentation.class, updatedUniBuilder.build());
596 transaction.put(dataStore, uniKey.firstIdentifierOf(Node.class), nodeBuilder.build());
597 transaction.submit();
601 public static void updateUniNode(LogicalDatastoreType dataStore,
602 InstanceIdentifier<?> uniKey,
604 InstanceIdentifier<?> ovsdbNodeIid,
605 DataBroker dataBroker) {
606 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
607 UniAugmentationBuilder updatedUniBuilder = new UniAugmentationBuilder(uni);
608 if (ovsdbNodeRef != null) {
609 updatedUniBuilder.setOvsdbNodeRef(ovsdbNodeRef);
611 Optional<Node> optionalNode = readNode(dataBroker,
612 LogicalDatastoreType.CONFIGURATION,
614 if (optionalNode.isPresent()) {
615 Node node = optionalNode.get();
616 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
617 NodeBuilder nodeBuilder = new NodeBuilder();
618 nodeBuilder.setKey(node.getKey());
619 nodeBuilder.setNodeId(node.getNodeId());
620 nodeBuilder.addAugmentation(UniAugmentation.class, updatedUniBuilder.build());
621 transaction.put(dataStore, uniKey.firstIdentifierOf(Node.class), nodeBuilder.build());
622 transaction.submit();