2 * Copyright (c) 2016 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
9 package org.opendaylight.unimgr.command;
11 import java.util.List;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.unimgr.api.AbstractCommand;
17 import org.opendaylight.unimgr.impl.UnimgrConstants;
18 import org.opendaylight.unimgr.impl.UnimgrMapper;
19 import org.opendaylight.unimgr.utils.MdsalUtils;
20 import org.opendaylight.unimgr.utils.OvsdbUtils;
21 import org.opendaylight.unimgr.utils.UniUtils;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
25 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
29 import com.google.common.base.Optional;
31 public class OvsNodeAddCommand extends AbstractCommand<Node> {
33 private static final Logger LOG = LoggerFactory.getLogger(OvsNodeAddCommand.class);
35 public OvsNodeAddCommand(final DataBroker dataBroker, final DataTreeModification<Node> newOvsNode) {
36 super(dataBroker, newOvsNode);
40 public void execute() {
41 final Node ovsNode = dataObject.getRootNode().getDataAfter();
42 final OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsNode.getAugmentation(OvsdbNodeAugmentation.class);
43 final InstanceIdentifier<Node> ovsdbIid = dataObject.getRootPath().getRootIdentifier();
44 if (ovsdbNodeAugmentation != null) {
45 LOG.info("Received an OVSDB node create {}",
46 ovsdbNodeAugmentation.getConnectionInfo()
50 final List<Node> uniNodes = UniUtils.getUniNodes(dataBroker);
51 if (uniNodes != null && !uniNodes.isEmpty()) {
52 for (final Node uniNode: uniNodes) {
53 final UniAugmentation uniAugmentation = uniNode.getAugmentation(UniAugmentation.class);
54 if (uniAugmentation.getOvsdbNodeRef() != null
55 && uniAugmentation.getOvsdbNodeRef().getValue() != null) {
56 final InstanceIdentifier<Node> ovsdbNodeRefIid = uniAugmentation
59 .firstIdentifierOf(Node.class);
60 if (ovsdbNodeRefIid.equals(ovsdbIid)) {
61 final Optional<Node> optionalOvsdbNode = MdsalUtils.readNode(dataBroker,
62 LogicalDatastoreType.OPERATIONAL,
64 if (optionalOvsdbNode.isPresent()) {
65 final InstanceIdentifier<Node> uniIid =
66 UnimgrMapper.getUniIid(dataBroker,
67 uniAugmentation.getIpAddress(),
68 LogicalDatastoreType.CONFIGURATION);
69 // Update QoS entries to ovsdb if speed is configured to UNI node
70 if (uniAugmentation.getSpeed() != null) {
71 OvsdbUtils.createQoSForOvsdbNode(dataBroker, uniAugmentation);
73 OvsdbUtils.createBridgeNode(dataBroker,
76 UnimgrConstants.DEFAULT_BRIDGE_NAME);
77 UniUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL,
84 } else if (ovsdbNodeAugmentation
87 .equals(uniAugmentation.getIpAddress())) {
88 final InstanceIdentifier<Node> uniIid = UnimgrMapper.getUniIid(dataBroker,
89 uniAugmentation.getIpAddress(),
90 LogicalDatastoreType.CONFIGURATION);
91 OvsdbUtils.createBridgeNode(dataBroker,
94 UnimgrConstants.DEFAULT_BRIDGE_NAME);
95 UniUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL,
103 LOG.info("Received a new OVSDB node connection from {}"
104 + ovsdbNodeAugmentation.getConnectionInfo()
105 .getRemoteIp().getIpv4Address());