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;
20 import java.util.concurrent.ExecutionException;
22 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
23 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
24 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
25 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
26 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
27 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
28 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
29 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes.VlanMode;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsKey;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
59 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
60 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
61 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
62 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
63 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
64 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
65 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
66 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
67 import org.opendaylight.yangtools.yang.binding.DataObject;
68 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
69 import org.slf4j.Logger;
70 import org.slf4j.LoggerFactory;
72 import com.google.common.base.Optional;
73 import com.google.common.collect.ImmutableBiMap;
74 import com.google.common.collect.Lists;
75 import com.google.common.util.concurrent.CheckedFuture;
77 public class UnimgrUtils {
79 private static final Logger LOG = LoggerFactory.getLogger(UnimgrUtils.class);
81 public static final Optional<Node> readNode(DataBroker dataBroker,
82 InstanceIdentifier<?> genericNode) {
83 ReadTransaction read = dataBroker.newReadOnlyTransaction();
84 InstanceIdentifier<Node> nodeIid = genericNode.firstIdentifierOf(Node.class);
85 CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture = read
86 .read(LogicalDatastoreType.OPERATIONAL, nodeIid);
87 Optional<Node> nodeOptional;
89 nodeOptional = nodeFuture.get();
91 } catch (InterruptedException e) {
92 return Optional.absent();
93 } catch (ExecutionException e) {
94 return Optional.absent();
98 public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> D read(
99 DataBroker dataBroker,
100 final LogicalDatastoreType store,
101 final InstanceIdentifier<D> path) {
103 final ReadOnlyTransaction transaction = dataBroker.newReadOnlyTransaction();
104 Optional<D> optionalDataObject;
105 CheckedFuture<Optional<D>, ReadFailedException> future = transaction.read(store, path);
107 optionalDataObject = future.checkedGet();
108 if (optionalDataObject.isPresent()) {
109 result = optionalDataObject.get();
111 LOG.debug("{}: Failed to read {}",
112 Thread.currentThread().getStackTrace()[1], path);
114 } catch (ReadFailedException e) {
115 LOG.warn("Failed to read {} ", path, e);
121 public static OvsdbBridgeAugmentation createOvsdbBridgeAugmentation(Uni uni) throws Exception {
122 OvsdbNodeRef ovsdbNodeRef = uni.getOvsdbNodeRef();
123 if (ovsdbNodeRef != null && ovsdbNodeRef.getValue() != null) {
124 UUID bridgeUuid = UUID.randomUUID();
125 OvsdbBridgeAugmentation ovsdbBridge = new OvsdbBridgeAugmentationBuilder()
126 .setBridgeName(new OvsdbBridgeName(UnimgrConstants.DEFAULT_BRIDGE_NAME))
127 .setManagedBy(ovsdbNodeRef)
128 .setBridgeUuid(new Uuid(bridgeUuid.toString()))
132 throw new Exception("Ovsdb Node Reference does not exist !");
136 public static OvsdbNodeAugmentation createOvsdbNodeAugmentation(Uni uni) {
137 ConnectionInfo connectionInfos = new ConnectionInfoBuilder()
138 .setRemoteIp(uni.getIpAddress())
139 .setRemotePort(new PortNumber(UnimgrConstants.OVSDB_PORT))
141 OvsdbNodeAugmentation ovsdbNode = new OvsdbNodeAugmentationBuilder()
142 .setConnectionInfo(connectionInfos).build();
146 public static OvsdbTerminationPointAugmentation createOvsdbTerminationPointAugmentation(Uni uni) {
147 // we will use nodeId to set interface port id
148 VlanId vlanID = new VlanId(1);
149 OvsdbTerminationPointAugmentation terminationPoint = new OvsdbTerminationPointAugmentationBuilder()
150 .setName(UnimgrConstants.DEFAULT_INTERNAL_IFACE)
152 .setVlanMode(VlanMode.Access)
154 return terminationPoint;
157 public static IpAddress getLocalIp() {
160 ip = InetAddress.getLocalHost().getHostAddress();
161 Ipv4Address ipv4 = new Ipv4Address(ip);
162 IpAddress ipAddress = new IpAddress(ipv4);
164 } catch (UnknownHostException e) {
165 LOG.info("Unable to retrieve controller's ip address, using loopback.");
167 return new IpAddress(UnimgrConstants.LOCAL_IP);
170 public static ConnectionInfo getConnectionInfo(DataBroker dataBroker, NodeId ovsdbNodeId) {
171 InstanceIdentifier<Node> nodeIid = UnimgrMapper.getOvsdbNodeIID(ovsdbNodeId);
172 Optional<Node> node = readNode(dataBroker, nodeIid);
173 if (node.isPresent()) {
174 Node ovsdbNode = node.get();
175 OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
176 ConnectionInfo connectionInfo = ovsdbNodeAugmentation.getConnectionInfo();
177 return connectionInfo;
183 public static List<ControllerEntry> createControllerEntries(String targetString) {
184 List<ControllerEntry> controllerEntries = new ArrayList<ControllerEntry>();
185 ControllerEntryBuilder controllerEntryBuilder = new ControllerEntryBuilder();
186 controllerEntryBuilder.setTarget(new Uri(targetString));
187 controllerEntries.add(controllerEntryBuilder.build());
188 return controllerEntries;
191 public static List<ProtocolEntry> createMdsalProtocols() {
192 List<ProtocolEntry> protocolList = new ArrayList<ProtocolEntry>();
193 ImmutableBiMap<String, Class<? extends OvsdbBridgeProtocolBase>> mapper =
194 SouthboundConstants.OVSDB_PROTOCOL_MAP.inverse();
195 protocolList.add(new ProtocolEntryBuilder().
196 setProtocol((Class<? extends OvsdbBridgeProtocolBase>) mapper.get("OpenFlow13")).build());
200 public static void createOvsdbNode(DataBroker dataBroker, NodeId ovsdbNodeId, Uni uni) {
201 InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper
202 .getOvsdbNodeIID(uni.getIpAddress());
204 NodeKey ovsdbNodeKey = new NodeKey(ovsdbNodeId);
205 Node nodeData = new NodeBuilder().setNodeId(ovsdbNodeId)
206 .setKey(ovsdbNodeKey)
207 .addAugmentation(OvsdbNodeAugmentation.class, UnimgrUtils.createOvsdbNodeAugmentation(uni))
209 // Submit the node to the datastore
210 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
211 transaction.put(LogicalDatastoreType.CONFIGURATION, ovsdbNodeIid,
213 transaction.submit();
214 LOG.info("Created and submitted a new OVSDB node {}",
215 nodeData.getNodeId());
216 } catch (Exception e) {
217 LOG.error("Exception while creating OvsdbNodeAugmentation, "
218 + "Uni is null. Node Id: {}", ovsdbNodeId);
222 public static Node createOvsdbNode(DataBroker dataBroker, UniAugmentation uni) {
223 List<Node> ovsdbNodes = getOvsdbNodes(dataBroker);
224 if (!ovsdbNodes.isEmpty()) {
225 for (Node ovsdbNode: ovsdbNodes) {
226 OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode
227 .getAugmentation(OvsdbNodeAugmentation.class);
228 if (ovsdbNodeAugmentation.getConnectionInfo()
229 .getRemoteIp().getIpv4Address()
230 .equals(uni.getIpAddress().getIpv4Address())) {
231 LOG.info("Found ovsdb node");
239 public static Node findOvsdbNode(DataBroker dataBroker, UniAugmentation uni) {
240 List<Node> ovsdbNodes = getOvsdbNodes(dataBroker);
241 if (!ovsdbNodes.isEmpty()) {
242 for (Node ovsdbNode: ovsdbNodes) {
243 OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode
244 .getAugmentation(OvsdbNodeAugmentation.class);
245 if (ovsdbNodeAugmentation.getConnectionInfo()
246 .getRemoteIp().getIpv4Address()
247 .equals(uni.getIpAddress().getIpv4Address())) {
248 LOG.info("Found ovsdb node");
256 public static void updateUniNode(LogicalDatastoreType dataStore,
257 InstanceIdentifier<?> uniKey,
260 DataBroker dataBroker) {
261 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
262 UniAugmentationBuilder updatedUniBuilder = new UniAugmentationBuilder(uni);
263 Optional<Node> optionalNode = UnimgrUtils.readNode(dataBroker, uniKey);
264 if (optionalNode.isPresent()) {
265 Node node = optionalNode.get();
266 NodeBuilder nodeBuilder = new NodeBuilder();
267 nodeBuilder.setKey(node.getKey());
268 nodeBuilder.setNodeId(node.getNodeId());
269 nodeBuilder.addAugmentation(UniAugmentation.class, updatedUniBuilder.build());
270 transaction.put(dataStore, uniKey.firstIdentifierOf(Node.class), nodeBuilder.build());
275 public static void createBridgeNode(DataBroker dataBroker, NodeId ovsdbNodeId, Uni uni, String bridgeName) {
276 LOG.info("Creating a bridge on node {}", ovsdbNodeId);
277 InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper
278 .getOvsdbNodeIID(uni.getIpAddress());
279 ConnectionInfo connectionInfo = UnimgrUtils.getConnectionInfo(dataBroker, ovsdbNodeId);
280 if (connectionInfo != null) {
281 NodeBuilder bridgeNodeBuilder = new NodeBuilder();
282 InstanceIdentifier<Node> bridgeIid = UnimgrMapper
283 .getOvsdbBridgeNodeIID(ovsdbNodeId, bridgeName);
284 NodeId bridgeNodeId = new NodeId(ovsdbNodeId
285 + UnimgrConstants.DEFAULT_BRIDGE_NODE_ID_SUFFIX + bridgeName);
286 bridgeNodeBuilder.setNodeId(bridgeNodeId);
287 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
288 ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(
290 ovsdbBridgeAugmentationBuilder.setProtocolEntry(UnimgrUtils
291 .createMdsalProtocols());
292 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
293 ovsdbBridgeAugmentationBuilder.setManagedBy(ovsdbNodeRef);
294 bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class,
295 ovsdbBridgeAugmentationBuilder.build());
296 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
297 transaction.put(LogicalDatastoreType.CONFIGURATION, bridgeIid,
298 bridgeNodeBuilder.build());
299 transaction.submit();
301 LOG.error("The OVSDB node is not connected {}", ovsdbNodeId);
305 public static NodeId createOvsdbNodeId(IpAddress ipAddress) {
306 String nodeId = UnimgrConstants.OVSDB_PREFIX
307 + ipAddress.getIpv4Address().getValue().toString()
309 + UnimgrConstants.OVSDB_PORT;
310 return new NodeId(nodeId);
313 public static List<Node> getOvsdbNodes(DataBroker dataBroker) {
314 List<Node> ovsdbNodes = new ArrayList<>();
315 InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.createTopologyIid();
316 Topology topology = UnimgrUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
317 if (topology != null && topology.getNode() != null) {
318 for (Node node : topology.getNode()) {
319 OvsdbNodeAugmentation ovsdbNodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
320 if (ovsdbNodeAugmentation != null) {
321 ovsdbNodes.add(node);
328 public static List<Node> getUniNodes(DataBroker dataBroker) {
329 List<Node> uniNodes = new ArrayList<>();
330 InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.createTopologyIid();
331 Topology topology = UnimgrUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
332 if (topology != null && topology.getNode() != null) {
333 for (Node node : topology.getNode()) {
334 UniAugmentation uniAugmentation = node.getAugmentation(UniAugmentation.class);
335 if (uniAugmentation != null) {
343 public static List<Link> getEvcLinks(DataBroker dataBroker, IpAddress ipAddress) {
344 List<Link> evcLinks = new ArrayList<>();
345 InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.createTopologyIid();
346 Topology topology = UnimgrUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
347 if (topology != null && topology.getNode() != null) {
348 for (Link link : topology.getLink()) {
349 EvcAugmentation evcAugmentation = link.getAugmentation(EvcAugmentation.class);
350 if (evcAugmentation != null) {
358 public static void createBridgeNode(DataBroker dataBroker, Node ovsdbNode, UniAugmentation uni, String bridgeName) {
359 LOG.info("Creating a bridge on node {}", ovsdbNode.getNodeId());
360 InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper
361 .getOvsdbNodeIID(uni.getIpAddress());
362 ConnectionInfo connectionInfo = UnimgrUtils.getConnectionInfo(dataBroker, ovsdbNode.getNodeId());
363 if (connectionInfo != null) {
364 NodeBuilder bridgeNodeBuilder = new NodeBuilder();
365 InstanceIdentifier<Node> bridgeIid = UnimgrMapper
366 .getOvsdbBridgeNodeIID(ovsdbNode.getNodeId(), bridgeName);
367 NodeId bridgeNodeId = new NodeId(ovsdbNode.getNodeId()
368 + UnimgrConstants.DEFAULT_BRIDGE_NODE_ID_SUFFIX + bridgeName);
369 bridgeNodeBuilder.setNodeId(bridgeNodeId);
370 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
371 ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(
373 ovsdbBridgeAugmentationBuilder.setProtocolEntry(UnimgrUtils
374 .createMdsalProtocols());
375 OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
376 ovsdbBridgeAugmentationBuilder.setManagedBy(ovsdbNodeRef);
377 bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class,
378 ovsdbBridgeAugmentationBuilder.build());
379 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
380 transaction.put(LogicalDatastoreType.CONFIGURATION, bridgeIid,
381 bridgeNodeBuilder.build());
382 transaction.submit();
384 LOG.error("The OVSDB node is not connected {}", ovsdbNode.getNodeId());
388 public static void createTerminationPointNode(DataBroker dataBroker, Uni uni,
389 Node bridgeNode, String bridgeName, String portName, String type) {
390 InstanceIdentifier<TerminationPoint> tpIid = UnimgrMapper
391 .createTerminationPointInstanceIdentifier(bridgeNode, portName);
392 OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder =
393 new OvsdbTerminationPointAugmentationBuilder();
394 tpAugmentationBuilder.setName(portName);
396 tpAugmentationBuilder.setInterfaceType(SouthboundConstants.OVSDB_INTERFACE_TYPE_MAP.get(type));
398 TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
399 tpBuilder.setKey(InstanceIdentifier.keyOf(tpIid));
400 tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
401 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
402 transaction.put(LogicalDatastoreType.CONFIGURATION,tpIid,tpBuilder.build());
403 transaction.submit();
406 public static void createGreTunnel(DataBroker dataBroker, Uni source, Uni destination,
407 Node bridgeNode, String bridgeName, String portName) {
408 InstanceIdentifier<TerminationPoint> tpIid = UnimgrMapper
409 .createTerminationPointInstanceIdentifier(bridgeNode, portName);
410 OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder =
411 new OvsdbTerminationPointAugmentationBuilder();
412 tpAugmentationBuilder.setName(portName);
413 ArrayList<Options> options = Lists.newArrayList();
414 OptionsKey optionKey = new OptionsKey("remote_ip");
415 Options destinationIp = new OptionsBuilder()
416 .setOption(destination.getIpAddress().getIpv4Address().getValue())
418 .setValue(destination.getIpAddress().getIpv4Address().getValue())
420 options.add(destinationIp);
421 tpAugmentationBuilder.setOptions(options);
422 tpAugmentationBuilder.setInterfaceType(SouthboundConstants.OVSDB_INTERFACE_TYPE_MAP.get("gre"));
423 TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
424 tpBuilder.setKey(InstanceIdentifier.keyOf(tpIid));
425 tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
426 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
427 transaction.put(LogicalDatastoreType.CONFIGURATION,tpIid,tpBuilder.build());
428 transaction.submit();
431 public static <T extends DataObject> Set<InstanceIdentifier<T>> extractRemoved(
432 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
433 Set<InstanceIdentifier<T>> result = new HashSet<InstanceIdentifier<T>>();
434 if (changes != null && changes.getRemovedPaths() != null) {
435 for (InstanceIdentifier<?> iid : changes.getRemovedPaths()) {
436 if (iid.getTargetType().equals(klazz)) {
437 @SuppressWarnings("unchecked") // Actually checked above
438 InstanceIdentifier<T> iidn = (InstanceIdentifier<T>)iid;
446 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractOriginal(
447 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
448 return extract(changes.getOriginalData(),klazz);
451 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extract(
452 Map<InstanceIdentifier<?>, DataObject> changes, Class<T> klazz) {
453 Map<InstanceIdentifier<T>,T> result = new HashMap<InstanceIdentifier<T>,T>();
454 if (changes != null && changes.entrySet() != null) {
455 for (Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
456 if (klazz.isInstance(created.getValue())) {
457 @SuppressWarnings("unchecked")
458 T value = (T) created.getValue();
459 Class<?> type = created.getKey().getTargetType();
460 if (type.equals(klazz)) {
461 @SuppressWarnings("unchecked") // Actually checked above
462 InstanceIdentifier<T> iid = (InstanceIdentifier<T>) created.getKey();
463 result.put(iid, value);