X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=ovsdb%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fplugin%2FConfigurationService.java;h=5680e415bfdacb28c560b77e709fa457278ad9b6;hb=55e70d94d4fb2d5f27371e9de463153c52dbf41c;hp=61d7a017de189f50e5ef1069eb95b41b934ed9a4;hpb=c969beda936f2397197a79454bda091c57ffef36;p=netvirt.git diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java index 61d7a017de..5680e415bf 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java @@ -4,11 +4,26 @@ import java.math.BigInteger; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import org.eclipse.osgi.framework.console.CommandInterpreter; import org.eclipse.osgi.framework.console.CommandProvider; -import org.opendaylight.ovsdb.lib.database.OVSBridge; +import org.opendaylight.controller.clustering.services.IClusterGlobalServices; +import org.opendaylight.controller.sal.connection.ConnectionConstants; +import org.opendaylight.controller.sal.core.Node; +import org.opendaylight.controller.sal.core.NodeConnector; +import org.opendaylight.controller.sal.networkconfig.bridgedomain.ConfigConstants; +import org.opendaylight.controller.sal.networkconfig.bridgedomain.IPluginInBridgeDomainConfigService; +import org.opendaylight.controller.sal.utils.NetUtils; +import org.opendaylight.controller.sal.utils.Status; +import org.opendaylight.controller.sal.utils.StatusCode; import org.opendaylight.ovsdb.lib.database.OVSInstance; import org.opendaylight.ovsdb.lib.database.OvsdbType; import org.opendaylight.ovsdb.lib.message.TransactBuilder; @@ -24,20 +39,19 @@ import org.opendaylight.ovsdb.lib.notation.OvsDBMap; 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.Capability; import org.opendaylight.ovsdb.lib.table.Controller; import org.opendaylight.ovsdb.lib.table.Interface; +import org.opendaylight.ovsdb.lib.table.Manager; +import org.opendaylight.ovsdb.lib.table.Mirror; +import org.opendaylight.ovsdb.lib.table.NetFlow; import org.opendaylight.ovsdb.lib.table.Open_vSwitch; import org.opendaylight.ovsdb.lib.table.Port; +import org.opendaylight.ovsdb.lib.table.Qos; +import org.opendaylight.ovsdb.lib.table.Queue; +import org.opendaylight.ovsdb.lib.table.SFlow; +import org.opendaylight.ovsdb.lib.table.SSL; import org.opendaylight.ovsdb.lib.table.internal.Table; -import org.opendaylight.controller.clustering.services.IClusterGlobalServices; -import org.opendaylight.controller.sal.connection.ConnectionConstants; -import org.opendaylight.controller.sal.core.Node; -import org.opendaylight.controller.sal.core.NodeConnector; -import org.opendaylight.controller.sal.networkconfig.bridgedomain.ConfigConstants; -import org.opendaylight.controller.sal.networkconfig.bridgedomain.IPluginInBridgeDomainConfigService; -import org.opendaylight.controller.sal.utils.NetUtils; -import org.opendaylight.controller.sal.utils.Status; -import org.opendaylight.controller.sal.utils.StatusCode; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.slf4j.Logger; @@ -45,7 +59,8 @@ import org.slf4j.LoggerFactory; import com.google.common.util.concurrent.ListenableFuture; -public class ConfigurationService implements IPluginInBridgeDomainConfigService, CommandProvider +public class ConfigurationService implements IPluginInBridgeDomainConfigService, OVSDBConfigService, + CommandProvider { private static final Logger logger = LoggerFactory .getLogger(ConfigurationService.class); @@ -202,9 +217,25 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, interfaceRow.setType("internal"); InsertOperation addIntfRequest = new InsertOperation(Interface.NAME.getName(), newInterface, interfaceRow); + /* Update config version */ + String ovsTableUUID = (String) ovsTable.keySet().toArray()[0]; + Mutation bm = new Mutation("next_cfg", Mutator.SUM, 1); + List mutations = new ArrayList(); + mutations.add(bm); + + UUID uuid = new UUID(ovsTableUUID); + Condition condition = new Condition("_uuid", Function.EQUALS, uuid); + List where = new ArrayList(); + where.add(condition); + MutateOperation updateCfgVerRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations); + TransactBuilder transaction = new TransactBuilder(); transaction.addOperations(new ArrayList( - Arrays.asList(addSwitchRequest, addIntfRequest, addPortRequest, addBridgeRequest))); + Arrays.asList(addSwitchRequest, + addIntfRequest, + addPortRequest, + addBridgeRequest, + updateCfgVerRequest))); ListenableFuture> transResponse = connection.getRpc().transact(transaction); List tr = transResponse.get(); @@ -212,7 +243,7 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, Status status = new Status(StatusCode.SUCCESS); for (int i = 0; i < tr.size() ; i++) { if (i < requests.size()) requests.get(i).setResult(tr.get(i)); - if (tr.get(i).getError() != null && tr.get(i).getError().trim().length() > 0) { + if (tr.get(i) != null && tr.get(i).getError() != null && tr.get(i).getError().trim().length() > 0) { OperationResult result = tr.get(i); status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); } @@ -452,30 +483,30 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, @Override public Status deletePort(Node node, String bridgeIdentifier, String portIdentifier) { - try{ - if (connectionService == null) { - logger.error("Couldn't refer to the ConnectionService"); - return new Status(StatusCode.NOSERVICE); - } + try{ + if (connectionService == null) { + logger.error("Couldn't refer to the ConnectionService"); + return new Status(StatusCode.NOSERVICE); + } - Connection connection = this.getConnection(node); - if (connection == null) { - return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available"); - } + Connection connection = this.getConnection(node); + if (connection == null) { + return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available"); + } - Map> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName()); - Map> portTable = inventoryServiceInternal.getTableCache(node, Port.NAME.getName()); - Operation delPortRequest = null; - String brUuid = null; - String portUuid = null; - if(brTable != null){ - for (String uuid : brTable.keySet()) { - Bridge bridge = (Bridge) brTable.get(uuid); - if (bridge.getName().contains(bridgeIdentifier)) { - brUuid = uuid; + Map> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName()); + Map> portTable = inventoryServiceInternal.getTableCache(node, Port.NAME.getName()); + Operation delPortRequest = null; + String brUuid = null; + String portUuid = null; + if(brTable != null){ + for (String uuid : brTable.keySet()) { + Bridge bridge = (Bridge) brTable.get(uuid); + if (bridge.getName().contains(bridgeIdentifier)) { + brUuid = uuid; + } } } - } if(portTable != null){ for (String uuid : portTable.keySet()) { Port port = (Port) portTable.get(uuid); @@ -554,8 +585,70 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, @Override public Status deleteBridgeDomain(Node node, String bridgeIdentifier) { - // TODO Auto-generated method stub - return null; + + try { + if (connectionService == null) { + logger.error("Couldn't refer to the ConnectionService"); + return new Status(StatusCode.NOSERVICE); + } + Connection connection = this.getConnection(node); + if (connection == null) { + return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available"); + } + Map> ovsTable = inventoryServiceInternal.getTableCache(node, Open_vSwitch.NAME.getName()); + Map> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName()); + Operation delBrRequest = null; + String ovsUuid = null; + String brUuid = null; + + if (brTable != null) { + for (String uuid : brTable.keySet()) { + Bridge bridge = (Bridge) brTable.get(uuid); + if (bridge.getName().contains(bridgeIdentifier)) { + brUuid = uuid; + } + } + } + if (ovsTable != null) { + ovsUuid = (String) ovsTable.keySet().toArray()[0]; + } + UUID bridgeUuidPair = new UUID(brUuid); + Mutation bm = new Mutation("bridges", Mutator.DELETE, bridgeUuidPair); + List mutations = new ArrayList(); + mutations.add(bm); + + UUID uuid = new UUID(ovsUuid); + Condition condition = new Condition("_uuid", Function.EQUALS, uuid); + List where = new ArrayList(); + where.add(condition); + delBrRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations); + + TransactBuilder transaction = new TransactBuilder(); + transaction.addOperations(new ArrayList(Arrays.asList(delBrRequest))); + + ListenableFuture> transResponse = connection.getRpc().transact(transaction); + List tr = transResponse.get(); + List requests = transaction.getRequests(); + Status status = new Status(StatusCode.SUCCESS); + for (int i = 0; i < tr.size(); i++) { + if (i < requests.size()) requests.get(i).setResult(tr.get(i)); + if (tr.get(i) != null && tr.get(i).getError() != null && tr.get(i).getError().trim().length() > 0) { + OperationResult result = tr.get(i); + status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); + } + } + + if (tr.size() > requests.size()) { + OperationResult result = tr.get(tr.size() - 1); + logger.error("Error creating Bridge : {}\n Error : {}\n Details : {}", + bridgeIdentifier, result.getError(), result.getDetails()); + status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); + } + return status; + } catch (Exception e) { + e.printStackTrace(); + } + return new Status(StatusCode.INTERNALERROR); } @Override @@ -725,6 +818,279 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, return true; } + @Override + public Status insertRow(Node node, String tableName, String parent_uuid, Table row) { + logger.error("tableName : {}, parent_uuid : {} Row : {}", tableName, parent_uuid, row.toString()); + Status statusWithUUID = null; + + // Schema based Table handling will help fix this static Table handling. + + if (row.getTableName().getName().equalsIgnoreCase("Bridge")) { + statusWithUUID = insertBridgeRow(node, parent_uuid, (Bridge)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Capbility")) { + statusWithUUID = insertCapabilityRow(node, parent_uuid, (Capability)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Controller")) { + statusWithUUID = insertControllerRow(node, parent_uuid, (Controller)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Interface")) { + statusWithUUID = insertInterfaceRow(node, parent_uuid, (Interface)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Manager")) { + statusWithUUID = insertManagerRow(node, parent_uuid, (Manager)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Mirror")) { + statusWithUUID = insertMirrorRow(node, parent_uuid, (Mirror)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("NetFlow")) { + statusWithUUID = insertNetFlowRow(node, parent_uuid, (NetFlow)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Open_vSwitch")) { + statusWithUUID = insertOpen_vSwitchRow(node, (Open_vSwitch)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Port")) { + statusWithUUID = insertPortRow(node, parent_uuid, (Port)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("QoS")) { + statusWithUUID = insertQosRow(node, parent_uuid, (Qos)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("Queue")) { + statusWithUUID = insertQueueRow(node, parent_uuid, (Queue)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("sFlow")) { + statusWithUUID = insertSflowRow(node, parent_uuid, (SFlow)row); + } + else if (row.getTableName().getName().equalsIgnoreCase("SSL")) { + statusWithUUID = insertSSLRow(node, parent_uuid, (SSL)row); + } + return statusWithUUID; + } + + private Status insertBridgeRow(Node node, String open_VSwitch_uuid, Bridge bridgeRow) { + try{ + if (connectionService == null) { + logger.error("Couldn't refer to the ConnectionService"); + return new Status(StatusCode.NOSERVICE); + } + + Connection connection = this.getConnection(node); + if (connection == null) { + return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available"); + } + + Map> ovsTable = inventoryServiceInternal.getTableCache(node, Open_vSwitch.NAME.getName()); + + if (ovsTable == null) { + return new Status(StatusCode.NOTFOUND, "There are no Open_vSwitch instance in the Open_vSwitch table"); + } + + String newBridge = "new_bridge"; + + Operation addSwitchRequest = null; + + String ovsTableUUID = open_VSwitch_uuid; + if (ovsTableUUID == null) ovsTableUUID = (String) ovsTable.keySet().toArray()[0]; + UUID bridgeUuidPair = new UUID(newBridge); + Mutation bm = new Mutation("bridges", Mutator.INSERT, bridgeUuidPair); + List mutations = new ArrayList(); + mutations.add(bm); + + UUID uuid = new UUID(ovsTableUUID); + Condition condition = new Condition("_uuid", Function.EQUALS, uuid); + List where = new ArrayList(); + where.add(condition); + addSwitchRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations); + + InsertOperation addBridgeRequest = new InsertOperation(Bridge.NAME.getName(), newBridge, bridgeRow); + + TransactBuilder transaction = new TransactBuilder(); + transaction.addOperations(new ArrayList( + Arrays.asList(addSwitchRequest, + addBridgeRequest))); + + int bridgeInsertIndex = transaction.getRequests().indexOf(addBridgeRequest); + + ListenableFuture> transResponse = connection.getRpc().transact(transaction); + List tr = transResponse.get(); + List requests = transaction.getRequests(); + Status status = new Status(StatusCode.SUCCESS); + for (int i = 0; i < tr.size() ; i++) { + if (i < requests.size()) requests.get(i).setResult(tr.get(i)); + if (tr.get(i) != null && tr.get(i).getError() != null && tr.get(i).getError().trim().length() > 0) { + OperationResult result = tr.get(i); + status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); + } + } + + if (tr.size() > requests.size()) { + OperationResult result = tr.get(tr.size()-1); + logger.error("Error creating Bridge : {}\n Error : {}\n Details : {}", bridgeRow.getName(), + result.getError(), + result.getDetails()); + status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); + } + if (status.isSuccess()) { + UUID bridgeUUID = tr.get(bridgeInsertIndex).getUuid(); + status = new Status(StatusCode.SUCCESS, bridgeUUID.toString()); + } + return status; + } catch(Exception e){ + e.printStackTrace(); + } + return new Status(StatusCode.INTERNALERROR); + } + + private Status insertPortRow(Node node, String bridge_uuid, Port portRow) { + try{ + if (connectionService == null) { + logger.error("Couldn't refer to the ConnectionService"); + return new Status(StatusCode.NOSERVICE); + } + Connection connection = this.getConnection(node); + if (connection == null) { + return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available"); + } + + Map> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName()); + if (brTable == null || brTable.get(bridge_uuid) == null) { + return new Status(StatusCode.NOTFOUND, "Bridge with UUID "+bridge_uuid+" Not found"); + } + String newPort = "new_port"; + UUID portUUID = new UUID(newPort); + Mutation bm = new Mutation("ports", Mutator.INSERT, portUUID); + List mutations = new ArrayList(); + mutations.add(bm); + + UUID uuid = new UUID(bridge_uuid); + Condition condition = new Condition("_uuid", Function.EQUALS, uuid); + List where = new ArrayList(); + where.add(condition); + Operation addBrMutRequest = new MutateOperation(Bridge.NAME.getName(), where, mutations); + + // Default OVS schema is to have 1 or more interface part of Bridge. Hence it is mandatory to + // Insert an Interface in a Port add case :-(. + + String newInterface = "new_interface"; + Interface interfaceRow = new Interface(); + interfaceRow.setName(portRow.getName()); + InsertOperation addIntfRequest = new InsertOperation(Interface.NAME.getName(), + newInterface, interfaceRow); + + OvsDBSet interfaces = new OvsDBSet(); + UUID interfaceid = new UUID(newInterface); + interfaces.add(interfaceid); + portRow.setInterfaces(interfaces); + + InsertOperation addPortRequest = new InsertOperation(Port.NAME.getName(), newPort, portRow); + + TransactBuilder transaction = new TransactBuilder(); + transaction.addOperations(new ArrayList + (Arrays.asList(addBrMutRequest, addPortRequest, addIntfRequest))); + int portInsertIndex = transaction.getRequests().indexOf(addPortRequest); + ListenableFuture> transResponse = connection.getRpc().transact(transaction); + List tr = transResponse.get(); + List requests = transaction.getRequests(); + Status status = new Status(StatusCode.SUCCESS); + for (int i = 0; i < tr.size() ; i++) { + if (i < requests.size()) requests.get(i).setResult(tr.get(i)); + if (tr.get(i) != null && tr.get(i).getError() != null && tr.get(i).getError().trim().length() > 0) { + OperationResult result = tr.get(i); + status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); + } + } + + if (tr.size() > requests.size()) { + OperationResult result = tr.get(tr.size()-1); + logger.error("Error creating port : {}\n Error : {}\n Details : {}", portRow.getName(), + result.getError(), + result.getDetails()); + status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); + } + if (status.isSuccess()) { + uuid = tr.get(portInsertIndex).getUuid(); + status = new Status(StatusCode.SUCCESS, uuid.toString()); + } + + return status; + } catch (Exception e) { + e.printStackTrace(); + } + return new Status(StatusCode.INTERNALERROR); + } + + private Status insertInterfaceRow(Node node, String port_uuid, Interface row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertOpen_vSwitchRow(Node node, Open_vSwitch row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertControllerRow(Node node, String bridge_uuid, Controller row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertSSLRow(Node node, String parent_uuid, SSL row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertSflowRow(Node node, String parent_uuid, SFlow row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertQueueRow(Node node, String parent_uuid, Queue row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertQosRow(Node node, String parent_uuid, Qos row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertNetFlowRow(Node node, String parent_uuid, NetFlow row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertMirrorRow(Node node, String parent_uuid, Mirror row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertManagerRow(Node node, String parent_uuid, Manager row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + private Status insertCapabilityRow(Node node, String parent_uuid, Capability row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet."); + } + + @Override + public Status updateRow(Node node, String rowUUID, Table row) { + return new Status(StatusCode.NOTIMPLEMENTED, "Update Row functionality is not implemented yet."); + } + + @Override + public Status deleteRow(Node node, String tableName, String uuid) { + return new Status(StatusCode.NOTIMPLEMENTED, "Delete Row functionality is not implemented yet."); + } + + @Override + public List> getRows(Node node, String tableName) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Table getRow(Node node, String tableName, String uuid) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getTables(Node node) { + // TODO Auto-generated method stub + return null; + } + public void _ovsconnect (CommandInterpreter ci) { String bridgeName = ci.nextArgument(); if (bridgeName == null) { @@ -764,15 +1130,20 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, ci.println("Please enter Node Name"); return; } - String bridgeName = ci.nextArgument(); if (bridgeName == null) { ci.println("Please enter Bridge Name"); return; } Status status; + try { - status = this.createBridgeDomain(Node.fromString(nodeName), bridgeName, null); + Node node = Node.fromString(nodeName); + if (node == null) { + ci.println("Invalid Node"); + return; + } + status = this.createBridgeDomain(node, bridgeName, null); ci.println("Bridge creation status : "+status.toString()); } catch (Throwable e) { // TODO Auto-generated catch block @@ -788,9 +1159,15 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, return; } Status status; + List brlist = new ArrayList(); try { - brlist = this.getBridgeDomains(Node.fromString(nodeName)); + Node node = Node.fromString(nodeName); + brlist = this.getBridgeDomains(node); + if (node == null) { + ci.println("Invalid Node"); + return; + } ci.println("Existing Bridges: "+brlist.toString()); } catch (Throwable e) { e.printStackTrace(); @@ -798,6 +1175,32 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, } } + public void _deleteBridgeDomain (CommandInterpreter ci) { + String nodeName = ci.nextArgument(); + if (nodeName == null) { + ci.println("Please enter Node Name"); + return; + } + String bridgeName = ci.nextArgument(); + if (bridgeName == null) { + ci.println("Please enter Bridge Name"); + return; + } + Status status; + try { + Node node = Node.fromString(nodeName); + if (node == null) { + ci.println("Invalid Node"); + return; + } + status = this.deleteBridgeDomain(node, bridgeName); + ci.println("Bridge deletion status : "+status.toString()); + } catch (Throwable e) { + e.printStackTrace(); + ci.println("Failed to delete Bridge "+bridgeName); + } + } + public void _addPort (CommandInterpreter ci) { String nodeName = ci.nextArgument(); if (nodeName == null) { @@ -841,7 +1244,12 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, } Status status; try { - status = this.addPort(Node.fromString(nodeName), bridgeName, portName, customConfigs); + Node node = Node.fromString(nodeName); + if (node == null) { + ci.println("Invalid Node"); + return; + } + status = this.addPort(node, bridgeName, portName, customConfigs); ci.println("Port creation status : "+status.toString()); } catch (Throwable e) { // TODO Auto-generated catch block @@ -871,7 +1279,12 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, Status status; try { - status = this.deletePort(Node.fromString(nodeName), bridgeName, portName); + Node node = Node.fromString(nodeName); + if (node == null) { + ci.println("Invalid Node"); + return; + } + status = this.deletePort(node, bridgeName, portName); ci.println("Port deletion status : "+status.toString()); } catch (Throwable e) { // TODO Auto-generated catch block @@ -918,7 +1331,12 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, Status status; try { - status = this.addPort(Node.fromString(nodeName), bridgeName, portName, configs); + Node node = Node.fromString(nodeName); + if (node == null) { + ci.println("Invalid Node"); + return; + } + status = this.addPort(node, bridgeName, portName, configs); ci.println("Port creation status : "+status.toString()); } catch (Throwable e) { // TODO Auto-generated catch block @@ -973,7 +1391,12 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, Status status; try { - status = this.addPort(Node.fromString(nodeName), bridgeName, portName, configs); + Node node = Node.fromString(nodeName); + if (node == null) { + ci.println("Invalid Node"); + return; + } + status = this.addPort(node, bridgeName, portName, configs); ci.println("Port creation status : "+status.toString()); } catch (Throwable e) { // TODO Auto-generated catch block @@ -988,7 +1411,12 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, ci.println("Please enter Node Name"); return; } - inventoryServiceInternal.printCache(Node.fromString(nodeName)); + Node node = Node.fromString(nodeName); + if (node == null) { + ci.println("Invalid Node"); + return; + } + inventoryServiceInternal.printCache(node); } public void _forceConnect (CommandInterpreter ci) { @@ -1006,9 +1434,10 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, help.append("---OVSDB CLI---\n"); help.append("\t ovsconnect - Connect to OVSDB\n"); help.append("\t addBridge - Add Bridge\n"); - help.append("\t getBridgeDomains - Get Bridges\n"); + help.append("\t getBridgeDomains - Get Bridges\n"); + help.append("\t deleteBridgeDomain - Delete a Bridge\n"); help.append("\t addPort - Add Port\n"); - help.append("\t delPort - Delete Port\n"); + help.append("\t deletePort - Delete Port\n"); help.append("\t addPortVlan - Add Port, Vlan\n"); help.append("\t addTunnel - Add Tunnel\n"); help.append("\t printCache - Prints Table Cache");