Add support for datapath 47/16647/3
authorEd Warnicke <eaw@cisco.com>
Mon, 16 Mar 2015 14:14:01 +0000 (09:14 -0500)
committerEd Warnicke <eaw@cisco.com>
Tue, 17 Mar 2015 18:22:41 +0000 (18:22 +0000)
Change-Id: Ia8b5fcf4db6f22f86db81472ce4c4c4ba1475ec1
Signed-off-by: Ed Warnicke <eaw@cisco.com>
southbound/southbound-api/src/main/yang/ovsdb.yang
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java

index ac27f72709aec7bbb15c4e75f90f5807c2415f8a..239b38b2c15096670abd1de67a28bf99724d268f 100644 (file)
@@ -23,10 +23,34 @@ module ovsdb {
         type instance-identifier;
     }
 
+    typedef flow-node-ref {
+        description "A reference to a flow node";
+        type instance-identifier;
+    }
+
     typedef ovsdb-bridge-name {
         type string;
     }
 
+    typedef datapath-id {
+        type string {
+          pattern
+            '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}';
+        }
+        description
+          "The datapath-d type represents OpenFlow datapath-id .
+        The canonical representation uses lowercase characters.
+
+        In the value set and its semantics, this type is similar
+        to the MacAddress textual convention of the SMIv2, but with
+        16 extra bits";
+        reference
+          "Openflow 1.3.0 Spec
+           IEEE 802: IEEE Standard for Local and Metropolitan Area
+                Networks: Overview and Architecture
+           RFC 2579: Textual Conventions for SMIv2";
+    }
+
     grouping ovsdb-bridge-attributes {
         leaf bridge-uuid {
             description "The unique identifier of the bridge";
@@ -38,6 +62,16 @@ module ovsdb {
             type ovsdb-bridge-name;
         }
 
+        leaf datapath-id {
+            description "Datapath-id of the bridge";
+            type datapath-id;
+        }
+
+        leaf flow-node {
+            description "Flow node corresponding to this bridge";
+            type flow-node-ref;
+        }
+
         leaf managed-by {
             description "The OVSDB which this bridge belongs to";
             type ovsdb-node-ref;
index 3a52afa5120a743748cbbaa5ae9e668d33919886..f0ce344a4851b78c0beef2d4127cee74da3962f3 100644 (file)
@@ -11,14 +11,17 @@ import java.net.Inet4Address;
 import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Set;
 
 import org.opendaylight.ovsdb.lib.OvsdbClient;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionInfo;
+import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
 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.OvsdbNodeAugmentationBuilder;
@@ -33,6 +36,10 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+
 public class SouthboundMapper {
     private static final Logger LOG = LoggerFactory.getLogger(SouthboundMapper.class);
 
@@ -151,4 +158,37 @@ public class SouthboundMapper {
             throw new UnknownHostException("IP Address has no value");
         }
     }
+
+    public static DatapathId createDatapathId(Bridge bridge) {
+        Preconditions.checkNotNull(bridge);
+        if(bridge.getDatapathIdColumn() == null) {
+            return null;
+        } else {
+            return createDatapathId(bridge.getDatapathIdColumn().getData());
+        }
+    }
+
+    public static DatapathId createDatapathId(Set<String> dpids) {
+        Preconditions.checkNotNull(dpids);
+        if(dpids.isEmpty()) {
+            return null;
+        } else {
+            String[] dpidArray = new String[dpids.size()];
+            dpids.toArray(dpidArray);
+            return createDatapathId(dpidArray[0]);
+        }
+    }
+
+    public static DatapathId createDatapathId(String dpid) {
+        Preconditions.checkNotNull(dpid);
+        DatapathId datapath;
+        if(dpid.matches("^[0-9a-fA-F]{16}")) {
+            Splitter splitter = Splitter.fixedLength(2);
+            Joiner joiner = Joiner.on(":");
+            datapath = new DatapathId(joiner.join(splitter.split(dpid)));
+        } else {
+            datapath = new DatapathId(dpid);
+        }
+        return datapath;
+    }
 }
index 209529c8a24f2ee6643198d082c26e8f4a30507e..e10b72a5c51d42436ebd44071b11411c6b41a610 100644 (file)
@@ -14,10 +14,11 @@ import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.southbound.OvsdbClientKey;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
 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.OvsdbBridgeAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
 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.OvsdbNodeAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
@@ -56,10 +57,13 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand {
                 NodeBuilder managedNodeBuilder = new NodeBuilder();
                 NodeId manageNodeId = SouthboundMapper.createManagedNodeId(getKey(), new OvsdbBridgeName(bridge.getName()));
                 managedNodeBuilder.setNodeId(manageNodeId);
-
                 OvsdbBridgeAugmentationBuilder ovsdbManagedNodeBuilder = new OvsdbBridgeAugmentationBuilder();
                 ovsdbManagedNodeBuilder.setBridgeName(new OvsdbBridgeName(bridge.getName()));
                 ovsdbManagedNodeBuilder.setBridgeUuid(new Uuid(bridge.getUuid().toString()));
+                DatapathId dpid= SouthboundMapper.createDatapathId(bridge);
+                if(dpid != null) {
+                    ovsdbManagedNodeBuilder.setDatapathId(dpid);
+                }
                 ovsdbManagedNodeBuilder.setManagedBy(new OvsdbNodeRef(nodePath));
                 managedNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbManagedNodeBuilder.build());