Committed by
Gerrit Code Review
Refactored tunnel and interface config behavior
- Added tunnel interface configuratoin to interfaceConfig and deprecated tunnelConfig - OVSDB client service provides interface create/remove APIs instead of tunnel interface create/remove, and this APIs can be used to create/remove various types of interfaces like tunnel, patch, tap and so on - Use tunnel description when create tunnel interface so that we can extend more config options later - Some cleaup OVSDB client Change-Id: I4653595504a27b18384a92ebe4b31ce9d99237cd
Showing
23 changed files
with
1012 additions
and
513 deletions
... | @@ -15,8 +15,6 @@ | ... | @@ -15,8 +15,6 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.openstacknode; | 16 | package org.onosproject.openstacknode; |
17 | 17 | ||
18 | -import com.google.common.collect.ImmutableMap; | ||
19 | -import com.google.common.collect.Sets; | ||
20 | import org.apache.felix.scr.annotations.Activate; | 18 | import org.apache.felix.scr.annotations.Activate; |
21 | import org.apache.felix.scr.annotations.Component; | 19 | import org.apache.felix.scr.annotations.Component; |
22 | import org.apache.felix.scr.annotations.Deactivate; | 20 | import org.apache.felix.scr.annotations.Deactivate; |
... | @@ -30,19 +28,18 @@ import org.onosproject.cluster.LeadershipService; | ... | @@ -30,19 +28,18 @@ import org.onosproject.cluster.LeadershipService; |
30 | import org.onosproject.cluster.NodeId; | 28 | import org.onosproject.cluster.NodeId; |
31 | import org.onosproject.core.ApplicationId; | 29 | import org.onosproject.core.ApplicationId; |
32 | import org.onosproject.core.CoreService; | 30 | import org.onosproject.core.CoreService; |
33 | -import org.onosproject.net.DefaultAnnotations; | ||
34 | import org.onosproject.net.Device; | 31 | import org.onosproject.net.Device; |
35 | import org.onosproject.net.DeviceId; | 32 | import org.onosproject.net.DeviceId; |
36 | import org.onosproject.net.Port; | 33 | import org.onosproject.net.Port; |
37 | import org.onosproject.net.behaviour.BridgeConfig; | 34 | import org.onosproject.net.behaviour.BridgeConfig; |
38 | import org.onosproject.net.behaviour.BridgeDescription; | 35 | import org.onosproject.net.behaviour.BridgeDescription; |
39 | -import org.onosproject.net.behaviour.BridgeName; | ||
40 | import org.onosproject.net.behaviour.ControllerInfo; | 36 | import org.onosproject.net.behaviour.ControllerInfo; |
41 | import org.onosproject.net.behaviour.DefaultBridgeDescription; | 37 | import org.onosproject.net.behaviour.DefaultBridgeDescription; |
42 | import org.onosproject.net.behaviour.DefaultTunnelDescription; | 38 | import org.onosproject.net.behaviour.DefaultTunnelDescription; |
43 | -import org.onosproject.net.behaviour.TunnelConfig; | 39 | +import org.onosproject.net.behaviour.InterfaceConfig; |
44 | import org.onosproject.net.behaviour.TunnelDescription; | 40 | import org.onosproject.net.behaviour.TunnelDescription; |
45 | -import org.onosproject.net.behaviour.TunnelName; | 41 | +import org.onosproject.net.behaviour.TunnelEndPoints; |
42 | +import org.onosproject.net.behaviour.TunnelKeys; | ||
46 | import org.onosproject.net.config.ConfigFactory; | 43 | import org.onosproject.net.config.ConfigFactory; |
47 | import org.onosproject.net.config.NetworkConfigEvent; | 44 | import org.onosproject.net.config.NetworkConfigEvent; |
48 | import org.onosproject.net.config.NetworkConfigListener; | 45 | import org.onosproject.net.config.NetworkConfigListener; |
... | @@ -72,7 +69,6 @@ import static org.slf4j.LoggerFactory.getLogger; | ... | @@ -72,7 +69,6 @@ import static org.slf4j.LoggerFactory.getLogger; |
72 | 69 | ||
73 | import java.util.ArrayList; | 70 | import java.util.ArrayList; |
74 | import java.util.List; | 71 | import java.util.List; |
75 | -import java.util.Map; | ||
76 | import java.util.concurrent.ExecutorService; | 72 | import java.util.concurrent.ExecutorService; |
77 | import java.util.stream.Collectors; | 73 | import java.util.stream.Collectors; |
78 | 74 | ||
... | @@ -97,9 +93,6 @@ public class OpenstackNodeManager implements OpenstackNodeService { | ... | @@ -97,9 +93,6 @@ public class OpenstackNodeManager implements OpenstackNodeService { |
97 | private static final String OPENSTACK_NODESTORE = "openstacknode-nodestore"; | 93 | private static final String OPENSTACK_NODESTORE = "openstacknode-nodestore"; |
98 | private static final String OPENSTACK_NODEMANAGER_ID = "org.onosproject.openstacknode"; | 94 | private static final String OPENSTACK_NODEMANAGER_ID = "org.onosproject.openstacknode"; |
99 | 95 | ||
100 | - private static final Map<String, String> DEFAULT_TUNNEL_OPTIONS | ||
101 | - = ImmutableMap.of("key", "flow", "remote_ip", "flow"); | ||
102 | - | ||
103 | private static final int DPID_BEGIN = 3; | 96 | private static final int DPID_BEGIN = 3; |
104 | private static final int OFPORT = 6653; | 97 | private static final int OFPORT = 6653; |
105 | 98 | ||
... | @@ -390,18 +383,11 @@ public class OpenstackNodeManager implements OpenstackNodeService { | ... | @@ -390,18 +383,11 @@ public class OpenstackNodeManager implements OpenstackNodeService { |
390 | return; | 383 | return; |
391 | } | 384 | } |
392 | 385 | ||
393 | - List<ControllerInfo> controllers = new ArrayList<>(); | 386 | + List<ControllerInfo> controllers = clusterService.getNodes().stream() |
394 | - Sets.newHashSet(clusterService.getNodes()).stream() | 387 | + .map(controller -> new ControllerInfo(controller.ip(), OFPORT, "tcp")) |
395 | - .forEach(controller -> { | 388 | + .collect(Collectors.toList()); |
396 | - ControllerInfo ctrlInfo = new ControllerInfo(controller.ip(), OFPORT, "tcp"); | ||
397 | - controllers.add(ctrlInfo); | ||
398 | - }); | ||
399 | String dpid = node.intBrId().toString().substring(DPID_BEGIN); | 389 | String dpid = node.intBrId().toString().substring(DPID_BEGIN); |
400 | 390 | ||
401 | - try { | ||
402 | - DriverHandler handler = driverService.createHandler(node.ovsdbId()); | ||
403 | - BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class); | ||
404 | - | ||
405 | BridgeDescription bridgeDesc = DefaultBridgeDescription.builder() | 391 | BridgeDescription bridgeDesc = DefaultBridgeDescription.builder() |
406 | .name(DEFAULT_BRIDGE) | 392 | .name(DEFAULT_BRIDGE) |
407 | .failMode(BridgeDescription.FailMode.SECURE) | 393 | .failMode(BridgeDescription.FailMode.SECURE) |
... | @@ -410,6 +396,9 @@ public class OpenstackNodeManager implements OpenstackNodeService { | ... | @@ -410,6 +396,9 @@ public class OpenstackNodeManager implements OpenstackNodeService { |
410 | .controllers(controllers) | 396 | .controllers(controllers) |
411 | .build(); | 397 | .build(); |
412 | 398 | ||
399 | + try { | ||
400 | + DriverHandler handler = driverService.createHandler(node.ovsdbId()); | ||
401 | + BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class); | ||
413 | bridgeConfig.addBridge(bridgeDesc); | 402 | bridgeConfig.addBridge(bridgeDesc); |
414 | } catch (ItemNotFoundException e) { | 403 | } catch (ItemNotFoundException e) { |
415 | log.warn("Failed to create integration bridge on {}", node.ovsdbId()); | 404 | log.warn("Failed to create integration bridge on {}", node.ovsdbId()); |
... | @@ -426,17 +415,17 @@ public class OpenstackNodeManager implements OpenstackNodeService { | ... | @@ -426,17 +415,17 @@ public class OpenstackNodeManager implements OpenstackNodeService { |
426 | return; | 415 | return; |
427 | } | 416 | } |
428 | 417 | ||
429 | - DefaultAnnotations.Builder optionBuilder = DefaultAnnotations.builder(); | 418 | + TunnelDescription description = DefaultTunnelDescription.builder() |
430 | - for (String key : DEFAULT_TUNNEL_OPTIONS.keySet()) { | 419 | + .deviceId(DEFAULT_BRIDGE) |
431 | - optionBuilder.set(key, DEFAULT_TUNNEL_OPTIONS.get(key)); | 420 | + .ifaceName(DEFAULT_TUNNEL) |
432 | - } | 421 | + .type(VXLAN) |
433 | - TunnelDescription description = | 422 | + .remote(TunnelEndPoints.flowTunnelEndpoint()) |
434 | - new DefaultTunnelDescription(null, null, VXLAN, TunnelName.tunnelName(DEFAULT_TUNNEL), | 423 | + .key(TunnelKeys.flowTunnelKey()) |
435 | - optionBuilder.build()); | 424 | + .build(); |
436 | try { | 425 | try { |
437 | DriverHandler handler = driverService.createHandler(node.ovsdbId()); | 426 | DriverHandler handler = driverService.createHandler(node.ovsdbId()); |
438 | - TunnelConfig tunnelConfig = handler.behaviour(TunnelConfig.class); | 427 | + InterfaceConfig ifaceConfig = handler.behaviour(InterfaceConfig.class); |
439 | - tunnelConfig.createTunnelInterface(BridgeName.bridgeName(DEFAULT_BRIDGE), description); | 428 | + ifaceConfig.addTunnelMode(DEFAULT_TUNNEL, description); |
440 | } catch (ItemNotFoundException e) { | 429 | } catch (ItemNotFoundException e) { |
441 | log.warn("Failed to create tunnel interface on {}", node.ovsdbId()); | 430 | log.warn("Failed to create tunnel interface on {}", node.ovsdbId()); |
442 | } | 431 | } | ... | ... |
... | @@ -487,7 +487,7 @@ public class VtnManager implements VtnService { | ... | @@ -487,7 +487,7 @@ public class VtnManager implements VtnService { |
487 | private void programTunnelConfig(DeviceId localDeviceId, IpAddress localIp, | 487 | private void programTunnelConfig(DeviceId localDeviceId, IpAddress localIp, |
488 | DriverHandler localHandler) { | 488 | DriverHandler localHandler) { |
489 | if (mastershipService.isLocalMaster(localDeviceId)) { | 489 | if (mastershipService.isLocalMaster(localDeviceId)) { |
490 | - VtnConfig.applyTunnelConfig(localHandler, localIp, IpAddress.valueOf(DEFAULT_IP)); | 490 | + VtnConfig.applyTunnelConfig(localHandler, localIp); |
491 | log.info("Add tunnel on {}", localIp); | 491 | log.info("Add tunnel on {}", localIp); |
492 | } | 492 | } |
493 | } | 493 | } | ... | ... |
... | @@ -27,11 +27,10 @@ import org.onosproject.net.behaviour.BridgeDescription; | ... | @@ -27,11 +27,10 @@ import org.onosproject.net.behaviour.BridgeDescription; |
27 | import org.onosproject.net.behaviour.BridgeName; | 27 | import org.onosproject.net.behaviour.BridgeName; |
28 | import org.onosproject.net.behaviour.DefaultBridgeDescription; | 28 | import org.onosproject.net.behaviour.DefaultBridgeDescription; |
29 | import org.onosproject.net.behaviour.DefaultTunnelDescription; | 29 | import org.onosproject.net.behaviour.DefaultTunnelDescription; |
30 | -import org.onosproject.net.behaviour.IpTunnelEndPoint; | 30 | +import org.onosproject.net.behaviour.InterfaceConfig; |
31 | -import org.onosproject.net.behaviour.TunnelConfig; | ||
32 | import org.onosproject.net.behaviour.TunnelDescription; | 31 | import org.onosproject.net.behaviour.TunnelDescription; |
33 | -import org.onosproject.net.behaviour.TunnelEndPoint; | 32 | +import org.onosproject.net.behaviour.TunnelEndPoints; |
34 | -import org.onosproject.net.behaviour.TunnelName; | 33 | +import org.onosproject.net.behaviour.TunnelKeys; |
35 | import org.onosproject.net.driver.DriverHandler; | 34 | import org.onosproject.net.driver.DriverHandler; |
36 | 35 | ||
37 | /** | 36 | /** |
... | @@ -95,43 +94,34 @@ public final class VtnConfig { | ... | @@ -95,43 +94,34 @@ public final class VtnConfig { |
95 | * | 94 | * |
96 | * @param handler DriverHandler | 95 | * @param handler DriverHandler |
97 | * @param srcIp the ipAddress of the local controller device | 96 | * @param srcIp the ipAddress of the local controller device |
98 | - * @param dstIp the ipAddress of the remote controller device | ||
99 | */ | 97 | */ |
100 | - public static void applyTunnelConfig(DriverHandler handler, IpAddress srcIp, | 98 | + public static void applyTunnelConfig(DriverHandler handler, IpAddress srcIp) { |
101 | - IpAddress dstIp) { | ||
102 | DefaultAnnotations.Builder optionBuilder = DefaultAnnotations.builder(); | 99 | DefaultAnnotations.Builder optionBuilder = DefaultAnnotations.builder(); |
103 | for (String key : DEFAULT_TUNNEL_OPTIONS.keySet()) { | 100 | for (String key : DEFAULT_TUNNEL_OPTIONS.keySet()) { |
104 | optionBuilder.set(key, DEFAULT_TUNNEL_OPTIONS.get(key)); | 101 | optionBuilder.set(key, DEFAULT_TUNNEL_OPTIONS.get(key)); |
105 | } | 102 | } |
106 | - TunnelConfig tunnelConfig = handler.behaviour(TunnelConfig.class); | 103 | + |
107 | - TunnelEndPoint tunnelAsSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp); | 104 | + InterfaceConfig interfaceConfig = handler.behaviour(InterfaceConfig.class); |
108 | - TunnelDescription tunnel = new DefaultTunnelDescription( | 105 | + TunnelDescription tunnel = DefaultTunnelDescription.builder() |
109 | - tunnelAsSrc, | 106 | + .deviceId(DEFAULT_BRIDGE_NAME) |
110 | - null, | 107 | + .ifaceName(DEFAULT_TUNNEL) |
111 | - TunnelDescription.Type.VXLAN, | 108 | + .type(TunnelDescription.Type.VXLAN) |
112 | - TunnelName.tunnelName(DEFAULT_TUNNEL), | 109 | + .local(TunnelEndPoints.ipTunnelEndpoint(srcIp)) |
113 | - optionBuilder.build()); | 110 | + .remote(TunnelEndPoints.flowTunnelEndpoint()) |
114 | - tunnelConfig.createTunnelInterface(BridgeName.bridgeName(DEFAULT_BRIDGE_NAME), tunnel); | 111 | + .key(TunnelKeys.flowTunnelKey()) |
112 | + .otherConfigs(optionBuilder.build()) | ||
113 | + .build(); | ||
114 | + interfaceConfig.addTunnelMode(DEFAULT_TUNNEL, tunnel); | ||
115 | } | 115 | } |
116 | 116 | ||
117 | /** | 117 | /** |
118 | * Creates or update tunnel in the controller device. | 118 | * Creates or update tunnel in the controller device. |
119 | * | 119 | * |
120 | * @param handler DriverHandler | 120 | * @param handler DriverHandler |
121 | - * @param srcIp the ipAddress of the local controller device | ||
122 | - * @param dstIp the ipAddress of the remote controller device | ||
123 | */ | 121 | */ |
124 | - public static void removeTunnelConfig(DriverHandler handler, IpAddress srcIp, | 122 | + public static void removeTunnelConfig(DriverHandler handler) { |
125 | - IpAddress dstIp) { | 123 | + InterfaceConfig interfaceConfig = handler.behaviour(InterfaceConfig.class); |
126 | - TunnelConfig tunnelConfig = handler.behaviour(TunnelConfig.class); | 124 | + interfaceConfig.removeTunnelMode(DEFAULT_TUNNEL); |
127 | - TunnelEndPoint tunnelAsSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp); | ||
128 | - TunnelEndPoint tunnelAsDst = IpTunnelEndPoint.ipTunnelPoint(dstIp); | ||
129 | - TunnelDescription tunnel = new DefaultTunnelDescription( | ||
130 | - tunnelAsSrc, | ||
131 | - tunnelAsDst, | ||
132 | - TunnelDescription.Type.VXLAN, | ||
133 | - null); | ||
134 | - tunnelConfig.removeTunnel(tunnel); | ||
135 | } | 125 | } |
136 | 126 | ||
137 | /** | 127 | /** | ... | ... |
... | @@ -15,25 +15,29 @@ | ... | @@ -15,25 +15,29 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.net.behaviour; | 16 | package org.onosproject.net.behaviour; |
17 | 17 | ||
18 | +import com.google.common.base.Strings; | ||
18 | import org.onosproject.net.AbstractDescription; | 19 | import org.onosproject.net.AbstractDescription; |
19 | import org.onosproject.net.SparseAnnotations; | 20 | import org.onosproject.net.SparseAnnotations; |
20 | 21 | ||
21 | -import com.google.common.annotations.Beta; | ||
22 | import com.google.common.base.MoreObjects; | 22 | import com.google.common.base.MoreObjects; |
23 | 23 | ||
24 | +import java.util.Optional; | ||
25 | + | ||
26 | +import static com.google.common.base.Preconditions.checkArgument; | ||
27 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
28 | + | ||
24 | /** | 29 | /** |
25 | - * Default implementation of immutable tunnel description entity. | 30 | + * Default implementation of immutable tunnel interface description entity. |
26 | */ | 31 | */ |
27 | -@Beta | 32 | +public final class DefaultTunnelDescription extends AbstractDescription |
28 | -public class DefaultTunnelDescription extends AbstractDescription | ||
29 | implements TunnelDescription { | 33 | implements TunnelDescription { |
30 | 34 | ||
31 | - private final TunnelEndPoint src; | 35 | + private final Optional<String> deviceId; |
32 | - private final TunnelEndPoint dst; | 36 | + private final String ifaceName; |
33 | private final Type type; | 37 | private final Type type; |
34 | - // which a tunnel match up | 38 | + private final Optional<TunnelEndPoint> local; |
35 | - // tunnel producer | 39 | + private final Optional<TunnelEndPoint> remote; |
36 | - private final TunnelName tunnelName; // name of a tunnel | 40 | + private final Optional<TunnelKey> key; |
37 | 41 | ||
38 | /** | 42 | /** |
39 | * Creates a tunnel description using the supplied information. | 43 | * Creates a tunnel description using the supplied information. |
... | @@ -43,26 +47,67 @@ public class DefaultTunnelDescription extends AbstractDescription | ... | @@ -43,26 +47,67 @@ public class DefaultTunnelDescription extends AbstractDescription |
43 | * @param type tunnel type | 47 | * @param type tunnel type |
44 | * @param tunnelName tunnel name | 48 | * @param tunnelName tunnel name |
45 | * @param annotations optional key/value annotations | 49 | * @param annotations optional key/value annotations |
50 | + * @deprecated version 1.7.0 - Hummingbird | ||
46 | */ | 51 | */ |
52 | + @Deprecated | ||
47 | public DefaultTunnelDescription(TunnelEndPoint src, | 53 | public DefaultTunnelDescription(TunnelEndPoint src, |
48 | TunnelEndPoint dst, Type type, | 54 | TunnelEndPoint dst, Type type, |
49 | TunnelName tunnelName, | 55 | TunnelName tunnelName, |
50 | SparseAnnotations... annotations) { | 56 | SparseAnnotations... annotations) { |
51 | super(annotations); | 57 | super(annotations); |
52 | - this.src = src; | 58 | + this.deviceId = Optional.empty(); |
53 | - this.dst = dst; | 59 | + this.local = Optional.ofNullable(src); |
60 | + this.remote = Optional.ofNullable(dst); | ||
61 | + this.type = type; | ||
62 | + this.ifaceName = tunnelName.value(); | ||
63 | + this.key = Optional.empty(); | ||
64 | + } | ||
65 | + | ||
66 | + /** | ||
67 | + * Creates a tunnel description using the supplied information. | ||
68 | + * | ||
69 | + * @param ifaceName tunnel interface ifaceName | ||
70 | + * @param local source tunnel endpoint | ||
71 | + * @param remote destination tunnel endpoint | ||
72 | + * @param type tunnel type | ||
73 | + * @param annotations optional key/value annotations | ||
74 | + */ | ||
75 | + private DefaultTunnelDescription(Optional<String> deviceId, | ||
76 | + String ifaceName, | ||
77 | + Type type, | ||
78 | + Optional<TunnelEndPoint> local, | ||
79 | + Optional<TunnelEndPoint> remote, | ||
80 | + Optional<TunnelKey> key, | ||
81 | + SparseAnnotations... annotations) { | ||
82 | + super(annotations); | ||
83 | + this.deviceId = deviceId; | ||
84 | + this.ifaceName = checkNotNull(ifaceName); | ||
54 | this.type = type; | 85 | this.type = type; |
55 | - this.tunnelName = tunnelName; | 86 | + this.local = local; |
87 | + this.remote = remote; | ||
88 | + this.key = key; | ||
89 | + } | ||
90 | + | ||
91 | + @Override | ||
92 | + public Optional<String> deviceId() { | ||
93 | + return deviceId; | ||
56 | } | 94 | } |
57 | 95 | ||
58 | @Override | 96 | @Override |
97 | + public String ifaceName() { | ||
98 | + return ifaceName; | ||
99 | + } | ||
100 | + | ||
101 | + @Deprecated | ||
102 | + @Override | ||
59 | public TunnelEndPoint src() { | 103 | public TunnelEndPoint src() { |
60 | - return src; | 104 | + return local.isPresent() ? local.get() : null; |
61 | } | 105 | } |
62 | 106 | ||
107 | + @Deprecated | ||
63 | @Override | 108 | @Override |
64 | public TunnelEndPoint dst() { | 109 | public TunnelEndPoint dst() { |
65 | - return dst; | 110 | + return remote.isPresent() ? remote.get() : null; |
66 | } | 111 | } |
67 | 112 | ||
68 | @Override | 113 | @Override |
... | @@ -71,17 +116,112 @@ public class DefaultTunnelDescription extends AbstractDescription | ... | @@ -71,17 +116,112 @@ public class DefaultTunnelDescription extends AbstractDescription |
71 | } | 116 | } |
72 | 117 | ||
73 | @Override | 118 | @Override |
119 | + public Optional<TunnelEndPoint> local() { | ||
120 | + return local; | ||
121 | + } | ||
122 | + | ||
123 | + @Override | ||
124 | + public Optional<TunnelEndPoint> remote() { | ||
125 | + return remote; | ||
126 | + } | ||
127 | + | ||
128 | + @Override | ||
129 | + public Optional<TunnelKey> key() { | ||
130 | + return key; | ||
131 | + } | ||
132 | + | ||
133 | + @Deprecated | ||
134 | + @Override | ||
74 | public TunnelName tunnelName() { | 135 | public TunnelName tunnelName() { |
75 | - return tunnelName; | 136 | + return TunnelName.tunnelName(ifaceName); |
76 | } | 137 | } |
77 | 138 | ||
78 | @Override | 139 | @Override |
79 | public String toString() { | 140 | public String toString() { |
80 | return MoreObjects.toStringHelper(this) | 141 | return MoreObjects.toStringHelper(this) |
81 | - .add("src", src()) | 142 | + .add("deviceId", deviceId) |
82 | - .add("dst", dst()) | 143 | + .add("ifaceName", ifaceName) |
83 | - .add("type", type()) | 144 | + .add("type", type) |
84 | - .add("tunnelName", tunnelName()) | 145 | + .add("local", local) |
146 | + .add("remote", remote) | ||
147 | + .add("key", key) | ||
85 | .toString(); | 148 | .toString(); |
86 | } | 149 | } |
150 | + | ||
151 | + /** | ||
152 | + * Creates and returns a new builder instance. | ||
153 | + * | ||
154 | + * @return default tunnel description builder | ||
155 | + */ | ||
156 | + public static Builder builder() { | ||
157 | + return new Builder(); | ||
158 | + } | ||
159 | + | ||
160 | + public static final class Builder implements TunnelDescription.Builder { | ||
161 | + private Optional<String> deviceId = Optional.empty(); | ||
162 | + private String ifaceName; | ||
163 | + private Type type; | ||
164 | + private Optional<TunnelEndPoint> local = Optional.empty(); | ||
165 | + private Optional<TunnelEndPoint> remote = Optional.empty(); | ||
166 | + private Optional<TunnelKey> key = Optional.empty(); | ||
167 | + private Optional<SparseAnnotations> otherConfigs = Optional.empty(); | ||
168 | + | ||
169 | + private Builder() { | ||
170 | + } | ||
171 | + | ||
172 | + @Override | ||
173 | + public TunnelDescription build() { | ||
174 | + if (otherConfigs.isPresent()) { | ||
175 | + return new DefaultTunnelDescription(deviceId, ifaceName, type, | ||
176 | + local, remote, key, | ||
177 | + otherConfigs.get()); | ||
178 | + } else { | ||
179 | + return new DefaultTunnelDescription(deviceId, ifaceName, type, | ||
180 | + local, remote, key); | ||
181 | + } | ||
182 | + } | ||
183 | + | ||
184 | + @Override | ||
185 | + public Builder deviceId(String deviceId) { | ||
186 | + this.deviceId = Optional.ofNullable(deviceId); | ||
187 | + return this; | ||
188 | + } | ||
189 | + | ||
190 | + @Override | ||
191 | + public Builder ifaceName(String ifaceName) { | ||
192 | + checkArgument(!Strings.isNullOrEmpty(ifaceName)); | ||
193 | + this.ifaceName = ifaceName; | ||
194 | + return this; | ||
195 | + } | ||
196 | + | ||
197 | + @Override | ||
198 | + public Builder type(Type type) { | ||
199 | + this.type = type; | ||
200 | + return this; | ||
201 | + } | ||
202 | + | ||
203 | + @Override | ||
204 | + public Builder local(TunnelEndPoint endpoint) { | ||
205 | + local = Optional.ofNullable(endpoint); | ||
206 | + return this; | ||
207 | + } | ||
208 | + | ||
209 | + @Override | ||
210 | + public Builder remote(TunnelEndPoint endpoint) { | ||
211 | + remote = Optional.ofNullable(endpoint); | ||
212 | + return this; | ||
213 | + } | ||
214 | + | ||
215 | + @Override | ||
216 | + public Builder key(TunnelKey key) { | ||
217 | + this.key = Optional.ofNullable(key); | ||
218 | + return this; | ||
219 | + } | ||
220 | + | ||
221 | + @Override | ||
222 | + public Builder otherConfigs(SparseAnnotations configs) { | ||
223 | + otherConfigs = Optional.ofNullable(configs); | ||
224 | + return this; | ||
225 | + } | ||
226 | + } | ||
87 | } | 227 | } | ... | ... |
... | @@ -125,6 +125,23 @@ public interface InterfaceConfig extends HandlerBehaviour { | ... | @@ -125,6 +125,23 @@ public interface InterfaceConfig extends HandlerBehaviour { |
125 | boolean removeRateLimit(String intf); | 125 | boolean removeRateLimit(String intf); |
126 | 126 | ||
127 | /** | 127 | /** |
128 | + * Adds a tunnel mode to supplied interface. | ||
129 | + * | ||
130 | + * @param intf the name of the interface | ||
131 | + * @param tunnelDesc tunnel interface description | ||
132 | + * @return true if the operation succeeds | ||
133 | + */ | ||
134 | + boolean addTunnelMode(String intf, TunnelDescription tunnelDesc); | ||
135 | + | ||
136 | + /** | ||
137 | + * Removes a tunnel interface. | ||
138 | + * | ||
139 | + * @param intf tunnel interface name | ||
140 | + * @return true if the operation succeeds | ||
141 | + */ | ||
142 | + boolean removeTunnelMode(String intf); | ||
143 | + | ||
144 | + /** | ||
128 | * Provides the interfaces configured on a device. | 145 | * Provides the interfaces configured on a device. |
129 | * | 146 | * |
130 | * @param deviceId the device ID | 147 | * @param deviceId the device ID |
... | @@ -148,5 +165,4 @@ public interface InterfaceConfig extends HandlerBehaviour { | ... | @@ -148,5 +165,4 @@ public interface InterfaceConfig extends HandlerBehaviour { |
148 | * getTrunkVlans(Interface), getAccessVlan(Interface) should be added to | 165 | * getTrunkVlans(Interface), getAccessVlan(Interface) should be added to |
149 | * complete the behavior. | 166 | * complete the behavior. |
150 | */ | 167 | */ |
151 | - | ||
152 | } | 168 | } | ... | ... |
... | @@ -16,27 +16,25 @@ | ... | @@ -16,27 +16,25 @@ |
16 | 16 | ||
17 | package org.onosproject.net.behaviour; | 17 | package org.onosproject.net.behaviour; |
18 | 18 | ||
19 | -import java.util.Objects; | ||
20 | - | ||
21 | import com.google.common.annotations.Beta; | 19 | import com.google.common.annotations.Beta; |
22 | -import org.onlab.packet.IpAddress; | ||
23 | - | ||
24 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
21 | +import org.onlab.packet.IpAddress; | ||
25 | 22 | ||
26 | /** | 23 | /** |
27 | * Represent for a tunnel point using ip address. | 24 | * Represent for a tunnel point using ip address. |
25 | + * | ||
26 | + * @deprecated version 1.7.0 - Hummingbird; use {@code TunnelEndPoint<IpAddress>} | ||
28 | */ | 27 | */ |
28 | +@Deprecated | ||
29 | @Beta | 29 | @Beta |
30 | -public final class IpTunnelEndPoint implements TunnelEndPoint { | 30 | +public final class IpTunnelEndPoint extends TunnelEndPoint<IpAddress> { |
31 | - | ||
32 | - private final IpAddress ip; | ||
33 | 31 | ||
34 | /** | 32 | /** |
35 | * Public construction is prohibited. | 33 | * Public construction is prohibited. |
36 | * @param ip ip address | 34 | * @param ip ip address |
37 | */ | 35 | */ |
38 | private IpTunnelEndPoint(IpAddress ip) { | 36 | private IpTunnelEndPoint(IpAddress ip) { |
39 | - this.ip = ip; | 37 | + super(ip); |
40 | } | 38 | } |
41 | 39 | ||
42 | /** | 40 | /** |
... | @@ -53,28 +51,11 @@ public final class IpTunnelEndPoint implements TunnelEndPoint { | ... | @@ -53,28 +51,11 @@ public final class IpTunnelEndPoint implements TunnelEndPoint { |
53 | * @return IP address | 51 | * @return IP address |
54 | */ | 52 | */ |
55 | public IpAddress ip() { | 53 | public IpAddress ip() { |
56 | - return ip; | 54 | + return value; |
57 | - } | ||
58 | - | ||
59 | - @Override | ||
60 | - public int hashCode() { | ||
61 | - return Objects.hash(ip); | ||
62 | - } | ||
63 | - | ||
64 | - @Override | ||
65 | - public boolean equals(Object obj) { | ||
66 | - if (this == obj) { | ||
67 | - return true; | ||
68 | - } | ||
69 | - if (obj instanceof IpTunnelEndPoint) { | ||
70 | - final IpTunnelEndPoint other = (IpTunnelEndPoint) obj; | ||
71 | - return Objects.equals(this.ip, other.ip); | ||
72 | - } | ||
73 | - return false; | ||
74 | } | 55 | } |
75 | 56 | ||
76 | @Override | 57 | @Override |
77 | public String toString() { | 58 | public String toString() { |
78 | - return MoreObjects.toStringHelper(getClass()).add("ip", ip).toString(); | 59 | + return MoreObjects.toStringHelper(getClass()).add("ip", value).toString(); |
79 | } | 60 | } |
80 | } | 61 | } | ... | ... |
... | @@ -21,7 +21,10 @@ import org.onosproject.net.driver.HandlerBehaviour; | ... | @@ -21,7 +21,10 @@ import org.onosproject.net.driver.HandlerBehaviour; |
21 | 21 | ||
22 | /** | 22 | /** |
23 | * Behaviour for handling various drivers for tunnel configuration. | 23 | * Behaviour for handling various drivers for tunnel configuration. |
24 | + * | ||
25 | + * @deprecated version 1.7.0 - Hummingbird; use interface config tunnel mode | ||
24 | */ | 26 | */ |
27 | +@Deprecated | ||
25 | public interface TunnelConfig extends HandlerBehaviour { | 28 | public interface TunnelConfig extends HandlerBehaviour { |
26 | 29 | ||
27 | /** | 30 | /** | ... | ... |
... | @@ -19,9 +19,12 @@ import org.onosproject.net.Annotated; | ... | @@ -19,9 +19,12 @@ import org.onosproject.net.Annotated; |
19 | import org.onosproject.net.Description; | 19 | import org.onosproject.net.Description; |
20 | 20 | ||
21 | import com.google.common.annotations.Beta; | 21 | import com.google.common.annotations.Beta; |
22 | +import org.onosproject.net.SparseAnnotations; | ||
23 | + | ||
24 | +import java.util.Optional; | ||
22 | 25 | ||
23 | /** | 26 | /** |
24 | - * Describes a tunnel. | 27 | + * Describes a tunnel interface. |
25 | */ | 28 | */ |
26 | @Beta | 29 | @Beta |
27 | public interface TunnelDescription extends Description, Annotated { | 30 | public interface TunnelDescription extends Description, Annotated { |
... | @@ -57,18 +60,18 @@ public interface TunnelDescription extends Description, Annotated { | ... | @@ -57,18 +60,18 @@ public interface TunnelDescription extends Description, Annotated { |
57 | } | 60 | } |
58 | 61 | ||
59 | /** | 62 | /** |
60 | - * Returns the connection point source. | 63 | + * Returns the identifier of the device where the interface is. |
61 | * | 64 | * |
62 | - * @return tunnel source ConnectionPoint | 65 | + * @return device identifier |
63 | */ | 66 | */ |
64 | - TunnelEndPoint src(); | 67 | + Optional<String> deviceId(); |
65 | 68 | ||
66 | /** | 69 | /** |
67 | - * Returns the connection point destination. | 70 | + * Return the name of the tunnel interface. |
68 | * | 71 | * |
69 | - * @return tunnel destination | 72 | + * @return tunnel interface name |
70 | */ | 73 | */ |
71 | - TunnelEndPoint dst(); | 74 | + String ifaceName(); |
72 | 75 | ||
73 | /** | 76 | /** |
74 | * Returns the tunnel type. | 77 | * Returns the tunnel type. |
... | @@ -78,9 +81,120 @@ public interface TunnelDescription extends Description, Annotated { | ... | @@ -78,9 +81,120 @@ public interface TunnelDescription extends Description, Annotated { |
78 | Type type(); | 81 | Type type(); |
79 | 82 | ||
80 | /** | 83 | /** |
84 | + * Returns the local connection point. | ||
85 | + * | ||
86 | + * @return tunnel source ConnectionPoint | ||
87 | + */ | ||
88 | + Optional<TunnelEndPoint> local(); | ||
89 | + | ||
90 | + /** | ||
91 | + * Returns the remote connection point. | ||
92 | + * | ||
93 | + * @return tunnel destination | ||
94 | + */ | ||
95 | + Optional<TunnelEndPoint> remote(); | ||
96 | + | ||
97 | + /** | ||
98 | + * Returns the tunnel key. | ||
99 | + * | ||
100 | + * @return tunnel key | ||
101 | + */ | ||
102 | + Optional<TunnelKey> key(); | ||
103 | + | ||
104 | + /** | ||
105 | + * Returns the connection point source. | ||
106 | + * | ||
107 | + * @deprecated version 1.7.0 - Hummingbird; use local instead | ||
108 | + * @return tunnel source ConnectionPoint | ||
109 | + */ | ||
110 | + @Deprecated | ||
111 | + TunnelEndPoint src(); | ||
112 | + | ||
113 | + /** | ||
114 | + * Returns the connection point destination. | ||
115 | + * | ||
116 | + * @deprecated version 1.7.0 - Hummingbird; use remote instead | ||
117 | + * @return tunnel destination | ||
118 | + */ | ||
119 | + @Deprecated | ||
120 | + TunnelEndPoint dst(); | ||
121 | + | ||
122 | + /** | ||
81 | * Return the name of a tunnel. | 123 | * Return the name of a tunnel. |
82 | * | 124 | * |
125 | + * @deprecated version 1.7.0 - Hummingbird; use ifaceName instead | ||
83 | * @return Tunnel Name | 126 | * @return Tunnel Name |
84 | */ | 127 | */ |
128 | + @Deprecated | ||
85 | TunnelName tunnelName(); | 129 | TunnelName tunnelName(); |
130 | + | ||
131 | + /** | ||
132 | + * Builder of tunnel interface description entities. | ||
133 | + */ | ||
134 | + interface Builder { | ||
135 | + | ||
136 | + /** | ||
137 | + * Returns new tunnel interface description. | ||
138 | + * | ||
139 | + * @return tunnel description | ||
140 | + */ | ||
141 | + TunnelDescription build(); | ||
142 | + | ||
143 | + /** | ||
144 | + * Returns tunnel interface description biulder with supplied device ID. | ||
145 | + * | ||
146 | + * @param deviceId device identifier | ||
147 | + * @return tunnel description builder | ||
148 | + */ | ||
149 | + Builder deviceId(String deviceId); | ||
150 | + | ||
151 | + /** | ||
152 | + * Returns tunnel interface description builder with a given interface name. | ||
153 | + * | ||
154 | + * @param name tunnel interface name | ||
155 | + * @return tunnel description builder | ||
156 | + */ | ||
157 | + Builder ifaceName(String name); | ||
158 | + | ||
159 | + /** | ||
160 | + * Returns tunnel interface description builder with a given tunnel type. | ||
161 | + * | ||
162 | + * @param type tunnel type | ||
163 | + * @return tunnel description builder | ||
164 | + */ | ||
165 | + Builder type(Type type); | ||
166 | + | ||
167 | + /** | ||
168 | + * Returns tunnel interface description builder with a given local | ||
169 | + * tunnel endpoint. | ||
170 | + * | ||
171 | + * @param endpoint tunnel endpoint | ||
172 | + * @return tunnel description builder | ||
173 | + */ | ||
174 | + Builder local(TunnelEndPoint endpoint); | ||
175 | + | ||
176 | + /** | ||
177 | + * Returns tunnel interface description builder with a given remote | ||
178 | + * tunnel endpoint. | ||
179 | + * | ||
180 | + * @param endpoint tunnel endpoint | ||
181 | + * @return tunnel description builder | ||
182 | + */ | ||
183 | + Builder remote(TunnelEndPoint endpoint); | ||
184 | + | ||
185 | + /** | ||
186 | + * Returns tunnel interface description builder with a tunnel key. | ||
187 | + * | ||
188 | + * @return tunnel description builder | ||
189 | + */ | ||
190 | + Builder key(TunnelKey tunnelKey); | ||
191 | + | ||
192 | + /** | ||
193 | + * Returns tunnel interface descriptions builder with other configurations. | ||
194 | + * | ||
195 | + * @param configs configurations | ||
196 | + * @return tunnel description builder | ||
197 | + */ | ||
198 | + Builder otherConfigs(SparseAnnotations configs); | ||
199 | + } | ||
86 | } | 200 | } | ... | ... |
... | @@ -16,13 +16,58 @@ | ... | @@ -16,13 +16,58 @@ |
16 | 16 | ||
17 | package org.onosproject.net.behaviour; | 17 | package org.onosproject.net.behaviour; |
18 | 18 | ||
19 | -import com.google.common.annotations.Beta; | 19 | +import java.util.Objects; |
20 | 20 | ||
21 | /** | 21 | /** |
22 | * Represents for source end point or destination end point of a tunnel. Maybe a tunnel | 22 | * Represents for source end point or destination end point of a tunnel. Maybe a tunnel |
23 | * based on ConnectPoint, IpAddress, MacAddress and so on is built. | 23 | * based on ConnectPoint, IpAddress, MacAddress and so on is built. |
24 | */ | 24 | */ |
25 | -@Beta | 25 | +public class TunnelEndPoint<T> { |
26 | -public interface TunnelEndPoint { | ||
27 | 26 | ||
27 | + protected final T value; | ||
28 | + | ||
29 | + /** | ||
30 | + * Default constructor. | ||
31 | + * | ||
32 | + * @param value value of the tunnel endpoint | ||
33 | + */ | ||
34 | + public TunnelEndPoint(T value) { | ||
35 | + this.value = value; | ||
36 | + } | ||
37 | + | ||
38 | + /** | ||
39 | + * Returns the value. | ||
40 | + * | ||
41 | + * @return tunnel endpoint value | ||
42 | + */ | ||
43 | + public T value() { | ||
44 | + return value; | ||
45 | + } | ||
46 | + | ||
47 | + /** | ||
48 | + * Returns the value as a string. | ||
49 | + * | ||
50 | + * @return string value | ||
51 | + */ | ||
52 | + public String strValue() { | ||
53 | + return value.toString(); | ||
54 | + } | ||
55 | + | ||
56 | + @Override | ||
57 | + public boolean equals(Object obj) { | ||
58 | + if (this == obj) { | ||
59 | + return true; | ||
60 | + } | ||
61 | + if (obj instanceof TunnelEndPoint) { | ||
62 | + final TunnelEndPoint that = (TunnelEndPoint) obj; | ||
63 | + return this.getClass() == that.getClass() && | ||
64 | + Objects.equals(this.value, that.value); | ||
65 | + } | ||
66 | + return false; | ||
67 | + } | ||
68 | + | ||
69 | + @Override | ||
70 | + public int hashCode() { | ||
71 | + return value.hashCode(); | ||
72 | + } | ||
28 | } | 73 | } | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import org.onlab.packet.IpAddress; | ||
19 | + | ||
20 | +/** | ||
21 | + * Static utility methods pertaining to {@link TunnelEndPoint} instances. | ||
22 | + */ | ||
23 | +public final class TunnelEndPoints { | ||
24 | + | ||
25 | + private TunnelEndPoints() { | ||
26 | + } | ||
27 | + | ||
28 | + private static TunnelEndPoint<String> flowEndpoint = new TunnelEndPoint<>("flow"); | ||
29 | + | ||
30 | + /** | ||
31 | + * Returns a tunnel endpoint with supplied IP address. | ||
32 | + * | ||
33 | + * @param ipAddress ip address | ||
34 | + * @return tunnel endpoint instance | ||
35 | + */ | ||
36 | + public static TunnelEndPoint<IpAddress> ipTunnelEndpoint(IpAddress ipAddress) { | ||
37 | + return new TunnelEndPoint<>(ipAddress); | ||
38 | + } | ||
39 | + | ||
40 | + /** | ||
41 | + * Returns a tunnel endpoint with FLOW keyword. | ||
42 | + * | ||
43 | + * @return tunnel endpoint instance | ||
44 | + */ | ||
45 | + public static TunnelEndPoint<String> flowTunnelEndpoint() { | ||
46 | + return flowEndpoint; | ||
47 | + } | ||
48 | +} |
1 | /* | 1 | /* |
2 | - * Copyright 2015-present Open Networking Laboratory | 2 | + * Copyright 2016-present Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -13,42 +13,46 @@ | ... | @@ -13,42 +13,46 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.ovsdb.controller; | ||
17 | 16 | ||
18 | -import static com.google.common.base.MoreObjects.toStringHelper; | 17 | +package org.onosproject.net.behaviour; |
19 | -import static com.google.common.base.Preconditions.checkNotNull; | ||
20 | 18 | ||
21 | import java.util.Objects; | 19 | import java.util.Objects; |
22 | 20 | ||
23 | /** | 21 | /** |
24 | - * The class representing a tunnel name. | 22 | + * Represent for a tunnel key. The tunnel accepts packets with the tunnel key. |
25 | - * This class is immutable. | 23 | + * A positive 24-bit (for Geneve, VXLAN, and LISP), 32-bit (for GRE) or 64-bit (for |
24 | + * GRE64) number value is used for example. Open vSwitch allows "flow" as the key | ||
25 | + * to set this value with matching in the flow table. | ||
26 | */ | 26 | */ |
27 | -public final class OvsdbTunnelName { | 27 | +public final class TunnelKey<T> { |
28 | - private final String value; | 28 | + |
29 | + private final T value; | ||
29 | 30 | ||
30 | /** | 31 | /** |
31 | - * Constructor from a String. | 32 | + * Default constructor. |
32 | * | 33 | * |
33 | - * @param value the tunnel name to use | 34 | + * @param value value of the tunnel key |
34 | */ | 35 | */ |
35 | - public OvsdbTunnelName(String value) { | 36 | + public TunnelKey(T value) { |
36 | - checkNotNull(value, "value is not null"); | ||
37 | this.value = value; | 37 | this.value = value; |
38 | } | 38 | } |
39 | 39 | ||
40 | /** | 40 | /** |
41 | - * Gets the value of tunnel name. | 41 | + * Returns the value. |
42 | * | 42 | * |
43 | - * @return the value of tunnel name | 43 | + * @return tunnel key value |
44 | */ | 44 | */ |
45 | - public String value() { | 45 | + public T value() { |
46 | return value; | 46 | return value; |
47 | } | 47 | } |
48 | 48 | ||
49 | - @Override | 49 | + /** |
50 | - public int hashCode() { | 50 | + * Returns the value as a string. |
51 | - return value.hashCode(); | 51 | + * |
52 | + * @return string value | ||
53 | + */ | ||
54 | + public String strValue() { | ||
55 | + return value.toString(); | ||
52 | } | 56 | } |
53 | 57 | ||
54 | @Override | 58 | @Override |
... | @@ -56,15 +60,16 @@ public final class OvsdbTunnelName { | ... | @@ -56,15 +60,16 @@ public final class OvsdbTunnelName { |
56 | if (this == obj) { | 60 | if (this == obj) { |
57 | return true; | 61 | return true; |
58 | } | 62 | } |
59 | - if (obj instanceof OvsdbTunnelName) { | 63 | + if (obj instanceof TunnelKey) { |
60 | - final OvsdbTunnelName otherOvsdbTunnelName = (OvsdbTunnelName) obj; | 64 | + final TunnelKey that = (TunnelKey) obj; |
61 | - return Objects.equals(this.value, otherOvsdbTunnelName.value); | 65 | + return this.getClass() == that.getClass() && |
66 | + Objects.equals(this.value, that.value); | ||
62 | } | 67 | } |
63 | return false; | 68 | return false; |
64 | } | 69 | } |
65 | 70 | ||
66 | @Override | 71 | @Override |
67 | - public String toString() { | 72 | + public int hashCode() { |
68 | - return toStringHelper(this).add("value", value).toString(); | 73 | + return value.hashCode(); |
69 | } | 74 | } |
70 | } | 75 | } | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +/** | ||
19 | + * Static utility methods pertaining to {@link TunnelKey} instances. | ||
20 | + */ | ||
21 | +public final class TunnelKeys { | ||
22 | + | ||
23 | + private TunnelKeys() { | ||
24 | + } | ||
25 | + | ||
26 | + private static TunnelKey<String> flowKey = new TunnelKey<>("flow"); | ||
27 | + | ||
28 | + /** | ||
29 | + * Returns a tunnel key with FLOW keyword. | ||
30 | + * | ||
31 | + * @return tunnel key instance | ||
32 | + */ | ||
33 | + public static TunnelKey<String> flowTunnelKey() { | ||
34 | + return flowKey; | ||
35 | + } | ||
36 | + | ||
37 | + // TODO add more for various types of tunnel | ||
38 | +} |
... | @@ -24,7 +24,10 @@ import java.util.Objects; | ... | @@ -24,7 +24,10 @@ import java.util.Objects; |
24 | * Represents for a unique tunnel name. TunnelId is generated by ONOS while | 24 | * Represents for a unique tunnel name. TunnelId is generated by ONOS while |
25 | * TunnelName is given by producer. The consumer can borrow tunnels with | 25 | * TunnelName is given by producer. The consumer can borrow tunnels with |
26 | * TunnelId or TunnelName. | 26 | * TunnelId or TunnelName. |
27 | + * | ||
28 | + * @deprecated version 1.7.0 - Hummingbird | ||
27 | */ | 29 | */ |
30 | +@Deprecated | ||
28 | @Beta | 31 | @Beta |
29 | public final class TunnelName { | 32 | public final class TunnelName { |
30 | private final String str; | 33 | private final String str; | ... | ... |
... | @@ -22,6 +22,7 @@ import org.onlab.packet.VlanId; | ... | @@ -22,6 +22,7 @@ import org.onlab.packet.VlanId; |
22 | import org.onosproject.drivers.utilities.XmlConfigParser; | 22 | import org.onosproject.drivers.utilities.XmlConfigParser; |
23 | import org.onosproject.net.DeviceId; | 23 | import org.onosproject.net.DeviceId; |
24 | import org.onosproject.net.behaviour.InterfaceConfig; | 24 | import org.onosproject.net.behaviour.InterfaceConfig; |
25 | +import org.onosproject.net.behaviour.TunnelDescription; | ||
25 | import org.onosproject.net.device.DeviceInterfaceDescription; | 26 | import org.onosproject.net.device.DeviceInterfaceDescription; |
26 | import org.onosproject.net.driver.AbstractHandlerBehaviour; | 27 | import org.onosproject.net.driver.AbstractHandlerBehaviour; |
27 | import org.onosproject.netconf.NetconfController; | 28 | import org.onosproject.netconf.NetconfController; |
... | @@ -480,5 +481,14 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour | ... | @@ -480,5 +481,14 @@ public class InterfaceConfigCiscoIosImpl extends AbstractHandlerBehaviour |
480 | return rpc.toString(); | 481 | return rpc.toString(); |
481 | } | 482 | } |
482 | 483 | ||
484 | + @Override | ||
485 | + public boolean addTunnelMode(String ifaceName, TunnelDescription tunnelDesc) { | ||
486 | + throw new UnsupportedOperationException("Add tunnel mode is not supported"); | ||
487 | + } | ||
488 | + | ||
489 | + @Override | ||
490 | + public boolean removeTunnelMode(String ifaceName) { | ||
491 | + throw new UnsupportedOperationException("Remove tunnel mode is not supported"); | ||
492 | + } | ||
483 | } | 493 | } |
484 | 494 | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onosproject.drivers.ovsdb; | ||
18 | + | ||
19 | +import org.onlab.packet.IpAddress; | ||
20 | +import org.onlab.packet.VlanId; | ||
21 | +import org.onosproject.net.DeviceId; | ||
22 | +import org.onosproject.net.behaviour.InterfaceConfig; | ||
23 | +import org.onosproject.net.behaviour.TunnelDescription; | ||
24 | +import org.onosproject.net.device.DeviceInterfaceDescription; | ||
25 | +import org.onosproject.net.driver.AbstractHandlerBehaviour; | ||
26 | +import org.onosproject.net.driver.DriverHandler; | ||
27 | +import org.onosproject.ovsdb.controller.OvsdbClientService; | ||
28 | +import org.onosproject.ovsdb.controller.OvsdbController; | ||
29 | +import org.onosproject.ovsdb.controller.OvsdbInterface; | ||
30 | +import org.onosproject.ovsdb.controller.OvsdbNodeId; | ||
31 | +import org.slf4j.Logger; | ||
32 | + | ||
33 | +import java.util.List; | ||
34 | + | ||
35 | +import static org.slf4j.LoggerFactory.getLogger; | ||
36 | + | ||
37 | +/** | ||
38 | + * OVSDB-based implementation of interface config behaviour. | ||
39 | + */ | ||
40 | +public class OvsdbInterfaceConfig extends AbstractHandlerBehaviour implements InterfaceConfig { | ||
41 | + | ||
42 | + private final Logger log = getLogger(getClass()); | ||
43 | + | ||
44 | + @Override | ||
45 | + public boolean addTunnelMode(String ifaceName, TunnelDescription tunnelDesc) { | ||
46 | + OvsdbInterface ovsdbIface = OvsdbInterface.builder(tunnelDesc).build(); | ||
47 | + OvsdbClientService ovsdbClient = getOvsdbClient(handler()); | ||
48 | + | ||
49 | + if (!tunnelDesc.deviceId().isPresent()) { | ||
50 | + log.warn("Device ID is required {}", tunnelDesc); | ||
51 | + return false; | ||
52 | + } | ||
53 | + return ovsdbClient.createInterface(tunnelDesc.deviceId().get(), ovsdbIface); | ||
54 | + } | ||
55 | + | ||
56 | + @Override | ||
57 | + public boolean removeTunnelMode(String ifaceName) { | ||
58 | + OvsdbClientService ovsdbClient = getOvsdbClient(handler()); | ||
59 | + return ovsdbClient.dropInterface(ifaceName); | ||
60 | + } | ||
61 | + | ||
62 | + @Override | ||
63 | + public boolean addAccessMode(String ifaceName, VlanId vlanId) { | ||
64 | + // TODO implement | ||
65 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
66 | + } | ||
67 | + | ||
68 | + @Override | ||
69 | + public boolean removeAccessMode(String ifaceName) { | ||
70 | + // TODO implement | ||
71 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
72 | + } | ||
73 | + | ||
74 | + @Override | ||
75 | + public boolean addTrunkMode(String ifaceName, List<VlanId> vlanIds) { | ||
76 | + // TODO implement | ||
77 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
78 | + } | ||
79 | + | ||
80 | + @Override | ||
81 | + public boolean removeTrunkMode(String ifaceName) { | ||
82 | + // TODO implement | ||
83 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
84 | + } | ||
85 | + | ||
86 | + @Override | ||
87 | + public boolean addRateLimit(String ifaceName, short limit) { | ||
88 | + // TODO implement | ||
89 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
90 | + } | ||
91 | + | ||
92 | + @Override | ||
93 | + public boolean removeRateLimit(String ifaceName) { | ||
94 | + // TODO implement | ||
95 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
96 | + } | ||
97 | + | ||
98 | + @Override | ||
99 | + public List<DeviceInterfaceDescription> getInterfaces() { | ||
100 | + // TODO implement | ||
101 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
102 | + } | ||
103 | + | ||
104 | + // deprecated interfaces | ||
105 | + @Override | ||
106 | + public boolean addAccessInterface(DeviceId deviceId, String ifaceName, VlanId vlanId) { | ||
107 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
108 | + } | ||
109 | + | ||
110 | + @Override | ||
111 | + public boolean removeAccessInterface(DeviceId deviceId, String ifaceName) { | ||
112 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
113 | + } | ||
114 | + | ||
115 | + @Override | ||
116 | + public boolean addTrunkInterface(DeviceId deviceId, String ifaceName, List<VlanId> vlanIds) { | ||
117 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
118 | + } | ||
119 | + | ||
120 | + @Override | ||
121 | + public List<DeviceInterfaceDescription> getInterfaces(DeviceId deviceId) { | ||
122 | + return null; | ||
123 | + } | ||
124 | + | ||
125 | + @Override | ||
126 | + public boolean removeTrunkInterface(DeviceId deviceId, String ifaceName) { | ||
127 | + throw new UnsupportedOperationException("Not implemented yet"); | ||
128 | + } | ||
129 | + | ||
130 | + // OvsdbNodeId(IP) is used in the adaptor while DeviceId(ovsdb:IP) | ||
131 | + // is used in the core. So DeviceId need be changed to OvsdbNodeId. | ||
132 | + private OvsdbNodeId changeDeviceIdToNodeId(DeviceId deviceId) { | ||
133 | + String[] splits = deviceId.toString().split(":"); | ||
134 | + if (splits.length < 1) { | ||
135 | + return null; | ||
136 | + } | ||
137 | + IpAddress ipAddress = IpAddress.valueOf(splits[1]); | ||
138 | + return new OvsdbNodeId(ipAddress, 0); | ||
139 | + } | ||
140 | + | ||
141 | + private OvsdbClientService getOvsdbClient(DriverHandler handler) { | ||
142 | + OvsdbController ovsController = handler.get(OvsdbController.class); | ||
143 | + OvsdbNodeId nodeId = changeDeviceIdToNodeId(handler.data().deviceId()); | ||
144 | + | ||
145 | + return ovsController.getOvsdbClient(nodeId); | ||
146 | + } | ||
147 | +} |
... | @@ -17,68 +17,43 @@ | ... | @@ -17,68 +17,43 @@ |
17 | package org.onosproject.drivers.ovsdb; | 17 | package org.onosproject.drivers.ovsdb; |
18 | 18 | ||
19 | import org.onlab.packet.IpAddress; | 19 | import org.onlab.packet.IpAddress; |
20 | -import org.onosproject.net.DefaultAnnotations; | ||
21 | import org.onosproject.net.DeviceId; | 20 | import org.onosproject.net.DeviceId; |
22 | import org.onosproject.net.behaviour.BridgeName; | 21 | import org.onosproject.net.behaviour.BridgeName; |
23 | -import org.onosproject.net.behaviour.DefaultTunnelDescription; | ||
24 | -import org.onosproject.net.behaviour.IpTunnelEndPoint; | ||
25 | import org.onosproject.net.behaviour.TunnelConfig; | 22 | import org.onosproject.net.behaviour.TunnelConfig; |
26 | import org.onosproject.net.behaviour.TunnelDescription; | 23 | import org.onosproject.net.behaviour.TunnelDescription; |
27 | -import org.onosproject.net.behaviour.TunnelName; | ||
28 | import org.onosproject.net.driver.AbstractHandlerBehaviour; | 24 | import org.onosproject.net.driver.AbstractHandlerBehaviour; |
29 | import org.onosproject.net.driver.DriverHandler; | 25 | import org.onosproject.net.driver.DriverHandler; |
30 | import org.onosproject.ovsdb.controller.OvsdbClientService; | 26 | import org.onosproject.ovsdb.controller.OvsdbClientService; |
31 | import org.onosproject.ovsdb.controller.OvsdbController; | 27 | import org.onosproject.ovsdb.controller.OvsdbController; |
28 | +import org.onosproject.ovsdb.controller.OvsdbInterface; | ||
32 | import org.onosproject.ovsdb.controller.OvsdbNodeId; | 29 | import org.onosproject.ovsdb.controller.OvsdbNodeId; |
33 | -import org.onosproject.ovsdb.controller.OvsdbTunnel; | ||
34 | 30 | ||
35 | import java.util.Collection; | 31 | import java.util.Collection; |
36 | -import java.util.Map; | 32 | +import java.util.Collections; |
37 | -import java.util.Set; | ||
38 | -import java.util.stream.Collectors; | ||
39 | 33 | ||
40 | /** | 34 | /** |
41 | * OVSDB-based implementation of tunnel config behaviour. | 35 | * OVSDB-based implementation of tunnel config behaviour. |
36 | + * | ||
37 | + * @deprecated version 1.7.0 - Hummingbird; use interface config instead | ||
42 | */ | 38 | */ |
39 | +@Deprecated | ||
43 | public class OvsdbTunnelConfig extends AbstractHandlerBehaviour | 40 | public class OvsdbTunnelConfig extends AbstractHandlerBehaviour |
44 | implements TunnelConfig { | 41 | implements TunnelConfig { |
45 | 42 | ||
46 | - private static final String DEFAULT_ADDRESS = "0.0.0.0"; | ||
47 | - private static final String OPTION_LOCAL_IP = "local_ip"; | ||
48 | - private static final String OPTION_REMOTE_IP = "remote_ip"; | ||
49 | - | ||
50 | @Override | 43 | @Override |
51 | public boolean createTunnelInterface(BridgeName bridgeName, TunnelDescription tunnel) { | 44 | public boolean createTunnelInterface(BridgeName bridgeName, TunnelDescription tunnel) { |
52 | - Map<String, String> options = ((DefaultAnnotations) tunnel.annotations()).asMap(); | ||
53 | - if (tunnel.src() != null) { | ||
54 | - options.put(OPTION_LOCAL_IP, ((IpTunnelEndPoint) tunnel.src()).ip().toString()); | ||
55 | - } | ||
56 | - if (tunnel.dst() != null) { | ||
57 | - options.put(OPTION_REMOTE_IP, ((IpTunnelEndPoint) tunnel.dst()).ip().toString()); | ||
58 | - } | ||
59 | - | ||
60 | DriverHandler handler = handler(); | 45 | DriverHandler handler = handler(); |
61 | - OvsdbClientService ovsdbClient = getOvsdbNode(handler); | 46 | + OvsdbClientService ovsdbNode = getOvsdbNode(handler); |
62 | - return ovsdbClient.createTunnel(bridgeName.name(), tunnel.tunnelName().toString(), | 47 | + |
63 | - tunnel.type().toString().toLowerCase(), options); | 48 | + OvsdbInterface ovsdbIface = OvsdbInterface.builder(tunnel).build(); |
49 | + return ovsdbNode.createInterface(bridgeName.name(), ovsdbIface); | ||
64 | } | 50 | } |
65 | 51 | ||
66 | @Override | 52 | @Override |
67 | public void removeTunnel(TunnelDescription tunnel) { | 53 | public void removeTunnel(TunnelDescription tunnel) { |
68 | DriverHandler handler = handler(); | 54 | DriverHandler handler = handler(); |
69 | OvsdbClientService ovsdbNode = getOvsdbNode(handler); | 55 | OvsdbClientService ovsdbNode = getOvsdbNode(handler); |
70 | - IpTunnelEndPoint ipSrc = IpTunnelEndPoint.ipTunnelPoint(IpAddress | 56 | + ovsdbNode.dropInterface(tunnel.ifaceName()); |
71 | - .valueOf(DEFAULT_ADDRESS)); | ||
72 | - IpTunnelEndPoint ipDst = IpTunnelEndPoint.ipTunnelPoint(IpAddress | ||
73 | - .valueOf(DEFAULT_ADDRESS)); | ||
74 | - if (tunnel.src() instanceof IpTunnelEndPoint) { | ||
75 | - ipSrc = (IpTunnelEndPoint) tunnel.src(); | ||
76 | - } | ||
77 | - if (tunnel.dst() instanceof IpTunnelEndPoint) { | ||
78 | - ipDst = (IpTunnelEndPoint) tunnel.dst(); | ||
79 | - } | ||
80 | - //Even if source point ip or destination point ip equals 0:0:0:0, it is still work-in-progress. | ||
81 | - ovsdbNode.dropTunnel(ipSrc.ip(), ipDst.ip()); | ||
82 | } | 57 | } |
83 | 58 | ||
84 | @Override | 59 | @Override |
... | @@ -89,20 +64,7 @@ public class OvsdbTunnelConfig extends AbstractHandlerBehaviour | ... | @@ -89,20 +64,7 @@ public class OvsdbTunnelConfig extends AbstractHandlerBehaviour |
89 | 64 | ||
90 | @Override | 65 | @Override |
91 | public Collection<TunnelDescription> getTunnels() { | 66 | public Collection<TunnelDescription> getTunnels() { |
92 | - DriverHandler handler = handler(); | 67 | + return Collections.emptyList(); |
93 | - OvsdbClientService ovsdbNode = getOvsdbNode(handler); | ||
94 | - Set<OvsdbTunnel> tunnels = ovsdbNode.getTunnels(); | ||
95 | - | ||
96 | - return tunnels.stream() | ||
97 | - .map(x -> | ||
98 | - new DefaultTunnelDescription( | ||
99 | - IpTunnelEndPoint.ipTunnelPoint(x.localIp()), | ||
100 | - IpTunnelEndPoint.ipTunnelPoint(x.remoteIp()), | ||
101 | - TunnelDescription.Type.VXLAN, | ||
102 | - TunnelName.tunnelName(x.tunnelName().toString()) | ||
103 | - ) | ||
104 | - ) | ||
105 | - .collect(Collectors.toSet()); | ||
106 | } | 68 | } |
107 | 69 | ||
108 | // OvsdbNodeId(IP) is used in the adaptor while DeviceId(ovsdb:IP) | 70 | // OvsdbNodeId(IP) is used in the adaptor while DeviceId(ovsdb:IP) | ... | ... |
... | @@ -21,6 +21,8 @@ | ... | @@ -21,6 +21,8 @@ |
21 | impl="org.onosproject.drivers.ovsdb.OvsdbTunnelConfig"/> | 21 | impl="org.onosproject.drivers.ovsdb.OvsdbTunnelConfig"/> |
22 | <behaviour api="org.onosproject.net.behaviour.BridgeConfig" | 22 | <behaviour api="org.onosproject.net.behaviour.BridgeConfig" |
23 | impl="org.onosproject.drivers.ovsdb.OvsdbBridgeConfig"/> | 23 | impl="org.onosproject.drivers.ovsdb.OvsdbBridgeConfig"/> |
24 | + <behaviour api="org.onosproject.net.behaviour.InterfaceConfig" | ||
25 | + impl="org.onosproject.drivers.ovsdb.OvsdbInterfaceConfig"/> | ||
24 | </driver> | 26 | </driver> |
25 | <driver name="ovs" extends="default" | 27 | <driver name="ovs" extends="default" |
26 | manufacturer="Nicira, Inc\." hwVersion="Open vSwitch" swVersion="2\..*"> | 28 | manufacturer="Nicira, Inc\." hwVersion="Open vSwitch" swVersion="2\..*"> | ... | ... |
... | @@ -16,16 +16,12 @@ | ... | @@ -16,16 +16,12 @@ |
16 | package org.onosproject.ovsdb.controller; | 16 | package org.onosproject.ovsdb.controller; |
17 | 17 | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | - | ||
20 | import org.onlab.packet.IpAddress; | 19 | import org.onlab.packet.IpAddress; |
21 | import org.onosproject.net.DeviceId; | 20 | import org.onosproject.net.DeviceId; |
22 | import org.onosproject.net.behaviour.ControllerInfo; | 21 | import org.onosproject.net.behaviour.ControllerInfo; |
23 | import org.onosproject.ovsdb.rfc.jsonrpc.OvsdbRpc; | 22 | import org.onosproject.ovsdb.rfc.jsonrpc.OvsdbRpc; |
24 | -import org.onosproject.ovsdb.rfc.message.OperationResult; | ||
25 | import org.onosproject.ovsdb.rfc.message.TableUpdates; | 23 | import org.onosproject.ovsdb.rfc.message.TableUpdates; |
26 | import org.onosproject.ovsdb.rfc.notation.Row; | 24 | import org.onosproject.ovsdb.rfc.notation.Row; |
27 | -import org.onosproject.ovsdb.rfc.notation.Uuid; | ||
28 | -import org.onosproject.ovsdb.rfc.operations.Operation; | ||
29 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; | 25 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; |
30 | 26 | ||
31 | import java.util.List; | 27 | import java.util.List; |
... | @@ -46,28 +42,43 @@ public interface OvsdbClientService extends OvsdbRpc { | ... | @@ -46,28 +42,43 @@ public interface OvsdbClientService extends OvsdbRpc { |
46 | /** | 42 | /** |
47 | * Creates a tunnel port with given options. | 43 | * Creates a tunnel port with given options. |
48 | * | 44 | * |
45 | + * @deprecated version 1.7.0 - Hummingbird | ||
49 | * @param bridgeName bridge name | 46 | * @param bridgeName bridge name |
50 | * @param portName port name | 47 | * @param portName port name |
51 | * @param tunnelType tunnel type | 48 | * @param tunnelType tunnel type |
52 | * @param options tunnel options | 49 | * @param options tunnel options |
53 | * @return true if tunnel creation is successful, false otherwise | 50 | * @return true if tunnel creation is successful, false otherwise |
54 | */ | 51 | */ |
55 | - boolean createTunnel(String bridgeName, String portName, String tunnelType, Map<String, String> options); | 52 | + @Deprecated |
53 | + boolean createTunnel(String bridgeName, String portName, String tunnelType, | ||
54 | + Map<String, String> options); | ||
56 | 55 | ||
57 | /** | 56 | /** |
58 | * Drops the configuration for tunnel. | 57 | * Drops the configuration for tunnel. |
59 | * | 58 | * |
59 | + * @deprecated version 1.7.0 - Hummingbird | ||
60 | * @param srcIp source IP address | 60 | * @param srcIp source IP address |
61 | * @param dstIp destination IP address | 61 | * @param dstIp destination IP address |
62 | */ | 62 | */ |
63 | + @Deprecated | ||
63 | void dropTunnel(IpAddress srcIp, IpAddress dstIp); | 64 | void dropTunnel(IpAddress srcIp, IpAddress dstIp); |
64 | 65 | ||
65 | /** | 66 | /** |
66 | - * Gets tunnels of node. | 67 | + * Creates an interface with a given OVSDB interface description. |
68 | + * | ||
69 | + * @param bridgeName bridge name | ||
70 | + * @param ovsdbIface ovsdb interface description | ||
71 | + * @return true if interface creation is successful, false otherwise | ||
72 | + */ | ||
73 | + boolean createInterface(String bridgeName, OvsdbInterface ovsdbIface); | ||
74 | + | ||
75 | + /** | ||
76 | + * Removes an interface with the supplied interface name. | ||
67 | * | 77 | * |
68 | - * @return set of tunnels; empty if no tunnel is find | 78 | + * @param ifaceName interface name |
79 | + * @return true if interface creation is successful, false otherwise | ||
69 | */ | 80 | */ |
70 | - Set<OvsdbTunnel> getTunnels(); | 81 | + boolean dropInterface(String ifaceName); |
71 | 82 | ||
72 | /** | 83 | /** |
73 | * Creates a bridge. | 84 | * Creates a bridge. |
... | @@ -142,17 +153,6 @@ public interface OvsdbClientService extends OvsdbRpc { | ... | @@ -142,17 +153,6 @@ public interface OvsdbClientService extends OvsdbRpc { |
142 | ControllerInfo localController(); | 153 | ControllerInfo localController(); |
143 | 154 | ||
144 | /** | 155 | /** |
145 | - * Sets the Controllers for the specified bridge. | ||
146 | - * <p> | ||
147 | - * This method will replace the existing controller list with the new controller | ||
148 | - * list. | ||
149 | - * | ||
150 | - * @param bridgeUuid bridge uuid | ||
151 | - * @param controllers list of controllers | ||
152 | - */ | ||
153 | - void setControllersWithUuid(Uuid bridgeUuid, List<ControllerInfo> controllers); | ||
154 | - | ||
155 | - /** | ||
156 | * Sets the Controllers for the specified device. | 156 | * Sets the Controllers for the specified device. |
157 | * <p> | 157 | * <p> |
158 | * This method will replace the existing controller list with the new controller | 158 | * This method will replace the existing controller list with the new controller |
... | @@ -211,32 +211,6 @@ public interface OvsdbClientService extends OvsdbRpc { | ... | @@ -211,32 +211,6 @@ public interface OvsdbClientService extends OvsdbRpc { |
211 | String getPortUuid(String portName, String bridgeUuid); | 211 | String getPortUuid(String portName, String bridgeUuid); |
212 | 212 | ||
213 | /** | 213 | /** |
214 | - * Gets the Interface uuid. | ||
215 | - * | ||
216 | - * @param portUuid port uuid | ||
217 | - * @param portName port name | ||
218 | - * @return interface uuid, empty if no uuid is find | ||
219 | - */ | ||
220 | - String getInterfaceUuid(String portUuid, String portName); | ||
221 | - | ||
222 | - /** | ||
223 | - * Gets the Controller uuid. | ||
224 | - * | ||
225 | - * @param controllerName controller name | ||
226 | - * @param controllerTarget controller target | ||
227 | - * @return controller uuid, empty if no uuid is find | ||
228 | - */ | ||
229 | - String getControllerUuid(String controllerName, String controllerTarget); | ||
230 | - | ||
231 | - /** | ||
232 | - * Gets the OVS uuid. | ||
233 | - * | ||
234 | - * @param dbName database name | ||
235 | - * @return ovs uuid, empty if no uuid is find | ||
236 | - */ | ||
237 | - String getOvsUuid(String dbName); | ||
238 | - | ||
239 | - /** | ||
240 | * Gets the OVSDB database schema. | 214 | * Gets the OVSDB database schema. |
241 | * | 215 | * |
242 | * @param dbName database name | 216 | * @param dbName database name |
... | @@ -254,16 +228,6 @@ public interface OvsdbClientService extends OvsdbRpc { | ... | @@ -254,16 +228,6 @@ public interface OvsdbClientService extends OvsdbRpc { |
254 | ListenableFuture<TableUpdates> monitorTables(String dbName, String id); | 228 | ListenableFuture<TableUpdates> monitorTables(String dbName, String id); |
255 | 229 | ||
256 | /** | 230 | /** |
257 | - * Gets the OVSDB config operation result. | ||
258 | - * | ||
259 | - * @param dbName database name | ||
260 | - * @param operations the list of operations | ||
261 | - * @return operation results | ||
262 | - */ | ||
263 | - ListenableFuture<List<OperationResult>> transactConfig(String dbName, | ||
264 | - List<Operation> operations); | ||
265 | - | ||
266 | - /** | ||
267 | * Gets the OVSDB database schema from local. | 231 | * Gets the OVSDB database schema from local. |
268 | * | 232 | * |
269 | * @param dbName database name | 233 | * @param dbName database name | ... | ... |
... | @@ -45,6 +45,10 @@ public final class OvsdbConstant { | ... | @@ -45,6 +45,10 @@ public final class OvsdbConstant { |
45 | public static final String DATAPATH_ID = "datapath-id"; | 45 | public static final String DATAPATH_ID = "datapath-id"; |
46 | public static final String DISABLE_INBAND = "disable-in-band"; | 46 | public static final String DISABLE_INBAND = "disable-in-band"; |
47 | 47 | ||
48 | + /** Port table. */ | ||
49 | + public static final String PORT = "Port"; | ||
50 | + public static final String INTERFACES = "interfaces"; | ||
51 | + | ||
48 | /** Interface table. */ | 52 | /** Interface table. */ |
49 | public static final String INTERFACE = "Interface"; | 53 | public static final String INTERFACE = "Interface"; |
50 | // type | 54 | // type |
... | @@ -52,13 +56,14 @@ public final class OvsdbConstant { | ... | @@ -52,13 +56,14 @@ public final class OvsdbConstant { |
52 | // virtual machine identifiers | 56 | // virtual machine identifiers |
53 | public static final String EXTERNAL_ID_INTERFACE_ID = "iface-id"; | 57 | public static final String EXTERNAL_ID_INTERFACE_ID = "iface-id"; |
54 | public static final String EXTERNAL_ID_VM_MAC = "attached-mac"; | 58 | public static final String EXTERNAL_ID_VM_MAC = "attached-mac"; |
59 | + // tunnel interface options | ||
60 | + public static final String TUNNEL_LOCAL_IP = "local_ip"; | ||
61 | + public static final String TUNNEL_REMOTE_IP = "remote_ip"; | ||
62 | + public static final String TUNNEL_KEY = "key"; | ||
55 | 63 | ||
56 | /** Controller table. */ | 64 | /** Controller table. */ |
57 | public static final String CONTROLLER = "Controller"; | 65 | public static final String CONTROLLER = "Controller"; |
58 | 66 | ||
59 | - /** Port table. */ | ||
60 | - public static final String PORT = "Port"; | ||
61 | - | ||
62 | /** Ovsdb bridge name. */ | 67 | /** Ovsdb bridge name. */ |
63 | // TODO remove this particular bridge name from OVSDB provider | 68 | // TODO remove this particular bridge name from OVSDB provider |
64 | public static final String INTEGRATION_BRIDGE = "br-int"; | 69 | public static final String INTEGRATION_BRIDGE = "br-int"; | ... | ... |
1 | +/* | ||
2 | + * Copyright 2015-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.ovsdb.controller; | ||
17 | + | ||
18 | +import static com.google.common.base.MoreObjects.toStringHelper; | ||
19 | +import static org.onosproject.ovsdb.controller.OvsdbConstant.*; | ||
20 | + | ||
21 | +import java.util.Map; | ||
22 | +import java.util.Objects; | ||
23 | + | ||
24 | +import com.google.common.collect.Maps; | ||
25 | +import org.onosproject.net.DefaultAnnotations; | ||
26 | +import org.onosproject.net.behaviour.TunnelDescription; | ||
27 | + | ||
28 | +/** | ||
29 | + * The class representing an OVSDB interface. | ||
30 | + * This class is immutable. | ||
31 | + */ | ||
32 | +public final class OvsdbInterface { | ||
33 | + | ||
34 | + public enum Type { | ||
35 | + /** | ||
36 | + * An ordinary network device, e.g. eth0 on Linux. | ||
37 | + */ | ||
38 | + SYSTEM, | ||
39 | + /** | ||
40 | + * A simulated network device that sends and receives traffic. | ||
41 | + */ | ||
42 | + INTERNAL, | ||
43 | + /** | ||
44 | + * A TUN/TAP device managed by Open vSwitch. | ||
45 | + */ | ||
46 | + TAP, | ||
47 | + /** | ||
48 | + * An Ethernet over RFC 2890 Generic Routing Encapsulation over IPv4 IPsec tunnel. | ||
49 | + */ | ||
50 | + GRE, | ||
51 | + /** | ||
52 | + * An Ethernet tunnel over the experimental, UDP-based VXLAN protocol. | ||
53 | + */ | ||
54 | + VXLAN, | ||
55 | + /** | ||
56 | + * A pair of virtual devices that act as a patch cable. | ||
57 | + */ | ||
58 | + PATCH | ||
59 | + } | ||
60 | + | ||
61 | + private final String name; | ||
62 | + private final Type type; | ||
63 | + | ||
64 | + /* Adds more configs */ | ||
65 | + | ||
66 | + /* Fields start with "options:" prefix defined in the OVSDB */ | ||
67 | + private final Map<String, String> options; | ||
68 | + | ||
69 | + private OvsdbInterface(String name, Type type, Map<String, String> options) { | ||
70 | + this.name = name; | ||
71 | + this.type = type; | ||
72 | + this.options = Maps.newHashMap(options); | ||
73 | + } | ||
74 | + | ||
75 | + /** | ||
76 | + * Returns name of the interface. | ||
77 | + * | ||
78 | + * @return interface name | ||
79 | + */ | ||
80 | + public String name() { | ||
81 | + return name; | ||
82 | + } | ||
83 | + | ||
84 | + /** | ||
85 | + * Returns type of the interface. | ||
86 | + * | ||
87 | + * @return interface type | ||
88 | + */ | ||
89 | + public Type type() { | ||
90 | + return type; | ||
91 | + } | ||
92 | + | ||
93 | + /** | ||
94 | + * Returns type of the interface with lowercase string. | ||
95 | + * | ||
96 | + * @return interface type string | ||
97 | + */ | ||
98 | + public String typeToString() { | ||
99 | + return type.name().toLowerCase(); | ||
100 | + } | ||
101 | + | ||
102 | + /** | ||
103 | + * Returns optional configs of the interface. | ||
104 | + * | ||
105 | + * @return interface options | ||
106 | + */ | ||
107 | + public Map<String, String> options() { | ||
108 | + return options; | ||
109 | + } | ||
110 | + | ||
111 | + @Override | ||
112 | + public int hashCode() { | ||
113 | + return Objects.hash(name); | ||
114 | + } | ||
115 | + | ||
116 | + @Override | ||
117 | + public boolean equals(Object obj) { | ||
118 | + if (this == obj) { | ||
119 | + return true; | ||
120 | + } | ||
121 | + if (obj instanceof OvsdbInterface) { | ||
122 | + final OvsdbInterface otherOvsdbInterface = (OvsdbInterface) obj; | ||
123 | + return Objects.equals(this.name, otherOvsdbInterface.name); | ||
124 | + } | ||
125 | + return false; | ||
126 | + } | ||
127 | + | ||
128 | + @Override | ||
129 | + public String toString() { | ||
130 | + return toStringHelper(this) | ||
131 | + .add("name", name) | ||
132 | + .add("type", type) | ||
133 | + .add("options", options) | ||
134 | + .toString(); | ||
135 | + } | ||
136 | + | ||
137 | + /** | ||
138 | + * Returns new OVSDB interface builder. | ||
139 | + * | ||
140 | + * @return ovsdb interface builder | ||
141 | + */ | ||
142 | + public static OvsdbInterface.Builder builder() { | ||
143 | + return new Builder(); | ||
144 | + } | ||
145 | + | ||
146 | + /** | ||
147 | + * Returns new OVSDB interface builder with tunnel interface description. | ||
148 | + * | ||
149 | + * @param tunnelDesc tunnel interface description | ||
150 | + * @return ovsdb interface builder | ||
151 | + */ | ||
152 | + public static OvsdbInterface.Builder builder(TunnelDescription tunnelDesc) { | ||
153 | + return new Builder(tunnelDesc); | ||
154 | + } | ||
155 | + | ||
156 | + /** | ||
157 | + * Builder of OVSDB interface entities. | ||
158 | + */ | ||
159 | + public static final class Builder { | ||
160 | + private String name; | ||
161 | + private Type type; | ||
162 | + private Map<String, String> options = Maps.newHashMap(); | ||
163 | + | ||
164 | + private Builder() { | ||
165 | + } | ||
166 | + | ||
167 | + /** | ||
168 | + * Constructs a builder with a given tunnel interface description. | ||
169 | + * | ||
170 | + * @param tunnelDesc tunnel interface description | ||
171 | + */ | ||
172 | + private Builder(TunnelDescription tunnelDesc) { | ||
173 | + this.name = tunnelDesc.ifaceName(); | ||
174 | + this.type = Type.valueOf(tunnelDesc.type().name()); | ||
175 | + | ||
176 | + if (tunnelDesc.local().isPresent()) { | ||
177 | + options.put(TUNNEL_LOCAL_IP, tunnelDesc.local().get().strValue()); | ||
178 | + } | ||
179 | + if (tunnelDesc.remote().isPresent()) { | ||
180 | + options.put(TUNNEL_REMOTE_IP, tunnelDesc.remote().get().strValue()); | ||
181 | + } | ||
182 | + if (tunnelDesc.key().isPresent()) { | ||
183 | + options.put(TUNNEL_KEY, tunnelDesc.key().get().strValue()); | ||
184 | + } | ||
185 | + | ||
186 | + // set other configurations if there are any | ||
187 | + options.putAll(((DefaultAnnotations) tunnelDesc.annotations()).asMap()); | ||
188 | + } | ||
189 | + | ||
190 | + /** | ||
191 | + * Returns new OVSDB interface. | ||
192 | + * | ||
193 | + * @return ovsdb interface | ||
194 | + */ | ||
195 | + public OvsdbInterface build() { | ||
196 | + return new OvsdbInterface(name, type, options); | ||
197 | + } | ||
198 | + | ||
199 | + /** | ||
200 | + * Returns OVSDB interface builder with a given name. | ||
201 | + * | ||
202 | + * @param name name of the interface | ||
203 | + * @return ovsdb interface builder | ||
204 | + */ | ||
205 | + public Builder name(String name) { | ||
206 | + this.name = name; | ||
207 | + return this; | ||
208 | + } | ||
209 | + | ||
210 | + /** | ||
211 | + * Returns OVSDB interface builder with a given interface type. | ||
212 | + * | ||
213 | + * @param type type of the interface | ||
214 | + * @return ovsdb interface builder | ||
215 | + */ | ||
216 | + public Builder type(Type type) { | ||
217 | + this.type = type; | ||
218 | + return this; | ||
219 | + } | ||
220 | + | ||
221 | + /** | ||
222 | + * Returns OVSDB interface builder with given options. | ||
223 | + * | ||
224 | + * @param options map of options | ||
225 | + * @return ovsdb interface builder | ||
226 | + */ | ||
227 | + public Builder options(Map<String, String> options) { | ||
228 | + this.options = Maps.newHashMap(options); | ||
229 | + return this; | ||
230 | + } | ||
231 | + } | ||
232 | +} |
protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbTunnel.java
deleted
100644 → 0
1 | -/* | ||
2 | - * Copyright 2015-present Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | -package org.onosproject.ovsdb.controller; | ||
17 | - | ||
18 | -import static com.google.common.base.MoreObjects.toStringHelper; | ||
19 | -import static com.google.common.base.Preconditions.checkNotNull; | ||
20 | - | ||
21 | -import java.util.Objects; | ||
22 | - | ||
23 | -import org.onlab.packet.IpAddress; | ||
24 | - | ||
25 | -/** | ||
26 | - * The class representing an ovsdb tunnel. | ||
27 | - * This class is immutable. | ||
28 | - */ | ||
29 | -public final class OvsdbTunnel { | ||
30 | - | ||
31 | - private final IpAddress localIp; | ||
32 | - private final IpAddress remoteIp; | ||
33 | - | ||
34 | - public enum Type { | ||
35 | - VXLAN, GRE | ||
36 | - } | ||
37 | - | ||
38 | - private final Type tunnelType; | ||
39 | - private final OvsdbTunnelName tunnelName; | ||
40 | - | ||
41 | - /** | ||
42 | - * Constructor from an IpAddress localIp, IpAddress remoteIp Type tunnelType, | ||
43 | - * OvsdbTunnelName tunnelName. | ||
44 | - * | ||
45 | - * @param localIp the localIp to use | ||
46 | - * @param remoteIp the remoteIp to use | ||
47 | - * @param tunnelType the tunnelType to use | ||
48 | - * @param tunnelName the tunnelName to use | ||
49 | - */ | ||
50 | - public OvsdbTunnel(IpAddress localIp, IpAddress remoteIp, Type tunnelType, | ||
51 | - OvsdbTunnelName tunnelName) { | ||
52 | - checkNotNull(localIp, "portName is not null"); | ||
53 | - checkNotNull(remoteIp, "portName is not null"); | ||
54 | - checkNotNull(tunnelName, "portName is not null"); | ||
55 | - this.localIp = localIp; | ||
56 | - this.remoteIp = remoteIp; | ||
57 | - this.tunnelType = tunnelType; | ||
58 | - this.tunnelName = tunnelName; | ||
59 | - } | ||
60 | - | ||
61 | - /** | ||
62 | - * Gets the local IP of tunnel. | ||
63 | - * | ||
64 | - * @return the local IP of tunnel | ||
65 | - */ | ||
66 | - public IpAddress localIp() { | ||
67 | - return localIp; | ||
68 | - } | ||
69 | - | ||
70 | - /** | ||
71 | - * Gets the remote IP of tunnel. | ||
72 | - * | ||
73 | - * @return the remote IP of tunnel | ||
74 | - */ | ||
75 | - public IpAddress remoteIp() { | ||
76 | - return remoteIp; | ||
77 | - } | ||
78 | - | ||
79 | - /** | ||
80 | - * Gets the tunnel type of tunnel. | ||
81 | - * | ||
82 | - * @return the tunnel type of tunnel | ||
83 | - */ | ||
84 | - public Type tunnelType() { | ||
85 | - return tunnelType; | ||
86 | - } | ||
87 | - | ||
88 | - /** | ||
89 | - * Gets the tunnel name of tunnel. | ||
90 | - * | ||
91 | - * @return the tunnel name of tunnel | ||
92 | - */ | ||
93 | - public OvsdbTunnelName tunnelName() { | ||
94 | - return tunnelName; | ||
95 | - } | ||
96 | - | ||
97 | - @Override | ||
98 | - public int hashCode() { | ||
99 | - return Objects.hash(localIp, remoteIp, tunnelType, tunnelName); | ||
100 | - } | ||
101 | - | ||
102 | - @Override | ||
103 | - public boolean equals(Object obj) { | ||
104 | - if (this == obj) { | ||
105 | - return true; | ||
106 | - } | ||
107 | - if (obj instanceof OvsdbTunnel) { | ||
108 | - final OvsdbTunnel otherOvsdbTunnel = (OvsdbTunnel) obj; | ||
109 | - return Objects.equals(this.localIp, otherOvsdbTunnel.localIp) | ||
110 | - && Objects.equals(this.remoteIp, otherOvsdbTunnel.remoteIp) | ||
111 | - && Objects.equals(this.tunnelType, | ||
112 | - otherOvsdbTunnel.tunnelType) | ||
113 | - && Objects.equals(this.tunnelName, | ||
114 | - otherOvsdbTunnel.tunnelName); | ||
115 | - } | ||
116 | - return false; | ||
117 | - } | ||
118 | - | ||
119 | - @Override | ||
120 | - public String toString() { | ||
121 | - return toStringHelper(this).add("localIp", localIp.toString()) | ||
122 | - .add("remoteIp", remoteIp.toString()) | ||
123 | - .add("tunnelType", tunnelType).add("tunnelName", tunnelName) | ||
124 | - .toString(); | ||
125 | - } | ||
126 | -} |
... | @@ -32,6 +32,8 @@ import org.onosproject.net.behaviour.BridgeDescription; | ... | @@ -32,6 +32,8 @@ import org.onosproject.net.behaviour.BridgeDescription; |
32 | import org.onosproject.net.behaviour.ControllerInfo; | 32 | import org.onosproject.net.behaviour.ControllerInfo; |
33 | import org.onosproject.ovsdb.controller.OvsdbBridge; | 33 | import org.onosproject.ovsdb.controller.OvsdbBridge; |
34 | import org.onosproject.ovsdb.controller.OvsdbClientService; | 34 | import org.onosproject.ovsdb.controller.OvsdbClientService; |
35 | +import org.onosproject.ovsdb.controller.OvsdbInterface; | ||
36 | +import org.onosproject.ovsdb.controller.OvsdbInterface.Type; | ||
35 | import org.onosproject.ovsdb.controller.OvsdbNodeId; | 37 | import org.onosproject.ovsdb.controller.OvsdbNodeId; |
36 | import org.onosproject.ovsdb.controller.OvsdbPort; | 38 | import org.onosproject.ovsdb.controller.OvsdbPort; |
37 | import org.onosproject.ovsdb.controller.OvsdbPortName; | 39 | import org.onosproject.ovsdb.controller.OvsdbPortName; |
... | @@ -39,7 +41,6 @@ import org.onosproject.ovsdb.controller.OvsdbPortNumber; | ... | @@ -39,7 +41,6 @@ import org.onosproject.ovsdb.controller.OvsdbPortNumber; |
39 | import org.onosproject.ovsdb.controller.OvsdbRowStore; | 41 | import org.onosproject.ovsdb.controller.OvsdbRowStore; |
40 | import org.onosproject.ovsdb.controller.OvsdbStore; | 42 | import org.onosproject.ovsdb.controller.OvsdbStore; |
41 | import org.onosproject.ovsdb.controller.OvsdbTableStore; | 43 | import org.onosproject.ovsdb.controller.OvsdbTableStore; |
42 | -import org.onosproject.ovsdb.controller.OvsdbTunnel; | ||
43 | import org.onosproject.ovsdb.rfc.jsonrpc.Callback; | 44 | import org.onosproject.ovsdb.rfc.jsonrpc.Callback; |
44 | import org.onosproject.ovsdb.rfc.message.OperationResult; | 45 | import org.onosproject.ovsdb.rfc.message.OperationResult; |
45 | import org.onosproject.ovsdb.rfc.message.TableUpdates; | 46 | import org.onosproject.ovsdb.rfc.message.TableUpdates; |
... | @@ -72,11 +73,11 @@ import org.slf4j.LoggerFactory; | ... | @@ -72,11 +73,11 @@ import org.slf4j.LoggerFactory; |
72 | 73 | ||
73 | import java.net.InetSocketAddress; | 74 | import java.net.InetSocketAddress; |
74 | import java.util.ArrayList; | 75 | import java.util.ArrayList; |
75 | -import java.util.Arrays; | ||
76 | import java.util.HashSet; | 76 | import java.util.HashSet; |
77 | import java.util.Iterator; | 77 | import java.util.Iterator; |
78 | import java.util.List; | 78 | import java.util.List; |
79 | import java.util.Map; | 79 | import java.util.Map; |
80 | +import java.util.Optional; | ||
80 | import java.util.Set; | 81 | import java.util.Set; |
81 | import java.util.concurrent.ConcurrentMap; | 82 | import java.util.concurrent.ConcurrentMap; |
82 | import java.util.concurrent.ExecutionException; | 83 | import java.util.concurrent.ExecutionException; |
... | @@ -102,7 +103,6 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -102,7 +103,6 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
102 | private final Map<String, String> requestMethod = Maps.newHashMap(); | 103 | private final Map<String, String> requestMethod = Maps.newHashMap(); |
103 | private final Map<String, SettableFuture<? extends Object>> requestResult = Maps.newHashMap(); | 104 | private final Map<String, SettableFuture<? extends Object>> requestResult = Maps.newHashMap(); |
104 | private final Map<String, DatabaseSchema> schema = Maps.newHashMap(); | 105 | private final Map<String, DatabaseSchema> schema = Maps.newHashMap(); |
105 | - private final Set<OvsdbTunnel> ovsdbTunnels = new HashSet<OvsdbTunnel>(); | ||
106 | 106 | ||
107 | /** | 107 | /** |
108 | * Creates an OvsdbClient. | 108 | * Creates an OvsdbClient. |
... | @@ -263,38 +263,8 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -263,38 +263,8 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
263 | } | 263 | } |
264 | 264 | ||
265 | @Override | 265 | @Override |
266 | - public String getInterfaceUuid(String portUuid, String portName) { | ||
267 | - DatabaseSchema dbSchema = schema.get(DATABASENAME); | ||
268 | - | ||
269 | - Row portRow = getRow(DATABASENAME, PORT, portUuid); | ||
270 | - Port port = (Port) TableGenerator.getTable(dbSchema, portRow, OvsdbTable.PORT); | ||
271 | - | ||
272 | - if (port != null) { | ||
273 | - OvsdbSet setInterfaces = (OvsdbSet) port.getInterfacesColumn().data(); | ||
274 | - @SuppressWarnings("unchecked") | ||
275 | - Set<Uuid> interfaces = setInterfaces.set(); | ||
276 | - | ||
277 | - if (interfaces == null || interfaces.size() == 0) { | ||
278 | - log.warn("The interface uuid is null"); | ||
279 | - return null; | ||
280 | - } | ||
281 | - | ||
282 | - for (Uuid uuid : interfaces) { | ||
283 | - Row intfRow = getRow(DATABASENAME, INTERFACE, uuid.value()); | ||
284 | - Interface intf = (Interface) TableGenerator | ||
285 | - .getTable(dbSchema, intfRow, OvsdbTable.INTERFACE); | ||
286 | - if (intf != null && portName.equalsIgnoreCase(intf.getName())) { | ||
287 | - return uuid.value(); | ||
288 | - } | ||
289 | - } | ||
290 | - } | ||
291 | - return null; | ||
292 | - } | ||
293 | - | ||
294 | - @Override | ||
295 | public String getBridgeUuid(String bridgeName) { | 266 | public String getBridgeUuid(String bridgeName) { |
296 | DatabaseSchema dbSchema = schema.get(DATABASENAME); | 267 | DatabaseSchema dbSchema = schema.get(DATABASENAME); |
297 | - | ||
298 | OvsdbRowStore rowStore = getRowStore(DATABASENAME, BRIDGE); | 268 | OvsdbRowStore rowStore = getRowStore(DATABASENAME, BRIDGE); |
299 | if (rowStore == null) { | 269 | if (rowStore == null) { |
300 | log.debug("The bridge uuid is null"); | 270 | log.debug("The bridge uuid is null"); |
... | @@ -317,32 +287,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -317,32 +287,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
317 | return null; | 287 | return null; |
318 | } | 288 | } |
319 | 289 | ||
320 | - @Override | 290 | + private String getOvsUuid(String dbName) { |
321 | - public String getControllerUuid(String controllerName, String controllerTarget) { | ||
322 | - DatabaseSchema dbSchema = schema.get(DATABASENAME); | ||
323 | - OvsdbRowStore rowStore = getRowStore(DATABASENAME, CONTROLLER); | ||
324 | - if (rowStore == null) { | ||
325 | - log.debug("The controller uuid is null"); | ||
326 | - return null; | ||
327 | - } | ||
328 | - | ||
329 | - ConcurrentMap<String, Row> controllerTableRows = rowStore.getRowStore(); | ||
330 | - if (controllerTableRows != null) { | ||
331 | - for (String uuid : controllerTableRows.keySet()) { | ||
332 | - Controller controller = (Controller) TableGenerator | ||
333 | - .getTable(dbSchema, controllerTableRows.get(uuid), | ||
334 | - OvsdbTable.CONTROLLER); | ||
335 | - String target = (String) controller.getTargetColumn().data(); | ||
336 | - if (target.equalsIgnoreCase(controllerTarget)) { | ||
337 | - return uuid; | ||
338 | - } | ||
339 | - } | ||
340 | - } | ||
341 | - return null; | ||
342 | - } | ||
343 | - | ||
344 | - @Override | ||
345 | - public String getOvsUuid(String dbName) { | ||
346 | OvsdbRowStore rowStore = getRowStore(DATABASENAME, DATABASENAME); | 291 | OvsdbRowStore rowStore = getRowStore(DATABASENAME, DATABASENAME); |
347 | if (rowStore == null) { | 292 | if (rowStore == null) { |
348 | log.debug("The bridge uuid is null"); | 293 | log.debug("The bridge uuid is null"); |
... | @@ -485,8 +430,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -485,8 +430,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
485 | return new ControllerInfo(ipAddress, OFPORT, "tcp"); | 430 | return new ControllerInfo(ipAddress, OFPORT, "tcp"); |
486 | } | 431 | } |
487 | 432 | ||
488 | - @Override | 433 | + private void setControllersWithUuid(Uuid bridgeUuid, List<ControllerInfo> controllers) { |
489 | - public void setControllersWithUuid(Uuid bridgeUuid, List<ControllerInfo> controllers) { | ||
490 | DatabaseSchema dbSchema = schema.get(DATABASENAME); | 434 | DatabaseSchema dbSchema = schema.get(DATABASENAME); |
491 | if (dbSchema == null) { | 435 | if (dbSchema == null) { |
492 | log.debug("There is no schema"); | 436 | log.debug("There is no schema"); |
... | @@ -555,19 +499,37 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -555,19 +499,37 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
555 | log.warn("Could not find bridge in node", nodeId.getIpAddress()); | 499 | log.warn("Could not find bridge in node", nodeId.getIpAddress()); |
556 | return; | 500 | return; |
557 | } | 501 | } |
558 | - deleteConfig(BRIDGE, UUID, bridgeUuid, DATABASENAME, "bridges"); | 502 | + deleteConfig(BRIDGE, UUID, bridgeUuid, DATABASENAME, BRIDGES); |
559 | } | 503 | } |
560 | 504 | ||
505 | + @Deprecated | ||
561 | @Override | 506 | @Override |
562 | - public boolean createTunnel(String bridgeName, String portName, String tunnelType, Map<String, String> options) { | 507 | + public boolean createTunnel(String bridgeName, String ifaceName, String tunnelType, |
508 | + Map<String, String> options) { | ||
509 | + OvsdbInterface ovsdbIface = OvsdbInterface.builder() | ||
510 | + .name(ifaceName) | ||
511 | + .type(Type.valueOf(tunnelType)) | ||
512 | + .options(options) | ||
513 | + .build(); | ||
514 | + | ||
515 | + return createInterface(bridgeName, ovsdbIface); | ||
516 | + } | ||
517 | + | ||
518 | + @Deprecated | ||
519 | + @Override | ||
520 | + public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { | ||
521 | + } | ||
522 | + | ||
523 | + @Override | ||
524 | + public boolean createInterface(String bridgeName, OvsdbInterface ovsdbIface) { | ||
563 | String bridgeUuid = getBridgeUuid(bridgeName); | 525 | String bridgeUuid = getBridgeUuid(bridgeName); |
564 | if (bridgeUuid == null) { | 526 | if (bridgeUuid == null) { |
565 | log.warn("Couldn't find bridge {} in {}", bridgeName, nodeId.getIpAddress()); | 527 | log.warn("Couldn't find bridge {} in {}", bridgeName, nodeId.getIpAddress()); |
566 | return false; | 528 | return false; |
567 | } | 529 | } |
568 | 530 | ||
569 | - if (getPortUuid(portName, bridgeUuid) != null) { | 531 | + if (getPortUuid(ovsdbIface.name(), bridgeUuid) != null) { |
570 | - log.warn("Port {} already exists", portName); | 532 | + log.warn("Interface {} already exists", ovsdbIface.name()); |
571 | // remove existing one and re-create? | 533 | // remove existing one and re-create? |
572 | return false; | 534 | return false; |
573 | } | 535 | } |
... | @@ -577,45 +539,57 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -577,45 +539,57 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
577 | 539 | ||
578 | // insert a new port to the port table | 540 | // insert a new port to the port table |
579 | Port port = (Port) TableGenerator.createTable(dbSchema, OvsdbTable.PORT); | 541 | Port port = (Port) TableGenerator.createTable(dbSchema, OvsdbTable.PORT); |
580 | - port.setName(portName); | 542 | + port.setName(ovsdbIface.name()); |
581 | - Insert portInsert = new Insert(dbSchema.getTableSchema("Port"), "Port", port.getRow()); | 543 | + Insert portInsert = new Insert(dbSchema.getTableSchema(PORT), PORT, port.getRow()); |
582 | - portInsert.getRow().put("interfaces", Uuid.uuid("Interface")); | 544 | + portInsert.getRow().put(INTERFACES, Uuid.uuid(INTERFACE)); |
583 | operations.add(portInsert); | 545 | operations.add(portInsert); |
584 | 546 | ||
585 | // update the bridge table | 547 | // update the bridge table |
586 | Condition condition = ConditionUtil.isEqual(UUID, Uuid.uuid(bridgeUuid)); | 548 | Condition condition = ConditionUtil.isEqual(UUID, Uuid.uuid(bridgeUuid)); |
587 | - Mutation mutation = MutationUtil.insert(PORTS, Uuid.uuid("Port")); | 549 | + Mutation mutation = MutationUtil.insert(PORTS, Uuid.uuid(PORT)); |
588 | - List<Condition> conditions = new ArrayList<>(Arrays.asList(condition)); | 550 | + List<Condition> conditions = Lists.newArrayList(condition); |
589 | - List<Mutation> mutations = new ArrayList<>(Arrays.asList(mutation)); | 551 | + List<Mutation> mutations = Lists.newArrayList(mutation); |
590 | - operations.add(new Mutate(dbSchema.getTableSchema("Bridge"), conditions, mutations)); | 552 | + operations.add(new Mutate(dbSchema.getTableSchema(BRIDGE), conditions, mutations)); |
591 | 553 | ||
592 | // insert a tunnel interface | 554 | // insert a tunnel interface |
593 | Interface intf = (Interface) TableGenerator.createTable(dbSchema, OvsdbTable.INTERFACE); | 555 | Interface intf = (Interface) TableGenerator.createTable(dbSchema, OvsdbTable.INTERFACE); |
594 | - intf.setName(portName); | 556 | + intf.setName(ovsdbIface.name()); |
595 | - intf.setType(tunnelType); | 557 | + intf.setType(ovsdbIface.typeToString()); |
596 | - intf.setOptions(options); | 558 | + intf.setOptions(ovsdbIface.options()); |
597 | - Insert intfInsert = new Insert(dbSchema.getTableSchema("Interface"), "Interface", intf.getRow()); | 559 | + Insert intfInsert = new Insert(dbSchema.getTableSchema(INTERFACE), INTERFACE, intf.getRow()); |
598 | operations.add(intfInsert); | 560 | operations.add(intfInsert); |
599 | 561 | ||
600 | transactConfig(DATABASENAME, operations); | 562 | transactConfig(DATABASENAME, operations); |
563 | + log.info("Created interface {}", ovsdbIface.name()); | ||
601 | return true; | 564 | return true; |
602 | } | 565 | } |
603 | 566 | ||
604 | @Override | 567 | @Override |
605 | - public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { | 568 | + public boolean dropInterface(String ifaceName) { |
606 | - String bridgeName = INTEGRATION_BRIDGE; | 569 | + OvsdbRowStore rowStore = getRowStore(DATABASENAME, BRIDGE); |
607 | - String portName = getTunnelName(TYPEVXLAN, dstIp); | 570 | + if (rowStore == null) { |
608 | - String bridgeUuid = getBridgeUuid(INTEGRATION_BRIDGE); | 571 | + log.warn("Failed to get BRIDGE table"); |
609 | - if (bridgeUuid == null) { | 572 | + return false; |
610 | - log.warn("Could not find bridge {} in {}", bridgeName, | ||
611 | - nodeId.getIpAddress()); | ||
612 | - return; | ||
613 | } | 573 | } |
614 | 574 | ||
615 | - String portUuid = getPortUuid(portName, bridgeUuid); | 575 | + ConcurrentMap<String, Row> bridgeTableRows = rowStore.getRowStore(); |
616 | - if (portUuid != null) { | 576 | + if (bridgeTableRows == null) { |
617 | - log.info("Delete tunnel"); | 577 | + log.warn("Failed to get BRIDGE table rows"); |
618 | - deleteConfig(PORT, UUID, portUuid, BRIDGE, PORTS); | 578 | + return false; |
579 | + } | ||
580 | + | ||
581 | + // interface name is unique | ||
582 | + Optional<String> bridgeId = bridgeTableRows.keySet().stream() | ||
583 | + .filter(uuid -> getPortUuid(ifaceName, uuid) != null) | ||
584 | + .findFirst(); | ||
585 | + | ||
586 | + if (bridgeId.isPresent()) { | ||
587 | + String portId = getPortUuid(ifaceName, bridgeId.get()); | ||
588 | + deleteConfig(PORT, UUID, portId, BRIDGE, PORTS); | ||
589 | + return true; | ||
590 | + } else { | ||
591 | + log.warn("Unable to find the interface with name {}", ifaceName); | ||
592 | + return false; | ||
619 | } | 593 | } |
620 | } | 594 | } |
621 | 595 | ||
... | @@ -727,7 +701,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -727,7 +701,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
727 | } | 701 | } |
728 | if (childTableName.equalsIgnoreCase(PORT)) { | 702 | if (childTableName.equalsIgnoreCase(PORT)) { |
729 | log.debug("Handle port insert"); | 703 | log.debug("Handle port insert"); |
730 | - Insert intfInsert = handlePortInsertTable(INTERFACE, row); | 704 | + Insert intfInsert = handlePortInsertTable(row); |
731 | 705 | ||
732 | if (intfInsert != null) { | 706 | if (intfInsert != null) { |
733 | operations.add(intfInsert); | 707 | operations.add(intfInsert); |
... | @@ -754,11 +728,10 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -754,11 +728,10 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
754 | /** | 728 | /** |
755 | * Handles port insert. | 729 | * Handles port insert. |
756 | * | 730 | * |
757 | - * @param tableName ovsdb table interface | ||
758 | * @param portRow row of port | 731 | * @param portRow row of port |
759 | * @return insert, empty if null | 732 | * @return insert, empty if null |
760 | */ | 733 | */ |
761 | - private Insert handlePortInsertTable(String tableName, Row portRow) { | 734 | + private Insert handlePortInsertTable(Row portRow) { |
762 | DatabaseSchema dbSchema = schema.get(DATABASENAME); | 735 | DatabaseSchema dbSchema = schema.get(DATABASENAME); |
763 | 736 | ||
764 | TableSchema portTableSchema = dbSchema.getTableSchema(PORT); | 737 | TableSchema portTableSchema = dbSchema.getTableSchema(PORT); |
... | @@ -772,17 +745,6 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -772,17 +745,6 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
772 | return new Insert(intfTableSchema, INTERFACE, inf.getRow()); | 745 | return new Insert(intfTableSchema, INTERFACE, inf.getRow()); |
773 | } | 746 | } |
774 | 747 | ||
775 | - /** | ||
776 | - * Gets tunnel name. | ||
777 | - * | ||
778 | - * @param tunnelType tunnel type | ||
779 | - * @param dstIp the remote ip address | ||
780 | - * @return tunnel name | ||
781 | - */ | ||
782 | - private String getTunnelName(String tunnelType, IpAddress dstIp) { | ||
783 | - return tunnelType + "-" + dstIp.toString(); | ||
784 | - } | ||
785 | - | ||
786 | @Override | 748 | @Override |
787 | public ListenableFuture<DatabaseSchema> getOvsdbSchema(String dbName) { | 749 | public ListenableFuture<DatabaseSchema> getOvsdbSchema(String dbName) { |
788 | if (dbName == null) { | 750 | if (dbName == null) { |
... | @@ -834,8 +796,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -834,8 +796,7 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
834 | return null; | 796 | return null; |
835 | } | 797 | } |
836 | 798 | ||
837 | - @Override | 799 | + private ListenableFuture<List<OperationResult>> transactConfig(String dbName, |
838 | - public ListenableFuture<List<OperationResult>> transactConfig(String dbName, | ||
839 | List<Operation> operations) { | 800 | List<Operation> operations) { |
840 | if (dbName == null) { | 801 | if (dbName == null) { |
841 | return null; | 802 | return null; |
... | @@ -958,11 +919,6 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ | ... | @@ -958,11 +919,6 @@ public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientServ |
958 | } | 919 | } |
959 | 920 | ||
960 | @Override | 921 | @Override |
961 | - public Set<OvsdbTunnel> getTunnels() { | ||
962 | - return ovsdbTunnels; | ||
963 | - } | ||
964 | - | ||
965 | - @Override | ||
966 | public Set<OvsdbBridge> getBridges() { | 922 | public Set<OvsdbBridge> getBridges() { |
967 | Set<OvsdbBridge> ovsdbBridges = new HashSet<>(); | 923 | Set<OvsdbBridge> ovsdbBridges = new HashSet<>(); |
968 | OvsdbTableStore tableStore = getTableStore(DATABASENAME); | 924 | OvsdbTableStore tableStore = getTableStore(DATABASENAME); | ... | ... |
... | @@ -24,13 +24,11 @@ import org.onosproject.net.DeviceId; | ... | @@ -24,13 +24,11 @@ import org.onosproject.net.DeviceId; |
24 | import org.onosproject.net.behaviour.ControllerInfo; | 24 | import org.onosproject.net.behaviour.ControllerInfo; |
25 | import org.onosproject.ovsdb.controller.OvsdbBridge; | 25 | import org.onosproject.ovsdb.controller.OvsdbBridge; |
26 | import org.onosproject.ovsdb.controller.OvsdbClientService; | 26 | import org.onosproject.ovsdb.controller.OvsdbClientService; |
27 | +import org.onosproject.ovsdb.controller.OvsdbInterface; | ||
27 | import org.onosproject.ovsdb.controller.OvsdbNodeId; | 28 | import org.onosproject.ovsdb.controller.OvsdbNodeId; |
28 | import org.onosproject.ovsdb.controller.OvsdbPort; | 29 | import org.onosproject.ovsdb.controller.OvsdbPort; |
29 | -import org.onosproject.ovsdb.controller.OvsdbTunnel; | ||
30 | -import org.onosproject.ovsdb.rfc.message.OperationResult; | ||
31 | import org.onosproject.ovsdb.rfc.message.TableUpdates; | 30 | import org.onosproject.ovsdb.rfc.message.TableUpdates; |
32 | import org.onosproject.ovsdb.rfc.notation.Row; | 31 | import org.onosproject.ovsdb.rfc.notation.Row; |
33 | -import org.onosproject.ovsdb.rfc.notation.Uuid; | ||
34 | import org.onosproject.ovsdb.rfc.operations.Operation; | 32 | import org.onosproject.ovsdb.rfc.operations.Operation; |
35 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; | 33 | import org.onosproject.ovsdb.rfc.schema.DatabaseSchema; |
36 | 34 | ||
... | @@ -55,17 +53,20 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { | ... | @@ -55,17 +53,20 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { |
55 | 53 | ||
56 | @Override | 54 | @Override |
57 | public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { | 55 | public void dropTunnel(IpAddress srcIp, IpAddress dstIp) { |
56 | + } | ||
58 | 57 | ||
58 | + @Override | ||
59 | + public boolean createInterface(String bridgeName, OvsdbInterface ovsdbIface) { | ||
60 | + return true; | ||
59 | } | 61 | } |
60 | 62 | ||
61 | @Override | 63 | @Override |
62 | - public Set<OvsdbTunnel> getTunnels() { | 64 | + public boolean dropInterface(String name) { |
63 | - return null; | 65 | + return true; |
64 | } | 66 | } |
65 | 67 | ||
66 | @Override | 68 | @Override |
67 | public void createBridge(String bridgeName) { | 69 | public void createBridge(String bridgeName) { |
68 | - | ||
69 | } | 70 | } |
70 | 71 | ||
71 | @Override | 72 | @Override |
... | @@ -80,7 +81,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { | ... | @@ -80,7 +81,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { |
80 | 81 | ||
81 | @Override | 82 | @Override |
82 | public void dropBridge(String bridgeName) { | 83 | public void dropBridge(String bridgeName) { |
83 | - | ||
84 | } | 84 | } |
85 | 85 | ||
86 | @Override | 86 | @Override |
... | @@ -99,11 +99,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { | ... | @@ -99,11 +99,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { |
99 | } | 99 | } |
100 | 100 | ||
101 | @Override | 101 | @Override |
102 | - public void setControllersWithUuid(Uuid bridgeUuid, List<ControllerInfo> controllers) { | ||
103 | - | ||
104 | - } | ||
105 | - | ||
106 | - @Override | ||
107 | public void setControllersWithDeviceId(DeviceId deviceId, List<ControllerInfo> controllers) { | 102 | public void setControllersWithDeviceId(DeviceId deviceId, List<ControllerInfo> controllers) { |
108 | 103 | ||
109 | } | 104 | } |
... | @@ -139,21 +134,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { | ... | @@ -139,21 +134,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { |
139 | } | 134 | } |
140 | 135 | ||
141 | @Override | 136 | @Override |
142 | - public String getInterfaceUuid(String portUuid, String portName) { | ||
143 | - return null; | ||
144 | - } | ||
145 | - | ||
146 | - @Override | ||
147 | - public String getControllerUuid(String controllerName, String controllerTarget) { | ||
148 | - return null; | ||
149 | - } | ||
150 | - | ||
151 | - @Override | ||
152 | - public String getOvsUuid(String dbName) { | ||
153 | - return null; | ||
154 | - } | ||
155 | - | ||
156 | - @Override | ||
157 | public ListenableFuture<DatabaseSchema> getOvsdbSchema(String dbName) { | 137 | public ListenableFuture<DatabaseSchema> getOvsdbSchema(String dbName) { |
158 | return null; | 138 | return null; |
159 | } | 139 | } |
... | @@ -164,11 +144,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { | ... | @@ -164,11 +144,6 @@ public class OvsdbClientServiceAdapter implements OvsdbClientService { |
164 | } | 144 | } |
165 | 145 | ||
166 | @Override | 146 | @Override |
167 | - public ListenableFuture<List<OperationResult>> transactConfig(String dbName, List<Operation> operations) { | ||
168 | - return null; | ||
169 | - } | ||
170 | - | ||
171 | - @Override | ||
172 | public DatabaseSchema getDatabaseSchema(String dbName) { | 147 | public DatabaseSchema getDatabaseSchema(String dbName) { |
173 | return null; | 148 | return null; |
174 | } | 149 | } | ... | ... |
-
Please register or login to post a comment