Committed by
Gerrit Code Review
CORD-208 Implement additional ovsdb client methods
- Create a bridge with data path id - Create a tunnel port with some options Change-Id: I9fbf6322272f9151c0fc904d1c681e5ffb793be0
Showing
3 changed files
with
126 additions
and
0 deletions
... | @@ -28,6 +28,7 @@ import org.onosproject.ovsdb.rfc.operations.Operation; | ... | @@ -28,6 +28,7 @@ import org.onosproject.ovsdb.rfc.operations.Operation; |
28 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; | 28 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; |
29 | 29 | ||
30 | import java.util.List; | 30 | import java.util.List; |
31 | +import java.util.Map; | ||
31 | import java.util.Set; | 32 | import java.util.Set; |
32 | 33 | ||
33 | /** | 34 | /** |
... | @@ -50,6 +51,17 @@ public interface OvsdbClientService extends OvsdbRPC { | ... | @@ -50,6 +51,17 @@ public interface OvsdbClientService extends OvsdbRPC { |
50 | void createTunnel(IpAddress srcIp, IpAddress dstIp); | 51 | void createTunnel(IpAddress srcIp, IpAddress dstIp); |
51 | 52 | ||
52 | /** | 53 | /** |
54 | + * Creates a tunnel port with given options. | ||
55 | + * | ||
56 | + * @param bridgeName bridge name | ||
57 | + * @param portName port name | ||
58 | + * @param tunnelType tunnel type | ||
59 | + * @param options tunnel options | ||
60 | + * @return true if tunnel creation is successful, false otherwise | ||
61 | + */ | ||
62 | + boolean createTunnel(String bridgeName, String portName, String tunnelType, Map<String, String> options); | ||
63 | + | ||
64 | + /** | ||
53 | * Drops the configuration for the tunnel. | 65 | * Drops the configuration for the tunnel. |
54 | * | 66 | * |
55 | * @param srcIp source IP address | 67 | * @param srcIp source IP address |
... | @@ -72,6 +84,17 @@ public interface OvsdbClientService extends OvsdbRPC { | ... | @@ -72,6 +84,17 @@ public interface OvsdbClientService extends OvsdbRPC { |
72 | void createBridge(String bridgeName); | 84 | void createBridge(String bridgeName); |
73 | 85 | ||
74 | /** | 86 | /** |
87 | + * Creates a bridge with given name and dpid. | ||
88 | + * Sets the bridge's controller with given controllers. | ||
89 | + * | ||
90 | + * @param bridgeName bridge name | ||
91 | + * @param dpid data path id | ||
92 | + * @param controllers controllers | ||
93 | + * @return true if bridge creation is successful, false otherwise | ||
94 | + */ | ||
95 | + boolean createBridge(String bridgeName, String dpid, List<ControllerInfo> controllers); | ||
96 | + | ||
97 | + /** | ||
75 | * Drops a bridge. | 98 | * Drops a bridge. |
76 | * | 99 | * |
77 | * @param bridgeName bridge name | 100 | * @param bridgeName bridge name | ... | ... |
... | @@ -73,6 +73,8 @@ import org.slf4j.LoggerFactory; | ... | @@ -73,6 +73,8 @@ import org.slf4j.LoggerFactory; |
73 | 73 | ||
74 | import java.net.InetSocketAddress; | 74 | import java.net.InetSocketAddress; |
75 | import java.util.ArrayList; | 75 | import java.util.ArrayList; |
76 | +import java.util.Arrays; | ||
77 | +import java.util.HashMap; | ||
76 | import java.util.HashSet; | 78 | import java.util.HashSet; |
77 | import java.util.Iterator; | 79 | import java.util.Iterator; |
78 | import java.util.List; | 80 | import java.util.List; |
... | @@ -481,6 +483,52 @@ public class DefaultOvsdbClient | ... | @@ -481,6 +483,52 @@ public class DefaultOvsdbClient |
481 | log.info("Create bridge success"); | 483 | log.info("Create bridge success"); |
482 | } | 484 | } |
483 | 485 | ||
486 | + @Override | ||
487 | + public boolean createBridge(String bridgeName, String dpid, List<ControllerInfo> controllers) { | ||
488 | + | ||
489 | + DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME); | ||
490 | + String ovsUuid = getOvsUuid(OvsdbConstant.DATABASENAME); | ||
491 | + | ||
492 | + if (dbSchema == null || ovsUuid == null) { | ||
493 | + log.warn("Couldn't find database Open_vSwitch"); | ||
494 | + return false; | ||
495 | + } | ||
496 | + | ||
497 | + String bridgeUuid = getBridgeUuid(bridgeName); | ||
498 | + if (bridgeUuid != null) { | ||
499 | + log.warn("Bridge {} is already exist", bridgeName); | ||
500 | + // remove existing one and re-create? | ||
501 | + return false; | ||
502 | + } | ||
503 | + | ||
504 | + Bridge bridge = (Bridge) TableGenerator.createTable(dbSchema, OvsdbTable.BRIDGE); | ||
505 | + bridge.setName(bridgeName); | ||
506 | + | ||
507 | + Set<String> failMode = new HashSet<>(Arrays.asList("secure")); | ||
508 | + bridge.setFailMode(failMode); | ||
509 | + | ||
510 | + Set<String> protocols = new HashSet<>(Arrays.asList(OvsdbConstant.OPENFLOW13)); | ||
511 | + bridge.setProtocols(protocols); | ||
512 | + | ||
513 | + Map<String, String> options = new HashMap<>(); | ||
514 | + options.put("datapath-id", dpid); | ||
515 | + bridge.setOtherConfig(options); | ||
516 | + | ||
517 | + bridgeUuid = insertConfig(OvsdbConstant.BRIDGE, "_uuid", | ||
518 | + OvsdbConstant.DATABASENAME, "bridges", | ||
519 | + ovsUuid, bridge.getRow()); | ||
520 | + | ||
521 | + if (bridgeUuid != null) { | ||
522 | + createPort(bridgeName, bridgeName); | ||
523 | + } else { | ||
524 | + log.warn("Failed to create bridge {} on {}", bridgeName, nodeId.toString()); | ||
525 | + return false; | ||
526 | + } | ||
527 | + | ||
528 | + setControllersWithUUID(UUID.uuid(bridgeUuid), controllers); | ||
529 | + return true; | ||
530 | + } | ||
531 | + | ||
484 | /** | 532 | /** |
485 | * Sets the bridge's controller automatically. | 533 | * Sets the bridge's controller automatically. |
486 | * <p/> | 534 | * <p/> |
... | @@ -648,6 +696,50 @@ public class DefaultOvsdbClient | ... | @@ -648,6 +696,50 @@ public class DefaultOvsdbClient |
648 | } | 696 | } |
649 | 697 | ||
650 | @Override | 698 | @Override |
699 | + public boolean createTunnel(String bridgeName, String portName, String tunnelType, Map<String, String> options) { | ||
700 | + | ||
701 | + String bridgeUuid = getBridgeUuid(bridgeName); | ||
702 | + if (bridgeUuid == null) { | ||
703 | + log.warn("Couldn't find bridge {} in {}", bridgeName, nodeId.getIpAddress()); | ||
704 | + return false; | ||
705 | + } | ||
706 | + | ||
707 | + if (getPortUuid(portName, bridgeUuid) != null) { | ||
708 | + log.warn("Port {} already exists", portName); | ||
709 | + // remove existing one and re-create? | ||
710 | + return false; | ||
711 | + } | ||
712 | + | ||
713 | + ArrayList<Operation> operations = Lists.newArrayList(); | ||
714 | + DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME); | ||
715 | + | ||
716 | + // insert a new port to the port table | ||
717 | + Port port = (Port) TableGenerator.createTable(dbSchema, OvsdbTable.PORT); | ||
718 | + port.setName(portName); | ||
719 | + Insert portInsert = new Insert(dbSchema.getTableSchema("Port"), "Port", port.getRow()); | ||
720 | + portInsert.getRow().put("interfaces", UUID.uuid("Interface")); | ||
721 | + operations.add(portInsert); | ||
722 | + | ||
723 | + // update the bridge table | ||
724 | + Condition condition = ConditionUtil.equals("_uuid", UUID.uuid(bridgeUuid)); | ||
725 | + Mutation mutation = MutationUtil.insert("ports", UUID.uuid("Port")); | ||
726 | + List<Condition> conditions = new ArrayList<>(Arrays.asList(condition)); | ||
727 | + List<Mutation> mutations = new ArrayList<>(Arrays.asList(mutation)); | ||
728 | + operations.add(new Mutate(dbSchema.getTableSchema("Bridge"), conditions, mutations)); | ||
729 | + | ||
730 | + // insert a tunnel interface | ||
731 | + Interface intf = (Interface) TableGenerator.createTable(dbSchema, OvsdbTable.INTERFACE); | ||
732 | + intf.setName(portName); | ||
733 | + intf.setType(tunnelType); | ||
734 | + intf.setOptions(options); | ||
735 | + Insert intfInsert = new Insert(dbSchema.getTableSchema("Interface"), "Interface", intf.getRow()); | ||
736 | + operations.add(intfInsert); | ||
737 | + | ||
738 | + transactConfig(OvsdbConstant.DATABASENAME, operations); | ||
739 | + return true; | ||
740 | + } | ||
741 | + | ||
742 | + @Override | ||
651 | public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { | 743 | public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { |
652 | String bridgeName = OvsdbConstant.INTEGRATION_BRIDGE; | 744 | String bridgeName = OvsdbConstant.INTEGRATION_BRIDGE; |
653 | String portName = getTunnelName(OvsdbConstant.TYPEVXLAN, dstIp); | 745 | String portName = getTunnelName(OvsdbConstant.TYPEVXLAN, dstIp); | ... | ... |
... | @@ -34,6 +34,7 @@ import org.onosproject.ovsdb.rfc.operations.Operation; | ... | @@ -34,6 +34,7 @@ import org.onosproject.ovsdb.rfc.operations.Operation; |
34 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; | 34 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; |
35 | 35 | ||
36 | import java.util.List; | 36 | import java.util.List; |
37 | +import java.util.Map; | ||
37 | import java.util.Set; | 38 | import java.util.Set; |
38 | 39 | ||
39 | /** | 40 | /** |
... | @@ -52,6 +53,11 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { | ... | @@ -52,6 +53,11 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { |
52 | } | 53 | } |
53 | 54 | ||
54 | @Override | 55 | @Override |
56 | + public boolean createTunnel(String bridgeName, String portName, String tunnelType, Map<String, String> options) { | ||
57 | + return true; | ||
58 | + } | ||
59 | + | ||
60 | + @Override | ||
55 | public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { | 61 | public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { |
56 | 62 | ||
57 | } | 63 | } |
... | @@ -67,6 +73,11 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { | ... | @@ -67,6 +73,11 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { |
67 | } | 73 | } |
68 | 74 | ||
69 | @Override | 75 | @Override |
76 | + public boolean createBridge(String bridgeName, String dpid, List<ControllerInfo> controllers) { | ||
77 | + return true; | ||
78 | + } | ||
79 | + | ||
80 | + @Override | ||
70 | public void dropBridge(String bridgeName) { | 81 | public void dropBridge(String bridgeName) { |
71 | 82 | ||
72 | } | 83 | } | ... | ... |
-
Please register or login to post a comment