- public void _ovsconnect (CommandInterpreter ci) {
- String bridgeName = ci.nextArgument();
- if (bridgeName == null) {
- ci.println("Please enter Bridge Name");
- return;
- }
-
- String ovsdbserver = ci.nextArgument();
- if (ovsdbserver == null) {
- ci.println("Please enter valid IP-Address");
- return;
- }
- try {
- InetAddress.getByName(ovsdbserver);
- } catch (UnknownHostException e) {
- logger.error("Unable to resolve " + ovsdbserver, e);
- ci.println("Please enter valid IP-Address");
- return;
- }
- String port = ci.nextArgument();
- if (port == null) {
- port = "6634";
- }
-
- ci.println("connecting to ovsdb server : "+ovsdbserver+":"+port+" ... ");
- Map<ConnectionConstants, String> params = new HashMap<ConnectionConstants, String>();
- params.put(ConnectionConstants.ADDRESS, ovsdbserver);
- params.put(ConnectionConstants.PORT, port);
- Node node = connectionService.connect(bridgeName, params);
- if (node != null) ci.println("Node Name: "+node.toString());
- else ci.println("Could not connect to Node");
- }
-
- public void _addBridge (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;
-
- 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());
- }
-
- public void _getBridgeDomains (CommandInterpreter ci) {
- String nodeName = ci.nextArgument();
- if (nodeName == null) {
- ci.println("Please enter Node Name");
- return;
- }
-
- List<String> brlist = new ArrayList<String>();
- Node node = Node.fromString(nodeName);
- brlist = this.getBridgeDomains(node);
- if (node == null) {
- ci.println("Invalid Node");
- return;
- }
- ci.println("Existing Bridges: "+brlist.toString());
- }
-
- 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;
- 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());
- }
-
- public void _addPort (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;
- }
-
- String portName = ci.nextArgument();
- if (portName == null) {
- ci.println("Please enter Port Name");
- return;
- }
-
- String type = ci.nextArgument();
-
- Map<String, String> configs = new HashMap<String, String>();
- while(true) {
- String configKey = ci.nextArgument();
- if (configKey == null) break;
- String configValue = ci.nextArgument();
- if (configValue == null) break;
- configs.put(configKey, configValue);
- }
-
- Map<ConfigConstants, Object> customConfigs = null;
- if (type != null) {
- customConfigs = new HashMap<ConfigConstants, Object>();
- customConfigs.put(ConfigConstants.TYPE, type);
- }
-
- if (configs.size() > 0) {
- if (customConfigs == null) customConfigs = new HashMap<ConfigConstants, Object>();
- customConfigs.put(ConfigConstants.CUSTOM, configs);
- ci.println(customConfigs.toString());
- }
- Status status;
- 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());
- }
-
- public void _deletePort (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;
- }
-
- String portName = ci.nextArgument();
- if (portName == null) {
- ci.println("Please enter Port Name");
- return;
- }
-
- Status status;
- 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());
- }
-
- public void _addPortVlan (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;
- }
-
- String portName = ci.nextArgument();
- if (portName == null) {
- ci.println("Please enter Port Name");
- return;
- }
-
- String vlan = ci.nextArgument();
- if (vlan == null) {
- ci.println("Please enter Valid Vlan");
- return;
- } else {
- try {
- Integer.parseInt(vlan);
- } catch (NumberFormatException e) {
- ci.println("Please enter Valid Vlan");
- return;
- }
- }
-
- Map<ConfigConstants, Object> configs = new HashMap<ConfigConstants, Object>();
- configs.put(ConfigConstants.TYPE, "VLAN");
- configs.put(ConfigConstants.VLAN, vlan);
-
- Status status;
- 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());
- }
-
- public void _addTunnel (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;
- }
-
- String portName = ci.nextArgument();
- if (portName == null) {
- ci.println("Please enter Port Name");
- return;
- }
-
- String tunnelType = ci.nextArgument();
- if (tunnelType == null) {
- ci.println("Please enter Tunnel Type");
- return;
- }
-
- String remoteIp = ci.nextArgument();
- if (remoteIp == null) {
- ci.println("Please enter valid Remote IP Address");
- return;
- }
-
- try {
- InetAddress.getByName(remoteIp);
- } catch (Exception e) {
- logger.error("Unable to resolve " + remoteIp, e);
- ci.println("Please enter valid Remote IP Address");
- return;
- }
-
- Map<ConfigConstants, Object> configs = new HashMap<ConfigConstants, Object>();
- configs.put(ConfigConstants.TYPE, "TUNNEL");
- configs.put(ConfigConstants.TUNNEL_TYPE, tunnelType);
- configs.put(ConfigConstants.DEST_IP, remoteIp);
-
- Status status;
- 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());
- }
-
- public void _printCache (CommandInterpreter ci) {
- String nodeName = ci.nextArgument();
- if (nodeName == null) {
- ci.println("Please enter Node Name");
- return;
- }
- Node node = Node.fromString(nodeName);
- if (node == null) {
- ci.println("Invalid Node");
- return;
- }
- ovsdbInventoryService.printCache(node);
- }
-
- public void _forceConnect (CommandInterpreter ci) {
- String force = ci.nextArgument();
- if (force.equalsIgnoreCase("YES")) {
- forceConnect = true;
- }
- else if (force.equalsIgnoreCase("NO")) {
- forceConnect = false;
- }
- else {
- ci.println("Please enter YES or NO.");
- }
- ci.println("Current ForceConnect State : "+forceConnect);
- }
-
- @Override
- public String getHelp() {
- StringBuilder help = new StringBuilder();
- help.append("---OVSDB CLI---\n");
- help.append("\t ovsconnect <ConnectionName> <ip-address> - Connect to OVSDB\n");
- help.append("\t addBridge <Node> <BridgeName> - Add Bridge\n");
- help.append("\t getBridgeDomains <Node> - Get Bridges\n");
- help.append("\t deleteBridgeDomain <Node> <BridgeName> - Delete a Bridge\n");
- help.append("\t addPort <Node> <BridgeName> <PortName> <type> <options pairs> - Add Port\n");
- help.append("\t deletePort <Node> <BridgeName> <PortName> - Delete Port\n");
- help.append("\t addPortVlan <Node> <BridgeName> <PortName> <vlan> - Add Port, Vlan\n");
- help.append("\t addTunnel <Node> <Bridge> <Port> <tunnel-type> <remote-ip> - Add Tunnel\n");
- help.append("\t printCache <Node> - Prints Table Cache");
- return help.toString();
- }
-
-
- /**
- * Add a new bridge
- * @param node Node serving this configuration service
- * @param bridgeIdentifier String representation of a Bridge Connector
- * @return Bridge Connector configurations
- */
- @Override
- @Deprecated
- public Status createBridgeDomain(Node node, String bridgeIdentifier, Map<ConfigConstants, Object> configs) {
- Connection connection = connectionService.getConnection(node);
- OvsdbClient client = connection.getClient();
- Bridge bridge = client.createTypedRowWrapper(Bridge.class);
- bridge.setName(bridgeIdentifier);
-
- String ovsTableUuid = this.getSpecialCaseParentUUID(node, OvsVswitchdSchemaConstants.DATABASE_NAME, bridge.getSchema().getName());
- return this.insertRow(node, bridge.getSchema().getName(), ovsTableUuid, bridge.getRow());
- }
-
- /**
- * Create a Port Attached to a Bridge
- * Ex. ovs-vsctl add-port br0 vif0
- * @param node Node serving this configuration service
- * @param bridgeIdentifier String representation of a Bridge Domain
- * @param portIdentifier String representation of a user defined Port Name
- */
- @Override
- @Deprecated
- public Status addPort(Node node, String bridgeIdentifier, String portIdentifier,
- Map<ConfigConstants, Object> configs) {
- Connection connection = connectionService.getConnection(node);
- OvsdbClient client = connection.getClient();
-
- Bridge bridge = client.getTypedRowWrapper(Bridge.class, null);
- ConcurrentMap<String, Row> rows = this.getRows(node, bridge.getSchema().getName());
- if (rows == null || rows.size() == 0) {
- return new Status(StatusCode.NOTFOUND);
- }
- for (String bridgeUuid : rows.keySet()) {
- Row bridgeRow = rows.get(bridgeUuid);
- bridge = client.getTypedRowWrapper(Bridge.class, bridgeRow);
- if (bridge.getName().equals(bridgeIdentifier)) break;
- }
- if (bridge.getName() == null || !bridge.getName().equals(bridgeIdentifier)) {
- return new Status(StatusCode.NOTFOUND);
- }
-
- Map<String, String> options = null;
- String type = null;
- Set<Long> tags = null;
- if (configs != null) {
- type = (String) configs.get(ConfigConstants.TYPE);
- Map<String, String> customConfigs = (Map<String, String>) configs.get(ConfigConstants.CUSTOM);
- if (customConfigs != null) {
- options = new HashMap<String, String>();
- for (String customConfig : customConfigs.keySet()) {
- options.put(customConfig, customConfigs.get(customConfig));
- }
- }
- }
-
- if (type != null) {
- logger.debug("Port type : " + type);
- if (type.equalsIgnoreCase(OvsVswitchdSchemaConstants.PortType.VLAN.name())) {
- tags = new HashSet<Long>();
- tags.add(Long.parseLong((String)configs.get(ConfigConstants.VLAN)));
- }
- }
-
- Port port = client.createTypedRowWrapper(Port.class);
- port.setName(portIdentifier);
- if (tags != null) port.setTag(tags);
- StatusWithUuid portStatus = this.insertRow(node, port.getSchema().getName(), bridge.getUuid().toString(), port.getRow());
-
- if (!portStatus.isSuccess()) return portStatus;
- // Ugly hack by adding a sleep for the Monitor Update to catch up.
- // TODO : Remove this once the Select operation is in place.
- // We are currently relying on the local Cache for any GET operation and that might fail if we try to
- // fetch the last installed entry. Hence we need the Select operation to work.
-
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- Interface interfaceRow = client.createTypedRowWrapper(Interface.class);
- ConcurrentMap<String, Row> intfRows = this.getRows(node, interfaceRow.getSchema().getName());
- if (intfRows == null || intfRows.size() == 0) {
- return new Status(StatusCode.NOTFOUND);
- }
- for (String intfUuid : intfRows.keySet()) {
- Row intfRow = intfRows.get(intfUuid);
- interfaceRow = client.getTypedRowWrapper(Interface.class, intfRow);
- if (interfaceRow == null || interfaceRow.getName() == null) continue;
- if (interfaceRow.getName().equals(portIdentifier)) break;
- }
- if (interfaceRow.getName() == null || !interfaceRow.getName().equals(portIdentifier)) {
- return new Status(StatusCode.NOTFOUND);
- }
- Interface updateInterface = client.createTypedRowWrapper(Interface.class);
- if (type != null) {
- logger.debug("Interface type : " + type);
- if (type.equalsIgnoreCase(OvsVswitchdSchemaConstants.PortType.TUNNEL.name())) {
- updateInterface.setType((String)configs.get(ConfigConstants.TUNNEL_TYPE));
- if (options == null) options = new HashMap<String, String>();
- options.put("remote_ip", (String)configs.get(ConfigConstants.DEST_IP));
- } else if (type.equalsIgnoreCase(OvsVswitchdSchemaConstants.PortType.PATCH.name()) ||
- type.equalsIgnoreCase(OvsVswitchdSchemaConstants.PortType.INTERNAL.name())) {
- updateInterface.setType(type.toLowerCase());
- }
- }
- if (options != null) {
- updateInterface.setOptions(options);
- }
-
- Status intfStatus = null;
- intfStatus = this.updateRow(node, interfaceRow.getSchema().getName(), portStatus.getUuid().toString(),
- interfaceRow.getUuid().toString(), updateInterface.getRow());
-
- if (intfStatus.isSuccess()) return portStatus;
- return intfStatus;
- }
-
- /**
- * Implements the OVS Connection for Managers
- *
- * @param node Node serving this configuration service
- * @param managerip String Representing IP and connection types
- */
- @SuppressWarnings("unchecked")
- @Deprecated
- public boolean setManager(Node node, String managerip) {
- Connection connection = connectionService.getConnection(node);
- OvsdbClient client = connection.getClient();
- Manager manager = client.createTypedRowWrapper(Manager.class);
- manager.setTarget(ImmutableSet.of(managerip));
-
- OpenVSwitch openVSwitch = connection.getClient().getTypedRowWrapper(OpenVSwitch.class, null);
- ConcurrentMap<String, Row> row = this.getRows(node, openVSwitch.getSchema().getName());
- if (row == null || row.size() == 0) {
- return false;
- }
- String ovsTableUuid = (String)row.keySet().toArray()[0];
-
- Status status = this.insertRow(node, manager.getSchema().getName(), ovsTableUuid, manager.getRow());
- return status.isSuccess();
- }
-
- @Override
- @Deprecated
- public Status addBridgeDomainConfig(Node node, String bridgeIdentfier,
- Map<ConfigConstants, Object> configs) {
- String mgmt = (String)configs.get(ConfigConstants.MGMT);
- if (mgmt != null) {
- if (setManager(node, mgmt)) return new Status(StatusCode.SUCCESS);
- }
- return new Status(StatusCode.BADREQUEST);
- }
-
- @Override
- @Deprecated
- public Status deletePort(Node node, String bridgeIdentifier, String portIdentifier) {
- Connection connection = connectionService.getConnection(node);
- OvsdbClient client = connection.getClient();
-
- Port port = client.getTypedRowWrapper(Port.class, null);
- ConcurrentMap<String, Row> rows = this.getRows(node, port.getSchema().getName());
- if (rows == null || rows.size() == 0) {
- return new Status(StatusCode.NOTFOUND);
- }
- for (String portUuid : rows.keySet()) {
- Row portRow = rows.get(portUuid);
- port = client.getTypedRowWrapper(Port.class, portRow);
- if (port.getName().equals(portIdentifier)) break;
- }
- if (port.getName() == null || !port.getName().equals(portIdentifier)) {
- return new Status(StatusCode.NOTFOUND);
- }
- return this.deleteRow(node, port.getSchema().getName(), port.getUuid().toString());
- }
-
- @Override
- @Deprecated
- public Status deleteBridgeDomain(Node node, String bridgeIdentifier) {
- Connection connection = connectionService.getConnection(node);
- OvsdbClient client = connection.getClient();
-
- Bridge bridge = client.getTypedRowWrapper(Bridge.class, null);
- ConcurrentMap<String, Row> rows = this.getRows(node, bridge.getSchema().getName());
- if (rows == null || rows.size() == 0) {
- return new Status(StatusCode.NOTFOUND);
- }
- for (String bridgeUuid : rows.keySet()) {
- Row bridgeRow = rows.get(bridgeUuid);
- bridge = client.getTypedRowWrapper(Bridge.class, bridgeRow);
- if (bridge.getName().equals(bridgeIdentifier)) break;
- }
- if (bridge.getName() == null || !bridge.getName().equals(bridgeIdentifier)) {
- return new Status(StatusCode.NOTFOUND);
- }
- return this.deleteRow(node, bridge.getSchema().getName(), bridge.getUuid().toString());
- }
-
- @Override
- public List<String> getBridgeDomains(Node node) {
- if (connectionService == null) {
- logger.error("Couldn't refer to the ConnectionService");
- return null;
- }
-
- Connection connection = connectionService.getConnection(node);
- Bridge bridge = connection.getClient().getTypedRowWrapper(Bridge.class, null);
- List<String> brlist = new ArrayList<String>();
- Map<String, Row> brTableCache = ovsdbInventoryService.getTableCache(node, OvsVswitchdSchemaConstants.DATABASE_NAME, bridge.getSchema().getName());
- if(brTableCache != null){
- for (String uuid : brTableCache.keySet()) {
- bridge = connection.getClient().getTypedRowWrapper(Bridge.class, brTableCache.get(uuid));
- brlist.add(bridge.getName());
- }
- }
- return brlist;
- }
-
- @Override
- public NodeConnector getNodeConnector(Node arg0, String arg1, String arg2) {
- return null;
- }
-
- @Override
- @Deprecated
- public Status addPortConfig(Node node, String bridgeIdentifier, String portIdentifier,
- Map<ConfigConstants, Object> configs) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- @Deprecated
- public Node getBridgeDomainNode(Node node, String bridgeIdentifier) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- @Deprecated
- public Map<ConfigConstants, Object> getPortConfigs(Node node, String bridgeIdentifier,
- String portIdentifier) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- @Deprecated
- public Status removeBridgeDomainConfig(Node node, String bridgeIdentifier,
- Map<ConfigConstants, Object> configs) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- @Deprecated
- public Status removePortConfig(Node node, String bridgeIdentifier, String portIdentifier,
- Map<ConfigConstants, Object> configs) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- @Deprecated
- public Map<ConfigConstants, Object> getBridgeDomainConfigs(Node node, String bridgeIdentifier) {
- // TODO Auto-generated method stub
- return null;
- }
-
-