Fixing a few issues in PatchSet-1 that adds support for IPFIX table in ConfigurationS... 69/5669/2
authorMadhu Venugopal <mavenugo@gmail.com>
Mon, 31 Mar 2014 22:17:59 +0000 (15:17 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Mon, 31 Mar 2014 22:17:59 +0000 (15:17 -0700)
Change-Id: I28b0ca6daecc6ea6244c91137fba2e16b9444e78
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
northbound/ovsdb/src/main/java/org/opendaylight/ovsdb/northbound/OVSDBRow.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/Bridge.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/IPFIX.java
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java

index 1f2ff51b8d084b01fbbea9c23b0ddb3b8ddd3116..9f5ab18980c651405a8687a102316624f7b1b904 100644 (file)
@@ -12,6 +12,7 @@ package org.opendaylight.ovsdb.northbound;
 import org.opendaylight.ovsdb.lib.table.Bridge;
 import org.opendaylight.ovsdb.lib.table.Capability;
 import org.opendaylight.ovsdb.lib.table.Controller;
+import org.opendaylight.ovsdb.lib.table.IPFIX;
 import org.opendaylight.ovsdb.lib.table.Interface;
 import org.opendaylight.ovsdb.lib.table.Manager;
 import org.opendaylight.ovsdb.lib.table.Mirror;
@@ -59,7 +60,8 @@ public class OVSDBRow {
         @JsonSubTypes.Type(value=Qos.class, name="QoS"),
         @JsonSubTypes.Type(value=Queue.class, name="Queue"),
         @JsonSubTypes.Type(value=SFlow.class, name="sFlow"),
-        @JsonSubTypes.Type(value=SSL.class, name="SSL")
+        @JsonSubTypes.Type(value=SSL.class, name="SSL"),
+        @JsonSubTypes.Type(value=IPFIX.class, name="IPFIX")
         })
     Table row;
 
