[ONOS-6451] Datapath type setting function for supporting OVS DPDK addBridge

Change-Id: Ib6a8fa79dc1221e1387f8888f606306c671c4133
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java
index a8c0832..5ab5c07 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java
@@ -80,6 +80,13 @@
     Optional<String> datapathId();
 
     /**
+     * Returns OVSDB datapath Type of the bridge.
+     *
+     * @return datapath type
+     */
+    Optional<String> datapathType();
+
+    /**
      * Returns OpenFlow device ID. Valid only if OpenFlow controller is configured
      * for the bridge.
      *
@@ -141,6 +148,14 @@
         Builder datapathId(String datapathId);
 
         /**
+         * Returns bridge description builder with a given datapath type.
+         *
+         * @param datapathType datapath type
+         * @return bridge description builder
+         */
+        Builder datapathType(String datapathType);
+
+        /**
          * Returns bridge description builder with in-band control disabled.
          *
          * @return bridge description builder
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java
index f35b646..ef9c767 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java
@@ -38,6 +38,7 @@
     private final boolean enableLocalController;
     private final Optional<FailMode> failMode;
     private final Optional<String> datapathId;
+    private final Optional<String> datapathType;
     private final Optional<Boolean> disableInBand;
 
     /* Adds more configurations */
@@ -47,12 +48,14 @@
                                      boolean enableLocalController,
                                      Optional<FailMode> failMode,
                                      Optional<String> datapathId,
+                                     Optional<String> datapathType,
                                      Optional<Boolean> disableInBand) {
         this.name = checkNotNull(name);
         this.controllers = controllers;
         this.enableLocalController = enableLocalController;
         this.failMode = failMode;
         this.datapathId = datapathId;
+        this.datapathType = datapathType;
         this.disableInBand = disableInBand;
     }
 
@@ -87,6 +90,11 @@
     }
 
     @Override
+    public Optional<String> datapathType() {
+        return datapathType;
+    }
+
+    @Override
     public Optional<DeviceId> deviceId() {
         if (datapathId.isPresent()) {
             return Optional.of(DeviceId.deviceId("of:" + datapathId.get()));
@@ -116,6 +124,7 @@
         private boolean enableLocalController = false;
         private Optional<FailMode> failMode = Optional.empty();
         private Optional<String> datapathId = Optional.empty();
+        private Optional<String> datapathType = Optional.empty();
         private Optional<Boolean> disableInBand = Optional.empty();
 
         private Builder() {
@@ -127,6 +136,7 @@
                                                 enableLocalController,
                                                 failMode,
                                                 datapathId,
+                                                datapathType,
                                                 disableInBand);
         }
 
@@ -164,6 +174,12 @@
         }
 
         @Override
+        public Builder datapathType(String datapathType) {
+            this.datapathType = Optional.ofNullable(datapathType);
+            return this;
+        }
+
+        @Override
         public Builder disableInBand() {
             this.disableInBand = Optional.of(Boolean.TRUE);
             return this;
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
index 00eb375..b38d1d7 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
@@ -45,6 +45,7 @@
     private final List<ControllerInfo> controllers;
 
     /* Adds more properties */
+    private final Optional<String> datapathType;
 
     /* other optional configs */
     private final Map<String, String> otherConfigs;
@@ -55,14 +56,17 @@
      * @param name name of the bridge
      * @param failMode openflow controller fail mode policy
      * @param controllers list of openflow controllers
+     * @param datapathType ovs datapath_type
      * @param otherConfigs other configs
      */
     private OvsdbBridge(String name, Optional<FailMode> failMode,
                        List<ControllerInfo> controllers,
+                       Optional<String> datapathType,
                        Map<String, String> otherConfigs) {
         this.name = checkNotNull(name);
         this.failMode = failMode;
         this.controllers = controllers;
+        this.datapathType = datapathType;
         this.otherConfigs = otherConfigs;
     }
 
@@ -94,6 +98,15 @@
     }
 
     /**
+     * Returns OVSDB datapath Type of the bridge.
+     *
+     * @return datapath type
+     */
+    public Optional<String> datapathType() {
+        return datapathType;
+    }
+
+    /**
      * Returns other configurations of the bridge.
      *
      * @return map of configurations
@@ -134,6 +147,7 @@
                 .add("bridgeName", name)
                 .add("failMode", failMode)
                 .add("controllers", controllers)
+                .add("datapathType", datapathType)
                 .add("otherConfigs", otherConfigs)
                 .toString();
     }
@@ -164,6 +178,7 @@
         private String name;
         private Optional<FailMode> failMode = Optional.empty();
         private List<ControllerInfo> controllers = Lists.newArrayList();
+        private Optional<String> datapathType = Optional.empty();
         private Map<String, String> otherConfigs = Maps.newHashMap();
 
         private Builder() {
@@ -182,7 +197,9 @@
                 otherConfigs.put(DISABLE_INBAND,
                                  bridgeDesc.disableInBand().get().toString());
             }
-
+            if (bridgeDesc.datapathType().isPresent()) {
+                this.datapathType = bridgeDesc.datapathType();
+            }
             this.name = bridgeDesc.name();
             this.failMode = bridgeDesc.failMode();
             this.controllers = Lists.newArrayList(bridgeDesc.controllers());
@@ -194,7 +211,7 @@
          * @return ovsdb bridge
          */
         public OvsdbBridge build() {
-            return new OvsdbBridge(name, failMode, controllers, otherConfigs);
+            return new OvsdbBridge(name, failMode, controllers, datapathType, otherConfigs);
         }
 
         /**
@@ -264,6 +281,17 @@
         }
 
         /**
+         * Returns OVSDB bridge builder with a given datapath type.
+         *
+         * @param datapathType datapath Type
+         * @return ovsdb bridge builder
+         */
+        public Builder datapathType(String datapathType) {
+            this.datapathType = Optional.ofNullable(datapathType);
+            return this;
+        }
+
+        /**
          * Returns OVSDB bridge builder with a given disable in-band config.
          *
          * @return ovsdb bridge builder
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
index f60d48c..cc6e8b5 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
@@ -522,6 +522,11 @@
             bridge.setFailMode(Sets.newHashSet(failMode));
         }
 
+        if (ovsdbBridge.datapathType().isPresent()) {
+            String datapathType = ovsdbBridge.datapathType().get();
+            bridge.setDatapathType(datapathType);
+        }
+
         String bridgeUuid = getBridgeUuid(ovsdbBridge.name());
         if (bridgeUuid == null) {
             bridge.setName(ovsdbBridge.name());