+++ /dev/null
-/*
- * Copyright (C) 2013 Red Hat, Inc.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Authors : Madhu Venugopal, Brent Salisbury, Keith Burns
- */
-package org.opendaylight.ovsdb.plugin;
-
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentMap;
-
-import org.eclipse.osgi.framework.console.CommandInterpreter;
-import org.eclipse.osgi.framework.console.CommandProvider;
-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.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;
-import org.opendaylight.ovsdb.lib.operations.DeleteOperation;
-import org.opendaylight.ovsdb.lib.operations.InsertOperation;
-import org.opendaylight.ovsdb.lib.operations.MutateOperation;
-import org.opendaylight.ovsdb.lib.operations.Operation;
-import org.opendaylight.ovsdb.lib.operations.OperationResult;
-import org.opendaylight.ovsdb.lib.operations.UpdateOperation;
-import org.opendaylight.ovsdb.lib.notation.Condition;
-import org.opendaylight.ovsdb.lib.notation.Function;
-import org.opendaylight.ovsdb.lib.notation.Mutation;
-import org.opendaylight.ovsdb.lib.notation.Mutator;
-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.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.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.util.concurrent.ListenableFuture;
-
-public class ConfigurationService implements IPluginInBridgeDomainConfigService, OVSDBConfigService,
- CommandProvider
-{
- private static final Logger logger = LoggerFactory
- .getLogger(ConfigurationService.class);
-
- IConnectionServiceInternal connectionService;
- InventoryServiceInternal inventoryServiceInternal;
- boolean forceConnect = false;
-
- void init() {
- }
-
- /**
- * Function called by the dependency manager when at least one dependency
- * become unsatisfied or when the component is shutting down because for
- * example bundle is being stopped.
- *
- */
- void destroy() {
- }
-
- /**
- * Function called by dependency manager after "init ()" is called and after
- * the services provided by the class are registered in the service registry
- *
- */
- void start() {
- registerWithOSGIConsole();
- }
-
- private void registerWithOSGIConsole() {
- BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass())
- .getBundleContext();
- bundleContext.registerService(CommandProvider.class.getName(), this,
- null);
- }
-
- /**
- * Function called by the dependency manager before the services exported by
- * the component are unregistered, this will be followed by a "destroy ()"
- * calls
- *
- */
- void stop() {
- }
-
- public void setConnectionServiceInternal(IConnectionServiceInternal connectionService) {
- this.connectionService = connectionService;
- }
-
- public void unsetConnectionServiceInternal(IConnectionServiceInternal connectionService) {
- if (this.connectionService == connectionService) {
- this.connectionService = null;
- }
- }
-
- public void setInventoryServiceInternal(InventoryServiceInternal inventoryServiceInternal) {
- this.inventoryServiceInternal = inventoryServiceInternal;
- }
-
- public void unsetInventoryServiceInternal(InventoryServiceInternal inventoryServiceInternal) {
- if (this.inventoryServiceInternal == inventoryServiceInternal) {
- this.inventoryServiceInternal = null;
- }
- }
-
- private Connection getConnection (Node node) {
- Connection connection = connectionService.getConnection(node);
- if (connection == null || !connection.getChannel().isActive()) {
- return null;
- }
-
- return connection;
- }
-
- /**
- * Add a new bridge
- * @param node Node serving this configuration service
- * @param bridgeIdentifier String representation of a Bridge Connector
- * @return Bridge Connector configurations
- */
- @Override
- public Status createBridgeDomain(Node node, String bridgeIdentifier,
- Map<ConfigConstants, Object> configs) {
- 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<String, Table<?>> ovsTable = inventoryServiceInternal.getTableCache(node, Open_vSwitch.NAME.getName());
- String newBridge = "new_bridge";
- String newInterface = "new_interface";
- String newPort = "new_port";
- String newSwitch = "new_switch";
-
- Operation addSwitchRequest = null;
-
- if(ovsTable != null){
- String ovsTableUUID = (String) ovsTable.keySet().toArray()[0];
- UUID bridgeUuidPair = new UUID(newBridge);
- Mutation bm = new Mutation("bridges", Mutator.INSERT, bridgeUuidPair);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(ovsTableUUID);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- addSwitchRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations);
- }
- else{
- Open_vSwitch ovsTableRow = new Open_vSwitch();
- OvsDBSet<UUID> bridges = new OvsDBSet<UUID>();
- UUID bridgeUuidPair = new UUID(newBridge);
- bridges.add(bridgeUuidPair);
- ovsTableRow.setBridges(bridges);
- addSwitchRequest = new InsertOperation(Open_vSwitch.NAME.getName(), newSwitch, ovsTableRow);
- }
-
- Bridge bridgeRow = new Bridge();
- bridgeRow.setName(bridgeIdentifier);
- OvsDBSet<UUID> ports = new OvsDBSet<UUID>();
- UUID port = new UUID(newPort);
- ports.add(port);
- bridgeRow.setPorts(ports);
- InsertOperation addBridgeRequest = new InsertOperation(Bridge.NAME.getName(), newBridge, bridgeRow);
-
- Port portRow = new Port();
- portRow.setName(bridgeIdentifier);
- OvsDBSet<UUID> interfaces = new OvsDBSet<UUID>();
- UUID interfaceid = new UUID(newInterface);
- interfaces.add(interfaceid);
- portRow.setInterfaces(interfaces);
- InsertOperation addPortRequest = new InsertOperation(Port.NAME.getName(), newPort, portRow);
-
- Interface interfaceRow = new Interface();
- interfaceRow.setName(bridgeIdentifier);
- 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<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(ovsTableUUID);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- MutateOperation updateCfgVerRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(
- Arrays.asList(addSwitchRequest,
- addIntfRequest,
- addPortRequest,
- addBridgeRequest,
- updateCfgVerRequest)));
-
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
- List<OperationResult> tr = transResponse.get();
- List<Operation> 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());
- }
- if (status.isSuccess()) {
- setBridgeOFController(node, bridgeIdentifier);
- }
- return status;
- } catch(Exception e){
- logger.error("Error in createBridgeDomain(): ",e);
- }
- return new Status(StatusCode.INTERNALERROR);
- }
-
- /**
- * 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 portIdentifier String representation of a user defined Port Name
- */
- @Override
- public Status addPort(Node node, String bridgeIdentifier, String portIdentifier,
- Map<ConfigConstants, Object> configs) {
- 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");
- }
- if (connection != null) {
- Map<String, Table<?>> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName());
- String newBridge = "new_bridge";
- String newInterface = "new_interface";
- String newPort = "new_port";
-
- if(brTable != null){
- Operation addBrMutRequest = null;
- String brUuid = null;
- for (String uuid : brTable.keySet()) {
- Bridge bridge = (Bridge) brTable.get(uuid);
- if (bridge.getName().contains(bridgeIdentifier)) {
- brUuid = uuid;
- }
- }
-
- UUID brUuidPair = new UUID(newPort);
- Mutation bm = new Mutation("ports", Mutator.INSERT, brUuidPair);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(brUuid);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- addBrMutRequest = new MutateOperation(Bridge.NAME.getName(), where, mutations);
-
- OvsDBMap<String, String> options = null;
- String type = null;
- OvsDBSet<BigInteger> 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 OvsDBMap<String, String>();
- for (String customConfig : customConfigs.keySet()) {
- options.put(customConfig, customConfigs.get(customConfig));
- }
- }
- }
-
- Interface interfaceRow = new Interface();
- interfaceRow.setName(portIdentifier);
-
- if (type != null) {
- if (type.equalsIgnoreCase(OvsdbType.PortType.TUNNEL.name())) {
- interfaceRow.setType((String)configs.get(ConfigConstants.TUNNEL_TYPE));
- if (options == null) options = new OvsDBMap<String, String>();
- options.put("remote_ip", (String)configs.get(ConfigConstants.DEST_IP));
- } else if (type.equalsIgnoreCase(OvsdbType.PortType.VLAN.name())) {
- tags = new OvsDBSet<BigInteger>();
- tags.add(BigInteger.valueOf(Integer.parseInt((String)configs.get(ConfigConstants.VLAN))));
- } else if (type.equalsIgnoreCase(OvsdbType.PortType.PATCH.name())) {
- interfaceRow.setType(type.toLowerCase());
- }
- }
- if (options != null) {
- interfaceRow.setOptions(options);
- }
-
- InsertOperation addIntfRequest = new InsertOperation(Interface.NAME.getName(),
- newInterface, interfaceRow);
-
- Port portRow = new Port();
- portRow.setName(portIdentifier);
- if (tags != null) portRow.setTag(tags);
- OvsDBSet<UUID> interfaces = new OvsDBSet<UUID>();
- 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<Operation>
- (Arrays.asList(addBrMutRequest, addPortRequest, addIntfRequest)));
-
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
- List<OperationResult> tr = transResponse.get();
- List<Operation> 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).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;
- }
- return new Status(StatusCode.INTERNALERROR);
- }
- } catch(Exception e){
- logger.error("Error in addPort()",e);
- }
- return new Status(StatusCode.INTERNALERROR);
- }
-
- /**
- * Implements the OVS Connection for Managers
- *
- * @param node Node serving this configuration service
- * @param managerip with IP and connection types
- */
- @SuppressWarnings("unchecked")
- public boolean setManager(Node node, String managerip) {
- try{
- if (connectionService == null) {
- logger.error("Couldn't refer to the ConnectionService");
- return false;
- }
- Connection connection = this.getConnection(node);
- if (connection == null) {
- return false;
- }
-
- if (connection != null) {
- String newmanager = "new_manager";
-
- OVSInstance instance = OVSInstance.monitorOVS(connection);
-
- Map ovsoutter = new LinkedHashMap();
- Map ovsinner = new LinkedHashMap();
- ArrayList ovsalist1 = new ArrayList();
- ArrayList ovsalist2 = new ArrayList();
- ArrayList ovsalist3 = new ArrayList();
- ArrayList ovsalist4 = new ArrayList();
-
- //OVS Table Update
- ovsoutter.put("where", ovsalist1);
- ovsalist1.add(ovsalist2);
- ovsalist2.add("_uuid");
- ovsalist2.add("==");
- ovsalist2.add(ovsalist3);
- ovsalist3.add("uuid");
- ovsalist3.add(instance.getUuid());
- ovsoutter.put("op", "update");
- ovsoutter.put("table", "Open_vSwitch");
- ovsoutter.put("row", ovsinner);
- ovsinner.put("manager_options", ovsalist4);
- ovsalist4.add("named-uuid");
- ovsalist4.add(newmanager);
-
- Map mgroutside = new LinkedHashMap();
- Map mgrinside = new LinkedHashMap();
-
- //Manager Table Insert
- mgroutside.put("uuid-name", newmanager);
- mgroutside.put("op", "insert");
- mgroutside.put("table","Manager");
- mgroutside.put("row", mgrinside);
- mgrinside.put("target", managerip);
-
- Object[] params = {"Open_vSwitch", ovsoutter, mgroutside};
- OvsdbMessage msg = new OvsdbMessage("transact", params);
-
- //connection.sendMessage(msg);
-
- }
- }catch(Exception e){
- logger.error("Error in setManager(): ",e);
- }
- return true;
- }
-
- @Override
- 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
- public Status addPortConfig(Node node, String bridgeIdentifier, String portIdentifier,
- Map<ConfigConstants, Object> configs) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @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);
- }
-
- Connection connection = this.getConnection(node);
- if (connection == null) {
- return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available");
- }
-
- Map<String, Table<?>> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName());
- Map<String, Table<?>> 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);
- if (port.getName().contains(portIdentifier)) {
- portUuid = uuid;
- }
- }
- }
-
- UUID portUuidPair = new UUID(portUuid);
- Mutation bm = new Mutation("ports", Mutator.DELETE, portUuidPair);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(brUuid);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- delPortRequest = new MutateOperation(Bridge.NAME.getName(), where, mutations);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(delPortRequest)));
-
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
- List<OperationResult> tr = transResponse.get();
- List<Operation> 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).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){
- logger.error("Error in deletePort()",e);
- }
- return new Status(StatusCode.INTERNALERROR);
- }
-
- @Override
- public Node getBridgeDomainNode(Node node, String bridgeIdentifier) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Map<ConfigConstants, Object> getPortConfigs(Node node, String bridgeIdentifier,
- String portIdentifier) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Status removeBridgeDomainConfig(Node node, String bridgeIdentifier,
- Map<ConfigConstants, Object> configs) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Status removePortConfig(Node node, String bridgeIdentifier, String portIdentifier,
- Map<ConfigConstants, Object> configs) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Status deleteBridgeDomain(Node node, String bridgeIdentifier) {
-
- 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<String, Table<?>> ovsTable = inventoryServiceInternal.getTableCache(node, Open_vSwitch.NAME.getName());
- Map<String, Table<?>> 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<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(ovsUuid);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- delBrRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(delBrRequest)));
-
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
- List<OperationResult> tr = transResponse.get();
- List<Operation> 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 deleting Bridge : {}\n Error : {}\n Details : {}",
- bridgeIdentifier, result.getError(), result.getDetails());
- status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails());
- }
- return status;
- } catch (Exception e) {
- logger.error("Error in deleteBridgeDomain(): ",e);
- }
- return new Status(StatusCode.INTERNALERROR);
- }
-
- @Override
- public Map<ConfigConstants, Object> getBridgeDomainConfigs(Node node, String bridgeIdentifier) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public List<String> getBridgeDomains(Node node) {
- List<String> brlist = new ArrayList<String>();
- Map<String, Table<?>> brTableCache = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName());
- if(brTableCache != null){
- for (String uuid : brTableCache.keySet()) {
- Bridge bridge = (Bridge) brTableCache.get(uuid);
- brlist.add(bridge.getName());
- }
- }
- return brlist;
- }
-
- @Override
- public NodeConnector getNodeConnector(Node arg0, String arg1, String arg2) {
- return null;
- }
-
- Boolean setBridgeOFController(Node node, String bridgeIdentifier) {
- if (connectionService == null) {
- logger.error("Couldn't refer to the ConnectionService");
- return false;
- }
-
- try{
- Map<String, Table<?>> brTableCache = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName());
- for (String uuid : brTableCache.keySet()) {
- Bridge bridge = (Bridge)brTableCache.get(uuid);
- if (bridge.getName().contains(bridgeIdentifier)) {
- return connectionService.setOFController(node, uuid);
- }
- }
- } catch(Exception e) {
- logger.error("Error in setBridgeOFController()",e);
- }
- return false;
- }
-
- @Override
- public StatusWithUuid insertRow(Node node, String tableName, String parent_uuid, Table<?> row) {
- logger.debug("tableName : {}, parent_uuid : {} Row : {}", tableName, parent_uuid, row.toString());
- StatusWithUuid 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("Capability")) {
- return new StatusWithUuid(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet.");
- }
- 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;
- }
-
-
- @Override
- public Status updateRow (Node node, String tableName, String parentUUID, String rowUUID, Table<?> row) {
- 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<String, Table<?>> 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");
- }
-
- UUID uuid = new UUID(rowUUID);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- Operation updateRequest = new UpdateOperation(tableName, where, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(
- Arrays.asList(updateRequest)));
-
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
- List<OperationResult> tr = transResponse.get();
- List<Operation> 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 Updating Row : {}/{}\n Error : {}\n Details : {}", tableName, row,
- result.getError(),
- result.getDetails());
- status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails());
- }
- if (status.isSuccess()) {
- status = new Status(StatusCode.SUCCESS);
- }
- return status;
- } catch(Exception e){
- logger.error("Error in updateRow(): ",e);
- }
- return new Status(StatusCode.INTERNALERROR);
- }
-
- @Override
- public Status deleteRow(Node node, String tableName, String uuid) {
- if (tableName.equalsIgnoreCase("Bridge")) {
- return deleteBridgeRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("Capbility")) {
- return new Status(StatusCode.NOTIMPLEMENTED, "Delete operation for this Table is not implemented yet.");
- }
- else if (tableName.equalsIgnoreCase("Controller")) {
- return deleteControllerRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("Interface")) {
- return deleteInterfaceRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("Manager")) {
- return deleteManagerRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("Mirror")) {
- return deleteMirrorRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("NetFlow")) {
- return deleteNetFlowRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("Open_vSwitch")) {
- return deleteOpen_vSwitchRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("Port")) {
- return deletePortRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("QoS")) {
- return deleteQosRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("Queue")) {
- return deleteQueueRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("sFlow")) {
- return deleteSflowRow(node, uuid);
- }
- else if (tableName.equalsIgnoreCase("SSL")) {
- return deleteSSLRow(node, uuid);
- }
- return new Status(StatusCode.NOTFOUND, "Table "+tableName+" not supported");
- }
-
- @Override
- public ConcurrentMap<String, Table<?>> getRows(Node node, String tableName) throws Exception{
- try{
- if (inventoryServiceInternal == null) {
- throw new Exception("Inventory Service is Unavailable.");
- }
- ConcurrentMap<String, Table<?>> ovsTable = inventoryServiceInternal.getTableCache(node, tableName);
- return ovsTable;
- } catch(Exception e){
- throw new Exception("Unable to read table due to "+e.getMessage());
- }
- }
-
- @Override
- public Table<?> getRow(Node node, String tableName, String uuid) throws Exception {
- try{
- if (inventoryServiceInternal == null) {
- throw new Exception("Inventory Service is Unavailable.");
- }
- Map<String, Table<?>> ovsTable = inventoryServiceInternal.getTableCache(node, tableName);
- if (ovsTable == null) return null;
- return ovsTable.get(uuid);
- } catch(Exception e){
- throw new Exception("Unable to read table due to "+e.getMessage());
- }
- }
-
- @Override
- public String getSerializedRows(Node node, String tableName) throws Exception{
- try{
- Map<String, Table<?>> ovsTable = this.getRows(node, tableName);
- if (ovsTable == null) return null;
- ObjectMapper mapper = new ObjectMapper();
- return mapper.writeValueAsString(ovsTable);
- } catch(Exception e){
- throw new Exception("Unable to read table due to "+e.getMessage());
- }
- }
-
- @Override
- public String getSerializedRow(Node node, String tableName, String uuid) throws Exception {
- try{
- Table<?> row = this.getRow(node, tableName, uuid);
- if (row == null) return null;
- ObjectMapper mapper = new ObjectMapper();
- return mapper.writeValueAsString(row);
- } catch(Exception e){
- throw new Exception("Unable to read table due to "+e.getMessage());
- }
- }
-
- @Override
- public List<String> getTables(Node node) {
- ConcurrentMap<String, ConcurrentMap<String, Table<?>>> cache = inventoryServiceInternal.getCache(node);
- if (cache == null) return null;
- return new ArrayList<String>(cache.keySet());
- }
-
- private StatusWithUuid insertBridgeRow(Node node, String open_VSwitch_uuid, Bridge bridgeRow) {
-
- String insertErrorMsg = "bridge";
- String rowName=bridgeRow.getName();
-
- try{
- Map<String, Table<?>> ovsTable = inventoryServiceInternal.getTableCache(node, Open_vSwitch.NAME.getName());
-
- if (ovsTable == null) {
- return new StatusWithUuid(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 bridgeUuid = new UUID(newBridge);
- Mutation bm = new Mutation("bridges", Mutator.INSERT, bridgeUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(ovsTableUUID);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- 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<Operation>(
- Arrays.asList(addSwitchRequest,
- addBridgeRequest)));
-
- int bridgeInsertIndex = transaction.getRequests().indexOf(addBridgeRequest);
-
- return _insertTableRow(node,transaction,bridgeInsertIndex,insertErrorMsg,rowName);
-
- } catch(Exception e){
- logger.error("Error in insertBridgeRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
-
- private StatusWithUuid insertPortRow(Node node, String bridge_uuid, Port portRow) {
-
- String insertErrorMsg = "port";
- String rowName=portRow.getName();
-
- try{
- Map<String, Table<?>> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName());
- if (brTable == null || brTable.get(bridge_uuid) == null) {
- return new StatusWithUuid(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<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(bridge_uuid);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- 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<UUID> interfaces = new OvsDBSet<UUID>();
- 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<Operation>
- (Arrays.asList(addBrMutRequest, addPortRequest, addIntfRequest)));
- int portInsertIndex = transaction.getRequests().indexOf(addPortRequest);
-
- return _insertTableRow(node,transaction,portInsertIndex,insertErrorMsg,rowName);
-
- } catch (Exception e) {
- logger.error("Error in insertPortRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid insertInterfaceRow(Node node, String port_uuid, Interface interfaceRow) {
-
- String insertErrorMsg = "interface";
- String rowName=interfaceRow.getName();
-
- try{
-
- // Interface table must have entry in Port table, checking port table for port
- Map<String, Table<?>> portTable = inventoryServiceInternal.getTableCache(node, Port.NAME.getName());
- if (portTable == null || portTable.get(port_uuid) == null) {
- return new StatusWithUuid(StatusCode.NOTFOUND, "Port with UUID "+port_uuid+" Not found");
- }
- // MUTATOR, need to insert the interface UUID to LIST of interfaces in PORT TABLE for port_uuid
- String newInterface = "new_interface";
- UUID interfaceUUID = new UUID(newInterface);
- Mutation portTableMutation = new Mutation("interfaces", Mutator.INSERT, interfaceUUID); // field name to append is "interfaces"
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(portTableMutation);
-
- // Create the Operation which will be used in Transact to perform the PORT TABLE mutation
- UUID uuid = new UUID(port_uuid);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- Operation addPortMutationRequest = new MutateOperation(Port.NAME.getName(), where, mutations);
-
- // Create the interface row request
- InsertOperation addIntfRequest = new InsertOperation(Interface.NAME.getName(),newInterface, interfaceRow);
-
- // Transaction to insert/modify tables - validate using "sudo ovsdb-client dump" on host running OVSDB process
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(addIntfRequest,addPortMutationRequest)));
-
- // Check the results. Iterates over the results of the Array of transaction Operations, and reports STATUS
- int interfaceInsertIndex = transaction.getRequests().indexOf(addIntfRequest);
-
- return _insertTableRow(node,transaction,interfaceInsertIndex,insertErrorMsg,rowName);
-
- } catch (Exception e) {
- logger.error("Error in insertInterfaceRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid insertOpen_vSwitchRow(Node node, Open_vSwitch row) {
- return new StatusWithUuid(StatusCode.NOTIMPLEMENTED, "Insert operation for this Table is not implemented yet.");
- }
-
- private StatusWithUuid insertControllerRow(Node node, String bridge_uuid, Controller row) {
-
- String insertErrorMsg = "controller";
- String rowName=row.getTableName().toString();
-
- try{
-
- Map<String, Table<?>> brTable = inventoryServiceInternal.getTableCache(node, Bridge.NAME.getName());
- if (brTable == null || brTable.get(bridge_uuid) == null) {
- return new StatusWithUuid(StatusCode.NOTFOUND, "Bridge with UUID "+bridge_uuid+" Not found");
- }
-
- Map<String, Table<?>> controllerCache = inventoryServiceInternal.getTableCache(node, Controller.NAME.getName());
-
- String uuid_name = "new_controller";
- boolean controllerExists = false;
- if (controllerCache != null) {
- for (String uuid : controllerCache.keySet()) {
- Controller controller = (Controller)controllerCache.get(uuid);
- if (controller.getTarget().equals(row.getTarget())) {
- uuid_name = uuid;
- controllerExists = true;
- break;
- }
- }
- }
-
- UUID controllerUUID = new UUID(uuid_name);
- Mutation bm = new Mutation("controller", Mutator.INSERT, controllerUUID);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(bm);
-
- UUID uuid = new UUID(bridge_uuid);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- Operation addBrMutRequest = new MutateOperation(Bridge.NAME.getName(), where, mutations);
- InsertOperation addControllerRequest = null;
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperation(addBrMutRequest);
- int portInsertIndex = -1;
- if (!controllerExists) {
- addControllerRequest = new InsertOperation(Controller.NAME.getName(), uuid_name, row);
- transaction.addOperation(addControllerRequest);
- portInsertIndex = transaction.getRequests().indexOf(addControllerRequest);
- }
-
- StatusWithUuid status = _insertTableRow(node,transaction,portInsertIndex,insertErrorMsg,rowName);
- if (status.isSuccess() && controllerExists) {
- // We won't get the uuid from the transact, so we set it here
- status = new StatusWithUuid(status.getCode(), controllerUUID);
- }
- return status;
-
- } catch (Exception e) {
- logger.error("Error in insertControllerRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid insertSSLRow(Node node, String parent_uuid, SSL row) {
- String insertErrorMsg = "SSL";
- String rowName=row.NAME.getName();
-
- try{
- Map<String, Table<?>> ovsTable = inventoryServiceInternal.getTableCache(node, Open_vSwitch.NAME.getName());
-
- if (ovsTable == null) {
- return new StatusWithUuid(StatusCode.NOTFOUND, "There are no Open_vSwitch instance in the Open_vSwitch table");
- }
-
- String newSSL = "new_SSL";
-
- Operation addOpen_vSwitchRequest = null;
-
- String ovsTableUUID = parent_uuid;
- if (ovsTableUUID == null) ovsTableUUID = (String) ovsTable.keySet().toArray()[0];
- UUID sslUuid = new UUID(newSSL);
- Mutation sslMutation = new Mutation("ssl", Mutator.INSERT, sslUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(sslMutation);
-
- UUID uuid = new UUID(ovsTableUUID);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- addOpen_vSwitchRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations);
-
- InsertOperation addSSLRequest = new InsertOperation(SSL.NAME.getName(), newSSL, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(
- Arrays.asList(addSSLRequest,
- addOpen_vSwitchRequest)));
-
- int sslInsertIndex = transaction.getRequests().indexOf(addSSLRequest);
-
- return _insertTableRow(node,transaction,sslInsertIndex,insertErrorMsg,rowName);
-
- } catch(Exception e){
- logger.error("Error in insertSSLRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid insertSflowRow(Node node, String parent_uuid, SFlow row) {
-
- String insertErrorMsg = "sFlow";
- 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 newSflow = "new_sflow";
-
- Operation addBridgeRequest = null;
-
- UUID sflowUuid = new UUID(newSflow);
- Mutation sflowMutation = new Mutation("sflow", Mutator.INSERT, sflowUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(sflowMutation);
-
- 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 addSflowRequest = new InsertOperation(SFlow.NAME.getName(), newSflow, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(
- Arrays.asList(addSflowRequest,
- addBridgeRequest)));
-
- int sflowInsertIndex = transaction.getRequests().indexOf(addSflowRequest);
-
-
- return _insertTableRow(node,transaction,sflowInsertIndex,insertErrorMsg,rowName);
-
- } catch (Exception e) {
- logger.error("Error in insertInterfaceRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid insertQueueRow(Node node, String parent_uuid, Queue row) {
- String insertErrorMsg = "Queue";
- String rowName=row.NAME.getName();
-
- try{
- Map<String, Table<?>> qosTable = inventoryServiceInternal.getTableCache(node, Qos.NAME.getName());
- if (qosTable == null || qosTable.get(parent_uuid) == null) {
- return new StatusWithUuid(StatusCode.NOTFOUND, "QoS with UUID "+parent_uuid+" Not found");
- }
-
- if (parent_uuid == null) {
- return new StatusWithUuid(StatusCode.BADREQUEST, "Require parent QoS UUID.");
- }
-
- // NOTE: Queue Table is "isroot" meaning it can have a hanging reference. This is different from
- // standing insertRow due to the parent column type being a map, where one of the items may not be known
- // at time of insert. Therefore this is a simple insert, rather than mutate/insert.
- String newQueue = "new_queue";
- InsertOperation addQueueRequest = new InsertOperation(Queue.NAME.getName(), newQueue, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(addQueueRequest)));
-
- int queueInsertIndex = transaction.getRequests().indexOf(addQueueRequest);
-
- return _insertTableRow(node,transaction,queueInsertIndex,insertErrorMsg,rowName);
-
- } catch (Exception e) {
- logger.error("Error in insertQueueRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR); }
-
- private StatusWithUuid insertQosRow(Node node, String parent_uuid, Qos row) {
- String insertErrorMsg = "Qos";
- String rowName=row.NAME.getName();
-
- try{
-
- String newQos = "new_qos";
-
- // QoS Table "isroot" meaning it can have hanging references. If parent_uuid is not supplied in API call this becomes a simple
- // insert operation, rather than the typical mutate/insert parent/child insert.
- if (parent_uuid != null) {
- // Port (parent) table check for UUID existance.
- Map<String, Table<?>> portTable = inventoryServiceInternal.getTableCache(node, Port.NAME.getName());
- if (portTable == null || portTable.get(parent_uuid) == null) {
- return new StatusWithUuid(StatusCode.NOTFOUND, "Port with UUID "+parent_uuid+" Not found");
- }
-
- UUID qosUuid = new UUID(newQos);
- Mutation qosMutation = new Mutation("qos", Mutator.INSERT, qosUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(qosMutation);
-
- Operation addPortRequest = null;
- UUID uuid = new UUID(parent_uuid);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- addPortRequest = new MutateOperation(Port.NAME.getName(), where, mutations);
-
- InsertOperation addQosRequest = new InsertOperation(Qos.NAME.getName(), newQos, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(addQosRequest,addPortRequest)));
-
- int qosInsertIndex = transaction.getRequests().indexOf(addQosRequest);
-
- return _insertTableRow(node,transaction,qosInsertIndex,insertErrorMsg,rowName);
-
- } else {
- InsertOperation addQosRequest = new InsertOperation(Qos.NAME.getName(), newQos, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(addQosRequest)));
-
- int qosInsertIndex = transaction.getRequests().indexOf(addQosRequest);
-
- return _insertTableRow(node,transaction,qosInsertIndex,insertErrorMsg,rowName);
- }
-
- } catch (Exception e) {
- logger.error("Error in insertQosRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
-
- private StatusWithUuid insertNetFlowRow(Node node, String parent_uuid, NetFlow row) {
- String insertErrorMsg = "netFlow";
- 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 newNetflow = "new_netflow";
-
- Operation addBridgeRequest = null;
-
- UUID netFlowUuid = new UUID(newNetflow);
- Mutation netFlowMutation = new Mutation("netflow", Mutator.INSERT, netFlowUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(netFlowMutation);
-
- 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 addNetflowRequest = new InsertOperation(NetFlow.NAME.getName(), newNetflow, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(
- Arrays.asList(addNetflowRequest,
- addBridgeRequest)));
-
- int netflowInsertIndex = transaction.getRequests().indexOf(addNetflowRequest);
-
-
- return _insertTableRow(node,transaction,netflowInsertIndex,insertErrorMsg,rowName);
-
- } catch (Exception e) {
- logger.error("Error in insertNetFlowRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid insertMirrorRow(Node node, String parent_uuid, Mirror row) {
- String insertErrorMsg = "mirror";
- 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 newMirror = "new_mirror";
-
- Operation addBridgeRequest = null;
-
- UUID mirrorUuid = new UUID(newMirror);
- Mutation mirrorMutation = new Mutation("mirrors", Mutator.INSERT, mirrorUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(mirrorMutation);
-
- 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 addMirrorRequest = new InsertOperation(Mirror.NAME.getName(), newMirror, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(
- Arrays.asList(addBridgeRequest, addMirrorRequest)));
-
- int mirrorInsertIndex = transaction.getRequests().indexOf(addMirrorRequest);
-
- return _insertTableRow(node,transaction,mirrorInsertIndex,insertErrorMsg,rowName);
-
- } catch (Exception e) {
- logger.error("Error in insertMirrorRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid insertManagerRow(Node node, String parent_uuid, Manager row) {
- String insertErrorMsg = "manager";
- String rowName=row.NAME.getName();
-
- try{
- Map<String, Table<?>> ovsTable = inventoryServiceInternal.getTableCache(node, Open_vSwitch.NAME.getName());
-
- if (ovsTable == null) {
- return new StatusWithUuid(StatusCode.NOTFOUND, "There are no Open_vSwitch instance in the Open_vSwitch table");
- }
-
- String newManager = "new_manager";
-
- Operation addSwitchRequest = null;
-
- String ovsTableUUID = parent_uuid;
- if (ovsTableUUID == null) ovsTableUUID = (String) ovsTable.keySet().toArray()[0];
- UUID managerUuid = new UUID(newManager);
- Mutation managerMutation = new Mutation("manager_options", Mutator.INSERT, managerUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(managerMutation);
-
- UUID uuid = new UUID(ovsTableUUID);
- Condition condition = new Condition("_uuid", Function.EQUALS, uuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- addSwitchRequest = new MutateOperation(Open_vSwitch.NAME.getName(), where, mutations);
-
- InsertOperation addManagerRequest = new InsertOperation(Manager.NAME.getName(), newManager, row);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(
- Arrays.asList(addSwitchRequest,
- addManagerRequest)));
-
- int managerInsertIndex = transaction.getRequests().indexOf(addManagerRequest);
-
- return _insertTableRow(node,transaction,managerInsertIndex,insertErrorMsg,rowName);
-
- } catch(Exception e){
- logger.error("Error in insertManagerRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
- private StatusWithUuid _insertTableRow(Node node, TransactBuilder transaction, Integer insertIndex, String insertErrorMsg,String rowName){
-
- try{
- //Check for connection before calling RPC to perform transaction
- if (connectionService == null) {
- logger.error("Couldn't refer to the ConnectionService");
- return new StatusWithUuid(StatusCode.NOSERVICE);
- }
-
- Connection connection = this.getConnection(node);
- if (connection == null) {
- return new StatusWithUuid(StatusCode.NOSERVICE, "Connection to ovsdb-server not available");
- }
-
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
- List<OperationResult> tr = transResponse.get();
- List<Operation> requests = transaction.getRequests();
- StatusWithUuid status = new StatusWithUuid(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 StatusWithUuid(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails());
- }
- }
-
- if (tr.size() > requests.size()) {
- OperationResult result = tr.get(tr.size()-1);
- logger.error("Error creating {} : {}\n Error : {}\n Details : {}", insertErrorMsg,
- rowName,
- result.getError(),
- result.getDetails());
- status = new StatusWithUuid(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails());
- }
- if (status.isSuccess()) {
- if (insertIndex >= 0 && insertIndex < tr.size() && tr.get(insertIndex) != null) {
- UUID uuid = tr.get(insertIndex).getUuid();
- status = new StatusWithUuid(StatusCode.SUCCESS, uuid);
- } else {
- // We can't get the uuid from the transact as the insertIndex is invalid or -1
- // return null uuid.
- status = new StatusWithUuid(StatusCode.SUCCESS, (UUID) null);
- }
- }
- return status;
- } catch(Exception e){
- logger.error("Error in _insertTableRow(): ",e);
- }
- return new StatusWithUuid(StatusCode.INTERNALERROR);
- }
-
-
- private Status deleteBridgeRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Open_vSwitch.NAME.getName();
- String childTableName=Bridge.NAME.getName();
- String parentColumn = "bridges";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deletePortRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Bridge.NAME.getName();
- String childTableName=Port.NAME.getName();
- String parentColumn = "ports";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deleteInterfaceRow(Node node, String uuid) {
- // Since Port<-Interface tables have a 1:n relationship, need to test if this is the last interface
- // assigned to a port before attempting delete.
- Map<String, Table<?>> portTable = inventoryServiceInternal.getTableCache(node, Port.NAME.getName());
- Map<String, Table<?>> interfaceTable = inventoryServiceInternal.getTableCache(node, Interface.NAME.getName());
- // Check that the UUID exists
- if (portTable == null || interfaceTable == null || uuid == null || interfaceTable.get(uuid) == null) {
- return new Status(StatusCode.NOTFOUND, "");
- }
-
- // Since the above past, it's safe to use the generic _deleteTableRow method
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Port.NAME.getName();
- String childTableName=Interface.NAME.getName();
- String parentColumn = "interfaces";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deleteControllerRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Bridge.NAME.getName();
- String childTableName=Controller.NAME.getName();
- String parentColumn = "controller";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deleteOpen_vSwitchRow(Node node, String uuid) {
- return new Status(StatusCode.NOTIMPLEMENTED, "delete operation for this Table is not implemented yet.");
- }
-
- private Status deleteSSLRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Open_vSwitch.NAME.getName();
- String childTableName=SSL.NAME.getName();
- String parentColumn = "ssl";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deleteSflowRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Bridge.NAME.getName();
- String childTableName=SFlow.NAME.getName();
- String parentColumn = "sflow";
-
- 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
- String childTableName=Queue.NAME.getName();
-
- return _deleteRootTableRow(node,uuid,childTableName);
- }
-
- private Status deleteQosRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Port.NAME.getName();
- String childTableName=Qos.NAME.getName();
- String parentColumn = "qos";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deleteNetFlowRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Bridge.NAME.getName();
- String childTableName=NetFlow.NAME.getName();
- String parentColumn = "netflow";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deleteMirrorRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Bridge.NAME.getName();
- String childTableName=Mirror.NAME.getName();
- String parentColumn = "mirrors";
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status deleteManagerRow(Node node, String uuid) {
- // Set up variables for generic _deleteTableRow()
- String parentTableName=Open_vSwitch.NAME.getName();
- String childTableName=Manager.NAME.getName();
- String parentColumn = "manager_options";
-
- return _deleteTableRow(node,uuid,parentTableName,childTableName,parentColumn);
- }
-
- private Status _deleteTableRow(Node node,String uuid,String parentTableName, String childTableName, String parentColumn) {
- try {
- // Check there is a connectionService
- if (connectionService == null) {
- logger.error("Couldn't refer to the ConnectionService");
- return new Status(StatusCode.NOSERVICE);
- }
-
- // Establish the connection
- Connection connection = this.getConnection(node);
- if (connection == null) {
- return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available");
- }
-
- // Remove from Parent and Child
- Map<String, Table<?>> parentTable = inventoryServiceInternal.getTableCache(node, parentTableName);
- Map<String, Table<?>> childTable = inventoryServiceInternal.getTableCache(node, childTableName);
-
- // Check that the UUID exists
- if (parentTable == null || childTable == null || uuid == null || childTable.get(uuid) == null) {
- return new Status(StatusCode.NOTFOUND, "");
- }
-
- // Initialise the actual request var
- Operation delRequest = null;
-
- // Prepare the mutator to remove the child UUID from the parentColumn list in the parent TABLE
- UUID rowUuid = new UUID(uuid);
- Mutation mutator = new Mutation(parentColumn, Mutator.DELETE, rowUuid);
- List<Mutation> mutations = new ArrayList<Mutation>();
- mutations.add(mutator);
-
- Status status = new Status(StatusCode.SUCCESS);
-
- // INCLUDES condition ensures that it captures all rows in the parent table (ie duplicates) that have the child UUID
- Condition condition = new Condition(parentColumn, Function.INCLUDES, rowUuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- delRequest = new MutateOperation(parentTableName, where, mutations);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(delRequest)));
-
- // This executes the transaction.
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
-
- // Pull the responses
- List<OperationResult> tr = transResponse.get();
- List<Operation> requests = transaction.getRequests();
-
- 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 deleting: {}\n Error : {}\n Details : {}",
- uuid, result.getError(), result.getDetails());
- status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails());
- }
- return status;
- } catch (Exception e) {
- logger.error("Error in _deleteTableRow",e);
- }
- return new Status(StatusCode.INTERNALERROR);
- }
-
- private Status _deleteRootTableRow(Node node,String uuid,String TableName) {
- try {
- // Check there is a connectionService
- if (connectionService == null) {
- logger.error("Couldn't refer to the ConnectionService");
- return new Status(StatusCode.NOSERVICE);
- }
-
- // Establish the connection
- Connection connection = this.getConnection(node);
- if (connection == null) {
- return new Status(StatusCode.NOSERVICE, "Connection to ovsdb-server not available");
- }
-
- Map<String, Table<?>> table = inventoryServiceInternal.getTableCache(node, TableName);
-
- // Check that the UUID exists
- if (table == null || table.get(uuid) == null) {
- return new Status(StatusCode.NOTFOUND, "");
- }
-
- // Initialise the actual request var
- Operation delRequest = null;
-
- UUID rowUuid = new UUID(uuid);
-
- Status status = new Status(StatusCode.SUCCESS);
-
- Condition condition = new Condition("_uuid", Function.EQUALS, rowUuid);
- List<Condition> where = new ArrayList<Condition>();
- where.add(condition);
- delRequest = new DeleteOperation(TableName, where);
-
- TransactBuilder transaction = new TransactBuilder();
- transaction.addOperations(new ArrayList<Operation>(Arrays.asList(delRequest)));
-
- // This executes the transaction.
- ListenableFuture<List<OperationResult>> transResponse = connection.getRpc().transact(transaction);
-
- // Pull the responses
- List<OperationResult> tr = transResponse.get();
- List<Operation> requests = transaction.getRequests();
-
- 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 deleting: {}\n Error : {}\n Details : {}",
- uuid, result.getError(), result.getDetails());
- status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails());
- }
- return status;
- } catch (Exception e) {
- logger.error("Error in _deleteRootTableRow",e);
- }
- return new Status(StatusCode.INTERNALERROR);
- }
-
- 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;
- }
- inventoryServiceInternal.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();
- }
-}
-