index 3dba186b622b1101db59a2814aade07c8db3fa97..9d0df0e8ffe9ddb3513260875801239e5a4e7021 100644 (file)
@@ -34,6 +34,7 @@ public class Bridge extends Table<Bridge> {
     private Boolean stp_enable;
     private OvsDBMap<String, String> other_config;
     private OvsDBMap<String, String> external_ids;
+    UUID ipfix;
 
     public Bridge() {
     }
index 01b39c96777efce8c8908df445a5a3057e6e2a47..101a809df48307fa3f1dac646562c4817dbb0bcd 100644 (file)
@@ -23,8 +23,8 @@ public class IPFIX extends Table<IPFIX> {
 
     private OvsDBSet<String> targets;
     private OvsDBSet<Integer> sampling;
-    private Integer obs_domain_id;
-    private Integer obs_point_id;
+    private OvsDBSet<Integer> obs_domain_id;
+    private OvsDBSet<Integer> obs_point_id;
     private OvsDBSet<Integer> cache_active_timeout;
     private OvsDBSet<Integer> cache_max_flows;
     private OvsDBMap<String, String> external_ids;
@@ -48,19 +48,19 @@ public class IPFIX extends Table<IPFIX> {
         this.sampling = sampling;
     }
 
-    public Integer getObs_domain_id() {
+    public OvsDBSet<Integer> getObs_domain_id() {
         return obs_domain_id;
     }
 
-    public void setObs_domain_id(Integer obs_domain_id) {
+    public void setObs_domain_id(OvsDBSet<Integer> obs_domain_id) {
         this.obs_domain_id = obs_domain_id;
     }
 
-    public Integer getObs_point_id() {
+    public OvsDBSet<Integer> getObs_point_id() {
         return obs_point_id;
     }
 
-    public void setObs_point_id(Integer obs_point_id) {
+    public void setObs_point_id(OvsDBSet<Integer> obs_point_id) {
         this.obs_point_id = obs_point_id;
     }
 
index ceaf284ba1f2e5f4b70325d2415a69a26fa6ea4b..5b68bd13b1d2a36a4ce7819e7676b85982ff7fd9 100644 (file)
@@ -47,6 +47,7 @@ import org.opendaylight.ovsdb.lib.notation.OvsDBSet;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.table.Bridge;
 import org.opendaylight.ovsdb.lib.table.Controller;
+import org.opendaylight.ovsdb.lib.table.IPFIX;
 import org.opendaylight.ovsdb.lib.table.Interface;
 import org.opendaylight.ovsdb.lib.table.Manager;
 import org.opendaylight.ovsdb.lib.table.Mirror;
@@ -145,7 +146,7 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
     /**
      * Add a new bridge
      * @param node Node serving this configuration service
-     * @param bridgeConnectorIdentifier String representation of a Bridge Connector
+     * @param bridgeIdentifier String representation of a Bridge Connector
      * @return Bridge Connector configurations
      */
     @Override
@@ -266,7 +267,7 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
      * Create a Port Attached to a Bridge
      * Ex. ovs-vsctl add-port br0 vif0
      * @param node Node serving this configuration service
-     * @param bridgeDomainIdentifier String representation of a Bridge Domain
+     * @param bridgeIdentifier String representation of a Bridge Domain
      * @param portIdentifier String representation of a user defined Port Name
      */
     @Override
@@ -390,7 +391,7 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
      * Implements the OVS Connection for Managers
      *
      * @param node Node serving this configuration service
-     * @param String with IP and connection types
+     * @param managerip String Representing IP and connection types
      */
     @SuppressWarnings("unchecked")
     public boolean setManager(Node node, String managerip) {
@@ -728,6 +729,9 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
         else if (row.getTableName().getName().equalsIgnoreCase("sFlow")) {
             statusWithUUID = insertSflowRow(node, parent_uuid, (SFlow)row);
         }
+        else if (row.getTableName().getName().equalsIgnoreCase("IPFIX")) {
+            statusWithUUID = insertIpFixRow(node, parent_uuid, (IPFIX) row);
+        }
         else if (row.getTableName().getName().equalsIgnoreCase("SSL")) {
             statusWithUUID = insertSSLRow(node, parent_uuid, (SSL)row);
         }
@@ -831,6 +835,9 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
         else if (tableName.equalsIgnoreCase("sFlow")) {
             return deleteSflowRow(node, uuid);
         }
+        else if (tableName.equalsIgnoreCase("IPFIX")) {
+            return deleteIpFixRow(node, uuid);
+        }
         else if (tableName.equalsIgnoreCase("SSL")) {
             return deleteSSLRow(node, uuid);
         }
@@ -1147,6 +1154,48 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
         return new StatusWithUuid(StatusCode.INTERNALERROR);
     }
 
+        private StatusWithUuid insertIpFixRow(Node node, String parent_uuid, IPFIX row) {
+
+        String insertErrorMsg = "ipfix";
+        String rowName=row.NAME.getName();
+
+        try{
+            Map<String, Table<?>> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName());
+            if (brTable == null ||  brTable.get(parent_uuid) == null) {
+                return new StatusWithUuid(StatusCode.NOTFOUND, "Bridge with UUID "+parent_uuid+" Not found");
+            }
+
+            if (parent_uuid == null) {
+                return new StatusWithUuid(StatusCode.BADREQUEST, "Require parent Bridge UUID.");
+            }
+
+            UUID uuid = new UUID(parent_uuid);
+            String newIpFix = "new_ipfix";
+            Operation addBridgeRequest = null;
+            UUID ipfixUuid = new UUID(newIpFix);
+            Mutation ipfixMutation = new Mutation("ipfix", Mutator.INSERT, ipfixUuid);
+            List<Mutation> mutations = new ArrayList<Mutation>();
+            mutations.add(ipfixMutation);
+
+            Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
+            List<Condition> where = new ArrayList<Condition>();
+            where.add(condition);
+            addBridgeRequest = new MutateOperation(Bridge.NAME.getName(), where, mutations);
+            InsertOperation addIpFixRequest = new InsertOperation(IPFIX.NAME.getName(), newIpFix, row);
+
+            TransactBuilder transaction = new TransactBuilder();
+            transaction.addOperations(
+                    new ArrayList<Operation>(Arrays.asList(addIpFixRequest,addBridgeRequest)));
+            int ipfixInsertIndex = transaction.getRequests().indexOf(addIpFixRequest);
+
+            return _insertTableRow(node,transaction,ipfixInsertIndex,insertErrorMsg,rowName);
+
+        } catch (Exception e) {
+            logger.error("Error in insertInterfaceRow(): ",e);
+        }
+        return new StatusWithUuid(StatusCode.INTERNALERROR);
+    }
+
     private StatusWithUuid insertSflowRow(Node node, String parent_uuid, SFlow row) {
 
         String insertErrorMsg = "sFlow";
@@ -1541,6 +1590,15 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
         return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
     }
 
+    private Status deleteIpFixRow(Node node, String uuid) {
+        // Set up variables for generic _deleteTableRow()
+        String parentTableName=Bridge.NAME.getName();
+        String childTableName=IPFIX.NAME.getName();
+        String parentColumn = "ipfix";
+
+        return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
+    }
+
     private Status deleteQueueRow(Node node, String uuid) {
         // Set up variables for _deleteRootTableRow()
         // This doesn't do a mutate on parent, but simply deletes row