Kyuhwi Choi
Committed by Gerrit Code Review

[ONOS-4871] Fix gateway external port from list to single port

 - Fix GatewayNode externalInterface from list to string
 - Fix GatewayService externalPort from list to portNumber

Change-Id: I8869c7bf550e005db854b464763cc2bc321faa6a
...@@ -331,7 +331,7 @@ public class OpenstackIcmpHandler { ...@@ -331,7 +331,7 @@ public class OpenstackIcmpHandler {
331 private Map<DeviceId, PortNumber> getExternalInfo() { 331 private Map<DeviceId, PortNumber> getExternalInfo() {
332 Map<DeviceId, PortNumber> externalInfoMap = Maps.newHashMap(); 332 Map<DeviceId, PortNumber> externalInfoMap = Maps.newHashMap();
333 gatewayService.getGatewayDeviceIds().forEach(deviceId -> 333 gatewayService.getGatewayDeviceIds().forEach(deviceId ->
334 - externalInfoMap.putIfAbsent(deviceId, gatewayService.getGatewayExternalPorts(deviceId).get(0))); 334 + externalInfoMap.putIfAbsent(deviceId, gatewayService.getGatewayExternalPort(deviceId)));
335 return externalInfoMap; 335 return externalInfoMap;
336 } 336 }
337 } 337 }
......
...@@ -147,11 +147,11 @@ public class OpenstackPnatHandler implements Runnable { ...@@ -147,11 +147,11 @@ public class OpenstackPnatHandler implements Runnable {
147 147
148 ScalableGatewayService gatewayService = getService(ScalableGatewayService.class); 148 ScalableGatewayService gatewayService = getService(ScalableGatewayService.class);
149 GatewayNode gatewayNode = gatewayService.getGatewayNode(deviceId); 149 GatewayNode gatewayNode = gatewayService.getGatewayNode(deviceId);
150 - if (gatewayNode.getGatewayExternalInterfaceNames().size() == 0) { 150 + if (gatewayNode.getGatewayExternalInterfaceName() == null) {
151 log.error(EXTERNAL_PORT_NULL, deviceId.toString()); 151 log.error(EXTERNAL_PORT_NULL, deviceId.toString());
152 return; 152 return;
153 } 153 }
154 - treatment.setOutput(gatewayService.getGatewayExternalPorts(deviceId).get(0)); 154 + treatment.setOutput(gatewayService.getGatewayExternalPort(deviceId));
155 155
156 ethernet.resetChecksum(); 156 ethernet.resetChecksum();
157 157
......
...@@ -468,7 +468,7 @@ public class OpenstackRoutingManager implements OpenstackRoutingService { ...@@ -468,7 +468,7 @@ public class OpenstackRoutingManager implements OpenstackRoutingService {
468 DeviceId deviceId = pkt.receivedFrom().deviceId(); 468 DeviceId deviceId = pkt.receivedFrom().deviceId();
469 Port port = null; 469 Port port = null;
470 port = deviceService.getPort(deviceId, 470 port = deviceService.getPort(deviceId,
471 - gatewayService.getGatewayExternalPorts(deviceId).get(0)); 471 + gatewayService.getGatewayExternalPort(deviceId));
472 if (port != null) { 472 if (port != null) {
473 OpenstackPort openstackPort = getOpenstackPort(ethernet.getSourceMAC(), 473 OpenstackPort openstackPort = getOpenstackPort(ethernet.getSourceMAC(),
474 Ip4Address.valueOf(iPacket.getSourceAddress())); 474 Ip4Address.valueOf(iPacket.getSourceAddress()));
......
...@@ -188,7 +188,7 @@ public class OpenstackRoutingRulePopulator { ...@@ -188,7 +188,7 @@ public class OpenstackRoutingRulePopulator {
188 188
189 tBuilder.setIpSrc(externalIp); 189 tBuilder.setIpSrc(externalIp);
190 gatewayService.getGatewayNodes().forEach(node -> { 190 gatewayService.getGatewayNodes().forEach(node -> {
191 - tBuilder.setOutput(gatewayService.getGatewayExternalPorts(node.getGatewayDeviceId()).get(0)); 191 + tBuilder.setOutput(gatewayService.getGatewayExternalPort(node.getGatewayDeviceId()));
192 ForwardingObjective fo = DefaultForwardingObjective.builder() 192 ForwardingObjective fo = DefaultForwardingObjective.builder()
193 .withSelector(sBuilder.build()) 193 .withSelector(sBuilder.build())
194 .withTreatment(tBuilder.build()) 194 .withTreatment(tBuilder.build())
...@@ -548,7 +548,7 @@ public class OpenstackRoutingRulePopulator { ...@@ -548,7 +548,7 @@ public class OpenstackRoutingRulePopulator {
548 } 548 }
549 549
550 private PortNumber getExternalPortNum(DeviceId deviceId) { 550 private PortNumber getExternalPortNum(DeviceId deviceId) {
551 - return checkNotNull(gatewayService.getGatewayExternalPorts(deviceId).get(0), PORTNOTNULL); 551 + return checkNotNull(gatewayService.getGatewayExternalPort(deviceId), PORTNOTNULL);
552 } 552 }
553 553
554 /** 554 /**
......
...@@ -15,12 +15,9 @@ ...@@ -15,12 +15,9 @@
15 */ 15 */
16 package org.onosproject.scalablegateway.api; 16 package org.onosproject.scalablegateway.api;
17 17
18 -import com.google.common.collect.ImmutableList;
19 import org.onlab.packet.Ip4Address; 18 import org.onlab.packet.Ip4Address;
20 import org.onosproject.net.DeviceId; 19 import org.onosproject.net.DeviceId;
21 20
22 -import java.util.List;
23 -
24 import static com.google.common.base.Preconditions.checkNotNull; 21 import static com.google.common.base.Preconditions.checkNotNull;
25 22
26 /** 23 /**
...@@ -28,13 +25,13 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -28,13 +25,13 @@ import static com.google.common.base.Preconditions.checkNotNull;
28 */ 25 */
29 public final class GatewayNode { 26 public final class GatewayNode {
30 private final DeviceId gatewayDeviceId; 27 private final DeviceId gatewayDeviceId;
31 - private final List<String> gatewayExternalInterfaceNames; 28 + private final String gatewayExternalInterfaceName;
32 private final Ip4Address dataIpAddress; 29 private final Ip4Address dataIpAddress;
33 30
34 - private GatewayNode(DeviceId gatewayDeviceId, List<String> gatewayExternalInterfaceNames, 31 + private GatewayNode(DeviceId gatewayDeviceId, String gatewayExternalInterfaceName,
35 Ip4Address dataIpAddress) { 32 Ip4Address dataIpAddress) {
36 this.gatewayDeviceId = gatewayDeviceId; 33 this.gatewayDeviceId = gatewayDeviceId;
37 - this.gatewayExternalInterfaceNames = gatewayExternalInterfaceNames; 34 + this.gatewayExternalInterfaceName = gatewayExternalInterfaceName;
38 this.dataIpAddress = dataIpAddress; 35 this.dataIpAddress = dataIpAddress;
39 } 36 }
40 37
...@@ -48,12 +45,12 @@ public final class GatewayNode { ...@@ -48,12 +45,12 @@ public final class GatewayNode {
48 } 45 }
49 46
50 /** 47 /**
51 - * Returns the list of gateway`s interface names. 48 + * Returns the gateway`s interface name.
52 * 49 *
53 - * @return The list of interface names 50 + * @return The gateway`s interface name
54 */ 51 */
55 - public List<String> getGatewayExternalInterfaceNames() { 52 + public String getGatewayExternalInterfaceName() {
56 - return ImmutableList.copyOf(gatewayExternalInterfaceNames); 53 + return gatewayExternalInterfaceName;
57 } 54 }
58 55
59 /** 56 /**
...@@ -80,7 +77,7 @@ public final class GatewayNode { ...@@ -80,7 +77,7 @@ public final class GatewayNode {
80 public static final class Builder { 77 public static final class Builder {
81 78
82 private DeviceId gatewayDeviceId; 79 private DeviceId gatewayDeviceId;
83 - private List<String> gatewayExternalInterfaceNames; 80 + private String gatewayExternalInterfaceName;
84 private Ip4Address dataIpAddress; 81 private Ip4Address dataIpAddress;
85 82
86 /** 83 /**
...@@ -95,13 +92,13 @@ public final class GatewayNode { ...@@ -95,13 +92,13 @@ public final class GatewayNode {
95 } 92 }
96 93
97 /** 94 /**
98 - * Sets the list of gateway`s interface names. 95 + * Sets the gateway`s interface name.
99 * 96 *
100 - * @param names The list of gateway`s interface name 97 + * @param name The gateway`s interface name
101 * @return Builder object 98 * @return Builder object
102 */ 99 */
103 - public Builder gatewayExternalInterfaceNames(List<String> names) { 100 + public Builder gatewayExternalInterfaceName(String name) {
104 - this.gatewayExternalInterfaceNames = names; 101 + this.gatewayExternalInterfaceName = name;
105 return this; 102 return this;
106 } 103 }
107 104
...@@ -122,7 +119,7 @@ public final class GatewayNode { ...@@ -122,7 +119,7 @@ public final class GatewayNode {
122 * @return GatewayNode object 119 * @return GatewayNode object
123 */ 120 */
124 public GatewayNode build() { 121 public GatewayNode build() {
125 - return new GatewayNode(checkNotNull(gatewayDeviceId), checkNotNull(gatewayExternalInterfaceNames), 122 + return new GatewayNode(checkNotNull(gatewayDeviceId), checkNotNull(gatewayExternalInterfaceName),
126 checkNotNull(dataIpAddress)); 123 checkNotNull(dataIpAddress));
127 } 124 }
128 } 125 }
......
...@@ -18,7 +18,6 @@ package org.onosproject.scalablegateway.api; ...@@ -18,7 +18,6 @@ package org.onosproject.scalablegateway.api;
18 18
19 import com.fasterxml.jackson.databind.JsonNode; 19 import com.fasterxml.jackson.databind.JsonNode;
20 import com.fasterxml.jackson.databind.node.ObjectNode; 20 import com.fasterxml.jackson.databind.node.ObjectNode;
21 -import com.google.common.collect.Lists;
22 import com.google.common.collect.Sets; 21 import com.google.common.collect.Sets;
23 import org.onlab.packet.Ip4Address; 22 import org.onlab.packet.Ip4Address;
24 import org.onosproject.core.ApplicationId; 23 import org.onosproject.core.ApplicationId;
...@@ -26,8 +25,6 @@ import org.onosproject.net.DeviceId; ...@@ -26,8 +25,6 @@ import org.onosproject.net.DeviceId;
26 import org.onosproject.net.config.Config; 25 import org.onosproject.net.config.Config;
27 import org.slf4j.Logger; 26 import org.slf4j.Logger;
28 27
29 -import java.util.Collections;
30 -import java.util.List;
31 import java.util.Set; 28 import java.util.Set;
32 import java.util.stream.StreamSupport; 29 import java.util.stream.StreamSupport;
33 30
...@@ -64,8 +61,7 @@ public class GatewayNodeConfig extends Config<ApplicationId> { ...@@ -64,8 +61,7 @@ public class GatewayNodeConfig extends Config<ApplicationId> {
64 try { 61 try {
65 nodes.add(new GatewayNode.Builder() 62 nodes.add(new GatewayNode.Builder()
66 .gatewayDeviceId(DeviceId.deviceId(jsonNode.path(BRIDGE_ID).asText())) 63 .gatewayDeviceId(DeviceId.deviceId(jsonNode.path(BRIDGE_ID).asText()))
67 - .gatewayExternalInterfaceNames( 64 + .gatewayExternalInterfaceName(jsonNode.path(EXTERNAL_INTERFACE_NAME).asText())
68 - getExternalInterfaceName(jsonNode.path(EXTERNAL_INTERFACE_NAME).asText()))
69 .dataIpAddress(Ip4Address.valueOf(jsonNode.path(DATAPLANE_IP).asText())).build()); 65 .dataIpAddress(Ip4Address.valueOf(jsonNode.path(DATAPLANE_IP).asText())).build());
70 } catch (IllegalArgumentException | NullPointerException e) { 66 } catch (IllegalArgumentException | NullPointerException e) {
71 log.error("Failed to read {}", e.toString()); 67 log.error("Failed to read {}", e.toString());
...@@ -74,11 +70,6 @@ public class GatewayNodeConfig extends Config<ApplicationId> { ...@@ -74,11 +70,6 @@ public class GatewayNodeConfig extends Config<ApplicationId> {
74 return nodes; 70 return nodes;
75 } 71 }
76 72
77 - private List<String> getExternalInterfaceName(String s) {
78 - List<String> list = Lists.newArrayList();
79 - return Collections.addAll(list, s.split(",")) ? list : null;
80 - }
81 -
82 @Override 73 @Override
83 public boolean isValid() { 74 public boolean isValid() {
84 JsonNode jsonNodes = object.get(NODES); 75 JsonNode jsonNodes = object.get(NODES);
......
...@@ -35,12 +35,12 @@ public interface ScalableGatewayService { ...@@ -35,12 +35,12 @@ public interface ScalableGatewayService {
35 GatewayNode getGatewayNode(DeviceId deviceId); 35 GatewayNode getGatewayNode(DeviceId deviceId);
36 36
37 /** 37 /**
38 - * Returns the list of gateway`s port numbers with the given device identifier. 38 + * Returns the gateway`s port number with the given device identifier.
39 * 39 *
40 * @param deviceId The gateway node deviceId 40 * @param deviceId The gateway node deviceId
41 - * @return The list of external interface port number 41 + * @return The external interface port number
42 */ 42 */
43 - List<PortNumber> getGatewayExternalPorts(DeviceId deviceId); 43 + PortNumber getGatewayExternalPort(DeviceId deviceId);
44 44
45 /** 45 /**
46 * Returns group id for gateway load balance. 46 * Returns group id for gateway load balance.
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
16 16
17 package org.onosproject.scalablegateway.cli; 17 package org.onosproject.scalablegateway.cli;
18 18
19 -import com.google.common.collect.Lists;
20 import org.apache.karaf.shell.commands.Argument; 19 import org.apache.karaf.shell.commands.Argument;
21 import org.apache.karaf.shell.commands.Command; 20 import org.apache.karaf.shell.commands.Command;
22 import org.onlab.packet.Ip4Address; 21 import org.onlab.packet.Ip4Address;
...@@ -25,9 +24,6 @@ import org.onosproject.net.DeviceId; ...@@ -25,9 +24,6 @@ import org.onosproject.net.DeviceId;
25 import org.onosproject.scalablegateway.api.GatewayNode; 24 import org.onosproject.scalablegateway.api.GatewayNode;
26 import org.onosproject.scalablegateway.api.ScalableGatewayService; 25 import org.onosproject.scalablegateway.api.ScalableGatewayService;
27 26
28 -import java.util.Collections;
29 -import java.util.List;
30 -
31 /** 27 /**
32 * Adds gateway node information for scalablegateway node managements. 28 * Adds gateway node information for scalablegateway node managements.
33 */ 29 */
...@@ -60,7 +56,7 @@ public class ScalableGatewayAddCommand extends AbstractShellCommand { ...@@ -60,7 +56,7 @@ public class ScalableGatewayAddCommand extends AbstractShellCommand {
60 GatewayNode gatewayNode = GatewayNode.builder() 56 GatewayNode gatewayNode = GatewayNode.builder()
61 .gatewayDeviceId(DeviceId.deviceId(deviceId)) 57 .gatewayDeviceId(DeviceId.deviceId(deviceId))
62 .dataIpAddress(Ip4Address.valueOf(ipAddress)) 58 .dataIpAddress(Ip4Address.valueOf(ipAddress))
63 - .gatewayExternalInterfaceNames(splitNameList(interfaceName)) 59 + .gatewayExternalInterfaceName(interfaceName)
64 .build(); 60 .build();
65 if (service.addGatewayNode(gatewayNode)) { 61 if (service.addGatewayNode(gatewayNode)) {
66 print(SUCCESS); 62 print(SUCCESS);
...@@ -69,8 +65,4 @@ public class ScalableGatewayAddCommand extends AbstractShellCommand { ...@@ -69,8 +65,4 @@ public class ScalableGatewayAddCommand extends AbstractShellCommand {
69 } 65 }
70 } 66 }
71 67
72 - private List<String> splitNameList(String interfaceName) {
73 - List<String> list = Lists.newArrayList();
74 - return Collections.addAll(list, interfaceName.split(",")) ? list : null;
75 - }
76 } 68 }
......
...@@ -35,6 +35,6 @@ public class ScalableGatewayListCommand extends AbstractShellCommand { ...@@ -35,6 +35,6 @@ public class ScalableGatewayListCommand extends AbstractShellCommand {
35 service.getGatewayNodes().forEach(node -> print(FORMAT, 35 service.getGatewayNodes().forEach(node -> print(FORMAT,
36 node.getGatewayDeviceId().toString(), 36 node.getGatewayDeviceId().toString(),
37 node.getDataIpAddress().toString(), 37 node.getDataIpAddress().toString(),
38 - node.getGatewayExternalInterfaceNames().toString())); 38 + node.getGatewayExternalInterfaceName().toString()));
39 } 39 }
40 } 40 }
......
...@@ -155,23 +155,16 @@ public class ScalableGatewayManager implements ScalableGatewayService { ...@@ -155,23 +155,16 @@ public class ScalableGatewayManager implements ScalableGatewayService {
155 } 155 }
156 156
157 @Override 157 @Override
158 - public List<PortNumber> getGatewayExternalPorts(DeviceId deviceId) { 158 + public PortNumber getGatewayExternalPort(DeviceId deviceId) {
159 GatewayNode gatewayNode = checkNotNull(gatewayNodeMap.get(deviceId).value(), GATEWAYNODE_CAN_NOT_BE_NULL); 159 GatewayNode gatewayNode = checkNotNull(gatewayNodeMap.get(deviceId).value(), GATEWAYNODE_CAN_NOT_BE_NULL);
160 - List<PortNumber> portNumbers = Lists.newArrayList(); 160 + String externalInterfaceName = gatewayNode.getGatewayExternalInterfaceName();
161 - gatewayNode.getGatewayExternalInterfaceNames() 161 + Optional<Port> port = deviceService.getPorts(deviceId)
162 .stream() 162 .stream()
163 - .forEach(name -> portNumbers.add(findPortNumFromPortName(gatewayNode.getGatewayDeviceId(), name))); 163 + .filter(p -> p.annotations().value(PORT_NAME).equals(externalInterfaceName))
164 - return portNumbers;
165 - }
166 -
167 - private PortNumber findPortNumFromPortName(DeviceId gatewayDeviceId, String name) {
168 - Optional<Port> port = deviceService.getPorts(gatewayDeviceId)
169 - .stream()
170 - .filter(p -> p.annotations().value(PORT_NAME).equals(name))
171 .findFirst(); 164 .findFirst();
172 165
173 if (!port.isPresent()) { 166 if (!port.isPresent()) {
174 - log.error("Cannot find port {} in gateway device {}", name, gatewayDeviceId); 167 + log.error("Cannot find port {} in gateway device {}", externalInterfaceName, deviceId);
175 return null; 168 return null;
176 } 169 }
177 170
......