import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutionException;
-import org.opendaylight.controller.sal.core.Node;
-import org.opendaylight.controller.sal.core.Property;
import org.opendaylight.ovsdb.lib.MonitorCallBack;
import org.opendaylight.ovsdb.lib.OvsdbClient;
import org.opendaylight.ovsdb.lib.OvsdbConnection;
import org.opendaylight.ovsdb.plugin.api.ConnectionConstants;
import org.opendaylight.ovsdb.plugin.api.Status;
import org.opendaylight.ovsdb.plugin.api.StatusCode;
-import org.opendaylight.ovsdb.plugin.internal.IPAddressProperty;
-import org.opendaylight.ovsdb.plugin.internal.L4PortProperty;
import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryService;
import org.opendaylight.ovsdb.utils.config.ConfigProperties;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final String OVSDB_LISTENPORT = "ovsdb.listenPort";
+ public void putOvsdbConnection (String identifier, Connection connection) {
+ ovsdbConnections.put(identifier, connection);
+ }
+
private ConcurrentMap<String, Connection> ovsdbConnections = new ConcurrentHashMap<String, Connection>();
private List<ChannelHandler> handlers = null;
}
public Status disconnect(Node node) {
- String identifier = (String) node.getID();
- Connection connection = ovsdbConnections.get(identifier);
+ Connection connection = getConnection(node);
if (connection != null) {
- ovsdbConnections.remove(identifier);
+ ovsdbConnections.remove(normalizeId(node.getId().getValue()));
connection.disconnect();
ovsdbInventoryService.removeNode(node);
return new Status(StatusCode.SUCCESS);
try {
port = Integer.parseInt(params.get(ConnectionConstants.PORT));
- if (port == 0) port = DEFAULT_OVSDB_PORT;
+ if (port == 0) {
+ port = DEFAULT_OVSDB_PORT;
+ }
} catch (Exception e) {
port = DEFAULT_OVSDB_PORT;
}
this.handlers = handlers;
}
- @Override
- public Connection getConnection(Node node) {
- String identifier = (String) node.getID();
- return ovsdbConnections.get(identifier);
- }
-
- @Override
- public Node getNode (String identifier) {
+ private String normalizeId (String identifier) {
String id = identifier;
- String[] pair = identifier.split("[|,:]+");
+ String[] pair = identifier.split("\\|");
if (pair[0].equals("OVS")) {
id = pair[1];
}
- Connection connection = ovsdbConnections.get(id);
+ return id;
+ }
+
+ @Override
+ public Connection getConnection(Node node) {
+ return ovsdbConnections.get(normalizeId(node.getId().getValue()));
+ }
+
+ @Override
+ public Node getNode (String identifier) {
+ Connection connection = ovsdbConnections.get(normalizeId(identifier));
if (connection != null) {
return connection.getNode();
} else {
OvsdbClient client = connection.getClient();
InetAddress address = client.getConnectionInfo().getRemoteAddress();
int port = client.getConnectionInfo().getRemotePort();
- IPAddressProperty addressProp = new IPAddressProperty(address);
- L4PortProperty l4Port = new L4PortProperty(port);
- Set<Property> props = new HashSet<Property>();
- props.add(addressProp);
- props.add(l4Port);
- logger.info("Add node to ovsdb inventory service {}", connection.getNode().toString());
- ovsdbInventoryService.addNode(connection.getNode(), props);
List<String> databases = client.getDatabases().get();
if (databases == null) {
}
public TableUpdates monitorTables(Node node, DatabaseSchema dbSchema) throws ExecutionException, InterruptedException, IOException {
- String identifier = (String) node.getID();
- Connection connection = ovsdbConnections.get(identifier);
+ Connection connection = getConnection(node);
OvsdbClient client = connection.getClient();
if (dbSchema == null) {
logger.error("Unable to get Database Schema for the ovsdb connection : {}", client.getConnectionInfo());
* As per RFC 7047, section 4.1.5, if a Monitor request is sent without any columns, the update response will not include
* the _uuid column.
* ----------------------------------------------------------------------------------------------------------------------------------
- * Each <monitor-request> specifies one or more columns and the manner in which the columns (or the entire table) are to be monitored.
+ * Each <monitor-request> specifies one or more columns and the manner in which the columns (or the entire table) are to be monitored.
* The "columns" member specifies the columns whose values are monitored. It MUST NOT contain duplicates.
* If "columns" is omitted, all columns in the table, except for "_uuid", are monitored.
* ----------------------------------------------------------------------------------------------------------------------------------
@Override
public void disconnected(OvsdbClient client) {
Connection connection = ovsdbConnections.get(this.getConnectionIdentifier(client));
- if (connection == null) return;
+ if (connection == null) {
+ return;
+ }
this.disconnect(connection.getNode());
}
}