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.command;
10 import java.util.List;
12 import java.util.Map.Entry;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.unimgr.impl.UnimgrConstants;
17 import org.opendaylight.unimgr.impl.UnimgrMapper;
18 import org.opendaylight.unimgr.impl.UnimgrUtils;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
23 import org.opendaylight.yangtools.yang.binding.DataObject;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
28 import com.google.common.base.Optional;
30 public class UniCreateCommand extends AbstractCreateCommand {
32 private static final Logger LOG = LoggerFactory.getLogger(UniCreateCommand.class);
34 public UniCreateCommand(DataBroker dataBroker,
35 Map<InstanceIdentifier<?>, DataObject> changes) {
36 super.dataBroker = dataBroker;
37 super.changes = changes;
41 public void execute() {
42 for (Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
43 if (created.getValue() != null && created.getValue() instanceof UniAugmentation) {
44 UniAugmentation uni = (UniAugmentation) created.getValue();
45 InstanceIdentifier<?> uniKey = created.getKey();
46 LOG.info("New UNI created {}.", uni.getIpAddress().getIpv4Address());
47 /* We assume that when the user specifies the
48 * ovsdb-node-ref that the node already exists in
49 * the controller and that the OVS instance is in
52 * We assume that when the user doesn't specify the
53 * ovsdb-node-id that the node doesn't exist therefor
54 * has to be created with the IP address because it's
57 * Active mode (TCP): the UUID is in format ovsdb://UUID
58 * Passive mode (PTCP): the UUID is in format ovsdb://IP:6640
61 if (uni.getOvsdbNodeRef() != null) {
62 OvsdbNodeRef ovsdbNodeRef = uni.getOvsdbNodeRef();
63 Optional<Node> optionalNode = UnimgrUtils.readNode(dataBroker,
64 LogicalDatastoreType.OPERATIONAL,
65 ovsdbNodeRef.getValue());
66 if (!optionalNode.isPresent()) {
67 LOG.info("Invalid OVSDB node instance identifier specified, "
68 + "attempting to retrieve the node.");
69 Optional<Node> optionalOvsdbNode = UnimgrUtils.findOvsdbNode(dataBroker,
72 if (optionalOvsdbNode.isPresent()) {
73 ovsdbNode = optionalOvsdbNode.get();
74 LOG.info("Retrieved the OVSDB node {}", ovsdbNode.getNodeId());
75 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
81 ovsdbNode = UnimgrUtils.createOvsdbNode(dataBroker,
83 LOG.info("Could not retrieve the OVSDB node,"
84 + " created a new one: {}", ovsdbNode.getNodeId());
85 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
93 // We assume the ovs is in passive mode
94 // Check if the ovsdb node exist
95 Optional<Node> optionalOvsdbNode = UnimgrUtils.findOvsdbNode(dataBroker,
98 if (optionalOvsdbNode.isPresent()) {
99 ovsdbNode = optionalOvsdbNode.get();
100 LOG.info("Retrieved the OVSDB node");
101 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
107 ovsdbNode = UnimgrUtils.createOvsdbNode(dataBroker,
109 if (ovsdbNode != null) {
110 LOG.info("Could not retrieve the OVSDB node,"
111 + "created a new one: {}", ovsdbNode.getNodeId());
112 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
121 if (created.getValue() != null && created.getValue() instanceof OvsdbNodeAugmentation) {
122 OvsdbNodeAugmentation ovsdbNodeAugmentation = (OvsdbNodeAugmentation) created
124 InstanceIdentifier<Node> ovsdbIid = created.getKey().firstIdentifierOf(Node.class);
125 if (ovsdbNodeAugmentation != null) {
126 LOG.info("Received an OVSDB node create {}",
127 ovsdbNodeAugmentation.getConnectionInfo()
131 List<Node> uniNodes = UnimgrUtils.getUniNodes(dataBroker);
132 if (uniNodes != null && !uniNodes.isEmpty()) {
133 for (Node uniNode: uniNodes) {
134 UniAugmentation uniAugmentation = uniNode.getAugmentation(UniAugmentation.class);
135 if (uniAugmentation.getOvsdbNodeRef() != null
136 && uniAugmentation.getOvsdbNodeRef().getValue() != null) {
137 InstanceIdentifier<Node> ovsdbNodeRefIid = uniAugmentation
140 .firstIdentifierOf(Node.class);
141 if (ovsdbNodeRefIid.equals(ovsdbIid)) {
142 Optional<Node> optionalOvsdbNode = UnimgrUtils.readNode(dataBroker,
143 LogicalDatastoreType.OPERATIONAL,
145 if (optionalOvsdbNode.isPresent()) {
146 InstanceIdentifier<Node> uniIid =
147 UnimgrMapper.getUniIid(dataBroker,
148 uniAugmentation.getIpAddress(),
149 LogicalDatastoreType.CONFIGURATION);
150 UnimgrUtils.createBridgeNode(dataBroker,
153 UnimgrConstants.DEFAULT_BRIDGE_NAME);
154 UnimgrUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL,
161 } else if (ovsdbNodeAugmentation
164 .equals(uniAugmentation.getIpAddress())) {
165 InstanceIdentifier<Node> uniIid = UnimgrMapper.getUniIid(dataBroker,
166 uniAugmentation.getIpAddress(),
167 LogicalDatastoreType.CONFIGURATION);
168 UnimgrUtils.createBridgeNode(dataBroker,
171 UnimgrConstants.DEFAULT_BRIDGE_NAME);
172 UnimgrUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL,
180 LOG.info("Received a new OVSDB node connection from {}"
181 + ovsdbNodeAugmentation.getConnectionInfo()
182 .getRemoteIp().getIpv4Address());