throws InterruptedException, InvalidParameterException {
boolean result = false;
- LOG.info("addBridge: node: {}, bridgeName: {}, target: {}", ovsdbNode, bridgeName, target);
+ LOG.info("Add Bridge: node: {}, bridgeName: {}, target: {}", ovsdbNode, bridgeName, target);
ConnectionInfo connectionInfo = getConnectionInfo(ovsdbNode);
if (connectionInfo != null) {
NodeBuilder bridgeNodeBuilder = new NodeBuilder();
NodeId bridgeNodeId = SouthboundMapper.createManagedNodeId(bridgeIid);
bridgeNodeBuilder.setNodeId(bridgeNodeId);
OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
- //ovsdbBridgeAugmentationBuilder.setControllerEntry(setControllerEntries(target));
+ ovsdbBridgeAugmentationBuilder.setControllerEntry(createControllerEntries(target));
ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridgeName));
ovsdbBridgeAugmentationBuilder.setProtocolEntry(createMdsalProtocols());
ovsdbBridgeAugmentationBuilder.setFailMode(
setManagedByForBridge(ovsdbBridgeAugmentationBuilder, connectionInfo);
bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbBridgeAugmentationBuilder.build());
- result = merge(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build());
+ result = put(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build());
LOG.info("addBridge: result: {}", result);
- Thread.sleep(OVSDB_UPDATE_TIMEOUT);
- setControllerForBridge(ovsdbNode, bridgeName, target);
- Thread.sleep(OVSDB_UPDATE_TIMEOUT);
} else {
throw new InvalidParameterException("Could not find ConnectionInfo");
}
return result;
}
+ public static boolean deleteBridge(Node ovsdbNode) {
+ boolean result = false;
+ InstanceIdentifier<Node> bridgeIid =
+ SouthboundMapper.createInstanceIdentifier(ovsdbNode.getNodeId());
+
+ result = delete(LogicalDatastoreType.CONFIGURATION, bridgeIid);
+ LOG.info("Delete bridge node: {}, bridgeName: {} result : {}", ovsdbNode, ovsdbNode.getNodeId(),result);
+ return result;
+ }
+
public static OvsdbBridgeAugmentation readBridge(Node node, String name) {
OvsdbBridgeAugmentation ovsdbBridgeAugmentation = null;
ConnectionInfo connectionInfo = getConnectionInfo(node);
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.yang.binding.DataObject;
public class SouthboundEvent extends AbstractEvent {
public enum Type { NODE, OPENVSWITCH, BRIDGE, CONTROLLER, PORT }
private String tableName;
private String uuid;
private Object context;
+ private DataObject augmentationData;
private OvsdbBridgeAugmentation bridge;
private OvsdbTerminationPointAugmentation port;
private String portName;
this.port = port;
this.portName = portName;
}
+
public SouthboundEvent(Node node, Type type, Action action) {
super(HandlerType.SOUTHBOUND, action);
this.type = type;
this.node = node;
}
+ public SouthboundEvent(Node node, DataObject resourceAugmentationData, Type type, Action action) {
+ super(HandlerType.SOUTHBOUND, action);
+ this.type = type;
+ this.node = node;
+ this.augmentationData = resourceAugmentationData;
+ }
+
+
public Type getType() {
return type;
}
public String getPortName() {
return portName;
}
+
+ public DataObject getAugmentationData() {
+ return augmentationData;
+ }
+
@Override
public String toString() {
//if (type == Type.NODE) {
return "SouthboundEvent [type=" + type
+ ", action=" + super.getAction()
+ + ",augmentationData="+augmentationData
+ ", node=" + node + "]";
//} else {
// return "SouthboundEvent [type=" + type + "]";
result = prime * result + ((tableName == null) ? 0 : tableName.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
+ result = prime * result + ((augmentationData == null) ? 0 : augmentationData.hashCode());
return result;
}
@Override
import java.util.List;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.neutron.spi.NeutronNetwork;
import org.opendaylight.ovsdb.openstack.netvirt.api.*;
import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
import org.opendaylight.ovsdb.southbound.SouthboundMapper;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Override
public void ovsdbUpdate(Node node, DataObject resourceAugmentationData, OvsdbType ovsdbType, Action action) {
logger.info("ovsdbUpdate: {} - {} - {}", node, ovsdbType, action);
- this.enqueueEvent(new SouthboundEvent(node, ovsdbTypeToSouthboundEventType(ovsdbType), action));
+ this.enqueueEvent(new SouthboundEvent(node, resourceAugmentationData, ovsdbTypeToSouthboundEventType(ovsdbType), action));
}
public void processOvsdbNodeUpdate(Node node, Action action) {
- if (action == Action.ADD) {
+ switch (action) {
+ case ADD:
logger.info("processOvsdbNodeUpdate {}", node);
bridgeConfigurationManager.prepareNode(node);
+ break;
+ case UPDATE:
+ break;
+ case DELETE:
+ processNodeDelete(node);
+ break;
+ }
+ if (action == Action.ADD) {
} else {
logger.info("Not implemented yet: {}", action);
}
}
+ private void processNodeDelete(Node node) {
+ OvsdbNodeAugmentation nodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
+ if(nodeAugmentation != null){
+ InstanceIdentifier<Node> bridgeNodeIid =
+ MdsalHelper.createInstanceIdentifier(nodeAugmentation.getConnectionInfo(), Constants.INTEGRATION_BRIDGE);
+ MdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, bridgeNodeIid);
+ }
+ }
+
private void handleInterfaceUpdate (Node node, OvsdbTerminationPointAugmentation tp) {
logger.trace("handleInterfaceUpdate node: {}, tp: {}", node, tp);
NeutronNetwork network = tenantNetworkManager.getTenantNetwork(tp);
}
}
- private void processBridgeDelete(Node node, OvsdbBridgeAugmentation bridge) {
- logger.debug("processBridgeUpdate {}, {}", node, bridge);
+ private void processBridgeDelete(Node bridgeNode, OvsdbBridgeAugmentation bridge) {
+ logger.debug("Delete bridge from config data store : {}", bridgeNode.getNodeId());
+ MdsalUtils.deleteBridge(bridgeNode);
}
private void processBridgeUpdate(Node node, OvsdbBridgeAugmentation bridge) {