1 package org.opendaylight.ovsdb.internal;
3 import java.net.InetAddress;
6 import org.opendaylight.ovsdb.database.OVSBridge;
7 import org.opendaylight.ovsdb.database.OVSInstance;
8 import org.opendaylight.ovsdb.sal.configuration.IPluginInNetworkConfigurationService;
9 import org.opendaylight.controller.sal.core.Node;
10 import org.opendaylight.controller.sal.core.NodeConnector;
11 import org.opendaylight.ovsdb.database.Uuid;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
15 public class ConfigurationService implements IPluginInNetworkConfigurationService
17 private static final Logger logger = LoggerFactory
18 .getLogger(ConfigurationService.class);
20 IConnectionServiceInternal connectionService;
26 * Function called by the dependency manager when at least one dependency
27 * become unsatisfied or when the component is shutting down because for
28 * example bundle is being stopped.
35 * Function called by dependency manager after "init ()" is called and after
36 * the services provided by the class are registered in the service registry
43 * Function called by the dependency manager before the services exported by
44 * the component are unregistered, this will be followed by a "destroy ()"
51 public void setConnectionServiceInternal(IConnectionServiceInternal connectionService) {
52 this.connectionService = connectionService;
55 public void unsetConnectionServiceInternal(IConnectionServiceInternal connectionService) {
56 if (this.connectionService == connectionService) {
57 this.connectionService = null;
63 * @param node Node serving this configuration service
64 * @param bridgeConnectorIdentifier String representation of a Bridge Connector
65 * @return Bridge Connector configurations
68 @SuppressWarnings("unchecked")
69 public boolean createBridgeDomain(Node node, String bridgeIdentifier) throws Throwable{
71 if (connectionService == null) {
72 logger.error("Couldn't refer to the ConnectionService");
76 Connection connection = connectionService.getConnection(node);
77 String identifier = "TEST";
79 if (connection != null) {
80 String newBridge = "new_bridge";
81 String newInterface = "new_interface";
82 String newPort = "new_port";
83 String newSwitch = "new_switch";
85 Object addSwitchRequest;
87 OVSInstance instance = new OVSInstance();
88 instance.monitorOVS(connection);
90 if(instance.getUuid() != null){
91 List<String> bridgeUuidPair = new ArrayList<String>();
92 bridgeUuidPair.add("named-uuid");
93 bridgeUuidPair.add(newBridge);
95 List<Object> mutation = new ArrayList<Object>();
96 mutation.add("bridges");
97 mutation.add("insert");
98 mutation.add(bridgeUuidPair);
100 List<Object> mutations = new ArrayList<Object>();
101 mutations.add(mutation);
103 List<String> ovsUuidPair = new ArrayList<String>();
104 ovsUuidPair.add("uuid");
105 ovsUuidPair.add(instance.getUuid());
107 List<Object> whereInner = new ArrayList<Object>();
108 whereInner.add("_uuid");
109 whereInner.add("==");
110 whereInner.add(ovsUuidPair);
112 List<Object> where = new ArrayList<Object>();
113 where.add(whereInner);
115 addSwitchRequest = new MutateRequest("Open_vSwitch", where, mutations);
118 Map<String, Object> vswitchRow = new HashMap<String, Object>();
119 ArrayList<String> bridges = new ArrayList<String>();
120 bridges.add("named-uuid");
121 bridges.add(newBridge);
122 vswitchRow.put("bridges", bridges);
123 addSwitchRequest = new InsertRequest("insert", "Open_vSwitch", newSwitch, vswitchRow);
126 Map<String, Object> bridgeRow = new HashMap<String, Object>();
127 bridgeRow.put("name", bridgeIdentifier);
128 ArrayList<String> ports = new ArrayList<String>();
129 ports.add("named-uuid");
131 bridgeRow.put("ports", ports);
132 InsertRequest addBridgeRequest = new InsertRequest("insert", "Bridge", newBridge, bridgeRow);
134 Map<String, Object> portRow = new HashMap<String, Object>();
135 portRow.put("name", bridgeIdentifier);
136 ArrayList<String> interfaces = new ArrayList<String>();
137 interfaces.add("named-uuid");
138 interfaces.add(newInterface);
139 portRow.put("interfaces", interfaces);
140 InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);
142 Map<String, Object> interfaceRow = new HashMap<String, Object>();
143 interfaceRow.put("name", bridgeIdentifier);
144 interfaceRow.put("type", "internal");
145 InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newInterface, interfaceRow);
147 Object[] params = {"Open_vSwitch", addSwitchRequest, addIntfRequest, addPortRequest, addBridgeRequest};
148 OvsdbMessage msg = new OvsdbMessage("transact", params);
150 connection.sendMessage(msg);
151 connection.readResponse(Uuid[].class);
160 public boolean deleteBridgeDomain(Node node, String bridgeIdentifier) {
161 // TODO Auto-generated method stub
166 public List<String> getBridgeDomains(Node node) {
167 // TODO Auto-generated method stub
172 public boolean addBridgeDomainConfig(Node node, String bridgeIdentifier, Map<String, String> config) {
173 // TODO Auto-generated method stub
178 public boolean removeBridgeDomainConfig(Node node, String bridgeIdentifier, Map<String, String> config) {
179 // TODO Auto-generated method stub
184 public Map<String, String> getBridgeDomainConfigs(Node node, String bridgeIdentifier) {
185 // TODO Auto-generated method stub
190 public boolean createBridgeConnector(Node node, String bridgeConnectorIdentifier) {
191 // TODO Auto-generated method stub
196 public boolean deleteBridgeConnector(Node node, String bridgeConnectorIdentifier) {
197 // TODO Auto-generated method stub
202 public boolean associateBridgeConnector(Node node, String bridgeIdentifier, String bridgeConnectorIdentifier) {
203 // TODO Auto-generated method stub
208 public boolean disassociateBridgeConnector(Node node, String bridgeIdentifier, String bridgeConnectorIdentifier) {
209 // TODO Auto-generated method stub
214 public boolean addBridgeConnectorConfig(Node node, String bridgeConnectorIdentifier, Map<String, String> config) {
215 // TODO Auto-generated method stub
220 public boolean removeBridgeConnectorConfig(Node node, String bridgeConnectorIdentifier, Map<String, String> config) {
221 // TODO Auto-generated method stub
226 public Map<String, String> getBridgeConnectorConfigs(Node node, String bridgeConnectorIdentifier) {
227 // TODO Auto-generated method stub
231 * Create a Bridge Domain
233 * @param node Node serving this configuration service
234 * @param bridgeDomainIdentifier String representation of a Bridge Domain
235 * @param portIdentifier String representation of a user defined Port Name
238 @SuppressWarnings("unchecked")
239 public boolean addPort(Node node, String bridgeIdentifier, String portIdentifier) throws Throwable{
241 if (connectionService == null) {
242 logger.error("Couldn't refer to the ConnectionService");
245 Connection connection = connectionService.getConnection(node);
247 if (connection != null) {
248 String newBridge = "new_bridge";
249 String newInterface = "new_interface";
250 String newPort = "new_port";
251 String newSwitch = "new_switch";
253 Map<String, OVSBridge> existingBridges = OVSBridge.monitorBridge(connection);
255 OVSBridge bridge = existingBridges.get(bridgeIdentifier);
257 List<String> portUuidPair = new ArrayList<String>();
258 portUuidPair.add("named-uuid");
259 portUuidPair.add(newPort);
261 List<Object> mutation = new ArrayList<Object>();
262 mutation.add("ports");
263 mutation.add("insert");
264 mutation.add(portUuidPair);
265 List<Object> mutations = new ArrayList<Object>();
266 mutations.add(mutation);
268 List<String> bridgeUuidPair = new ArrayList<String>();
269 bridgeUuidPair.add("uuid");
270 bridgeUuidPair.add(bridge.getUuid());
272 List<Object> whereInner = new ArrayList<Object>();
273 whereInner.add("_uuid");
274 whereInner.add("==");
275 whereInner.add(bridgeUuidPair);
277 List<Object> where = new ArrayList<Object>();
278 where.add(whereInner);
280 MutateRequest mutateBridgeRequest = new MutateRequest("Bridge", where, mutations);
282 Map<String, Object> portRow = new HashMap<String, Object>();
283 portRow.put("name", portIdentifier);
284 ArrayList<String> interfaces = new ArrayList<String>();
285 interfaces.add("named-uuid");
286 interfaces.add(newInterface);
287 portRow.put("interfaces", interfaces);
288 InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);
290 Map<String, Object> interfaceRow = new HashMap<String, Object>();
291 interfaceRow.put("name", portIdentifier);
292 interfaceRow.put("type", "internal");
293 InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newInterface, interfaceRow);
295 Object[] params = {"Open_vSwitch", mutateBridgeRequest, addIntfRequest, addPortRequest};
296 OvsdbMessage msg = new OvsdbMessage("transact", params);
298 connection.sendMessage(msg);
299 connection.readResponse(Uuid[].class);
307 * Create a Bridge Domain
309 * @param node Node serving this configuration service
310 * @param bridgeDomainIdentifier String representation of a Bridge Domain
311 * @param portIdentifier String representation of a user defined Port Name
314 @SuppressWarnings("unchecked")
315 public boolean addTunnel(Node node, String bridgeIdentifier,
316 String portidentifier, String tunnelendpoint, String tunencap)
319 if (connectionService == null) {
320 logger.error("Couldn't refer to the ConnectionService");
323 Connection connection = connectionService.getConnection(node);
325 if (connection != null) {
326 String newBridge = "new_bridge";
327 String newInterface = "new_interface";
328 String newPort = "new_port";
329 String newSwitch = "new_switch";
331 Map<String, OVSBridge> existingBridges = OVSBridge.monitorBridge(connection);
333 OVSBridge bridge = existingBridges.get(bridgeIdentifier);
335 List<String> portUuidPair = new ArrayList<String>();
336 portUuidPair.add("named-uuid");
337 portUuidPair.add(newPort);
339 List<Object> mutation = new ArrayList<Object>();
340 mutation.add("ports");
341 mutation.add("insert");
342 mutation.add(portUuidPair);
343 List<Object> mutations = new ArrayList<Object>();
344 mutations.add(mutation);
346 List<String> bridgeUuidPair = new ArrayList<String>();
347 bridgeUuidPair.add("uuid");
348 bridgeUuidPair.add(bridge.getUuid());
350 List<Object> whereInner = new ArrayList<Object>();
351 whereInner.add("_uuid");
352 whereInner.add("==");
353 whereInner.add(bridgeUuidPair);
355 List<Object> where = new ArrayList<Object>();
356 where.add(whereInner);
358 MutateRequest mutateBridgeRequest = new MutateRequest("Bridge", where, mutations);
360 Map<String, Object> portRow = new HashMap<String, Object>();
361 portRow.put("name", portidentifier);
362 ArrayList<String> interfaces = new ArrayList<String>();
363 interfaces.add("named-uuid");
364 interfaces.add(newInterface);
365 portRow.put("interfaces", interfaces);
366 InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);
368 Map<String, Object> interfaceRow = new HashMap<String, Object>();
369 interfaceRow.put("name", portidentifier);
370 interfaceRow.put("type", tunencap);
371 ArrayList<Object> intopt = new ArrayList<Object>();
372 interfaceRow.put("options", intopt);
373 ArrayList<Object> intoptmap = new ArrayList<Object>();
374 ArrayList<String> intoptep = new ArrayList<String>();
376 intopt.add(intoptmap);
377 intoptmap.add(intoptep);
378 intoptep.add("remote_ip");
379 intoptep.add(tunnelendpoint);
381 InsertRequest addIntfRequest = new InsertRequest("insert", "Interface",
382 newInterface, interfaceRow);
384 Object[] params = {"Open_vSwitch", mutateBridgeRequest, addIntfRequest, addPortRequest};
385 OvsdbMessage msg = new OvsdbMessage("transact", params);
387 connection.sendMessage(msg);
388 connection.readResponse(Uuid[].class);
397 public Object genericConfigurationEvent(Node node, Map<String, String> config) {
398 // TODO Auto-generated method stub