From 18aea0084ac03a52707c4905df7c3dbc0a2cb2e3 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Wed, 6 Nov 2013 10:05:14 -0800 Subject: [PATCH] Support for Port Types = patch, Vlan and Tunnel. Signed-off-by: Madhu Venugopal --- .../ovsdb/lib/database/OvsdbType.java | 4 +- .../ovsdb/plugin/ConfigurationService.java | 64 +++++++++++++++++-- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java index 560788d27..317acf36f 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java @@ -9,7 +9,9 @@ public class OvsdbType { public enum PortType { VLAN("vlan"), TUNNEL("Tunnel"), - BONDING("Bonding"); + BONDING("Bonding"), + PATCH("patch"), + INTERNAL("internal"); private PortType(String name) { this.name = name; diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java index 95a82c607..3ecc92e68 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java @@ -1,5 +1,6 @@ package org.opendaylight.ovsdb.plugin; +import java.math.BigInteger; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; @@ -280,13 +281,45 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, where.add(condition); addBrMutRequest = new MutateOperation(Bridge.NAME.getName(), where, mutations); + OvsDBMap options = null; + String type = null; + OvsDBSet tags = null; + if (configs != null) { + type = (String) configs.get(ConfigConstants.TYPE); + Map customConfigs = (Map) configs.get(ConfigConstants.CUSTOM); + if (customConfigs != null) { + options = new OvsDBMap(); + 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(); + options.put("remote_ip", (String)configs.get(ConfigConstants.DEST_IP)); + } else if (type.equalsIgnoreCase(OvsdbType.PortType.VLAN.name())) { + tags = new OvsDBSet(); + 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 interfaces = new OvsDBSet(); UUID interfaceid = new UUID(newInterface); interfaces.add(interfaceid); @@ -485,9 +518,6 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, result.getDetails()); status = new Status(StatusCode.BADREQUEST, result.getError() + " : " + result.getDetails()); } - if (status.isSuccess()) { - setBridgeOFController(node, bridgeIdentifier); - } return status; } catch(Exception e){ e.printStackTrace(); @@ -621,7 +651,7 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, for (InetAddress ofControllerAddress : ofControllerAddrs) { String cntrlUuid = null; String newController = "tcp:"+ofControllerAddress.getHostAddress()+":"+ofControllerPort; - if (controllerCache != null) { + if (controllerCache != null) { for (String uuid : controllerCache.keySet()) { Controller controller = (Controller)controllerCache.get(uuid); if (controller.getTarget().equals(newController)) { @@ -766,9 +796,31 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, return; } + String type = ci.nextArgument(); + + Map configs = new HashMap(); + while(true) { + String configKey = ci.nextArgument(); + if (configKey == null) break; + String configValue = ci.nextArgument(); + if (configValue == null) break; + configs.put(configKey, configValue); + } + + Map customConfigs = null; + if (type != null) { + customConfigs = new HashMap(); + customConfigs.put(ConfigConstants.TYPE, type); + } + + if (configs.size() > 0) { + if (customConfigs == null) customConfigs = new HashMap(); + customConfigs.put(ConfigConstants.CUSTOM, configs); + ci.println(customConfigs.toString()); + } Status status; try { - status = this.addPort(Node.fromString(nodeName), bridgeName, portName, null); + status = this.addPort(Node.fromString(nodeName), bridgeName, portName, customConfigs); ci.println("Port creation status : "+status.toString()); } catch (Throwable e) { // TODO Auto-generated catch block @@ -933,7 +985,7 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService, help.append("---OVSDB CLI---\n"); help.append("\t ovsconnect - Connect to OVSDB\n"); help.append("\t addBridge - Add Bridge\n"); - help.append("\t addPort - Add Port\n"); + help.append("\t addPort - Add Port\n"); help.append("\t delPort - Delete Port\n"); help.append("\t addPortVlan - Add Port, Vlan\n"); help.append("\t addTunnel - Add Tunnel\n"); -- 2.36.6