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 (final Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
43 if (created.getValue() != null && created.getValue() instanceof UniAugmentation) {
44 final UniAugmentation uni = (UniAugmentation) created.getValue();
45 final InstanceIdentifier<?> uniKey = created.getKey();
46 LOG.trace("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 final OvsdbNodeRef ovsdbNodeRef = uni.getOvsdbNodeRef();
63 final 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 final Optional<Node> optionalOvsdbNode = UnimgrUtils.findOvsdbNode(dataBroker,
72 if (optionalOvsdbNode.isPresent()) {
73 ovsdbNode = optionalOvsdbNode.get();
74 LOG.info("Retrieved the OVSDB node {}", ovsdbNode.getNodeId());
75 // Update QoS entries to ovsdb if speed is configured to UNI node
76 if (uni.getSpeed() != null) {
77 UnimgrUtils.createQoSForOvsdbNode(dataBroker, uni);
79 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
85 ovsdbNode = UnimgrUtils.createOvsdbNode(dataBroker,
87 LOG.info("Could not retrieve the OVSDB node,"
88 + " created a new one: {}", ovsdbNode.getNodeId());
89 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
97 // We assume the ovs is in passive mode
98 // Check if the ovsdb node exist
99 final Optional<Node> optionalOvsdbNode = UnimgrUtils.findOvsdbNode(dataBroker,
102 if (optionalOvsdbNode.isPresent()) {
103 ovsdbNode = optionalOvsdbNode.get();
104 final InstanceIdentifier<Node> ovsdbIid = UnimgrMapper.getOvsdbNodeIid(ovsdbNode.getNodeId());
105 LOG.info("Retrieved the OVSDB node");
106 // Update QoS entries to ovsdb if speed is configured to UNI node
107 if (uni.getSpeed() != null) {
108 UnimgrUtils.createQoSForOvsdbNode(dataBroker, uni);
110 UnimgrUtils.createBridgeNode(dataBroker,
113 UnimgrConstants.DEFAULT_BRIDGE_NAME);
114 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
119 UnimgrUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL, uniKey, uni, ovsdbNode, dataBroker);
121 ovsdbNode = UnimgrUtils.createOvsdbNode(dataBroker,
123 if (ovsdbNode != null) {
124 LOG.info("Could not retrieve the OVSDB node,"
125 + "created a new one: {}", ovsdbNode.getNodeId());
126 UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
135 if (created.getValue() != null && created.getValue() instanceof OvsdbNodeAugmentation) {
136 final OvsdbNodeAugmentation ovsdbNodeAugmentation = (OvsdbNodeAugmentation) created
138 final InstanceIdentifier<Node> ovsdbIid = created.getKey().firstIdentifierOf(Node.class);
139 if (ovsdbNodeAugmentation != null) {
140 LOG.info("Received an OVSDB node create {}",
141 ovsdbNodeAugmentation.getConnectionInfo()
145 final List<Node> uniNodes = UnimgrUtils.getUniNodes(dataBroker);
146 if (uniNodes != null && !uniNodes.isEmpty()) {
147 for (final Node uniNode: uniNodes) {
148 final UniAugmentation uniAugmentation = uniNode.getAugmentation(UniAugmentation.class);
149 if (uniAugmentation.getOvsdbNodeRef() != null
150 && uniAugmentation.getOvsdbNodeRef().getValue() != null) {
151 final InstanceIdentifier<Node> ovsdbNodeRefIid = uniAugmentation
154 .firstIdentifierOf(Node.class);
155 if (ovsdbNodeRefIid.equals(ovsdbIid)) {
156 final Optional<Node> optionalOvsdbNode = UnimgrUtils.readNode(dataBroker,
157 LogicalDatastoreType.OPERATIONAL,
159 if (optionalOvsdbNode.isPresent()) {
160 final InstanceIdentifier<Node> uniIid =
161 UnimgrMapper.getUniIid(dataBroker,
162 uniAugmentation.getIpAddress(),
163 LogicalDatastoreType.CONFIGURATION);
164 // Update QoS entries to ovsdb if speed is configured to UNI node
165 if (uniAugmentation.getSpeed() != null) {
166 UnimgrUtils.createQoSForOvsdbNode(dataBroker, uniAugmentation);
168 UnimgrUtils.createBridgeNode(dataBroker,
171 UnimgrConstants.DEFAULT_BRIDGE_NAME);
172 UnimgrUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL,
179 } else if (ovsdbNodeAugmentation
182 .equals(uniAugmentation.getIpAddress())) {
183 final InstanceIdentifier<Node> uniIid = UnimgrMapper.getUniIid(dataBroker,
184 uniAugmentation.getIpAddress(),
185 LogicalDatastoreType.CONFIGURATION);
186 UnimgrUtils.createBridgeNode(dataBroker,
189 UnimgrConstants.DEFAULT_BRIDGE_NAME);
190 UnimgrUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL,
198 LOG.info("Received a new OVSDB node connection from {}"
199 + ovsdbNodeAugmentation.getConnectionInfo()
200 .getRemoteIp().getIpv4Address());