Charles Chan
Committed by Gerrit Code Review

Improve SegmentRoutingAppConfig

- Separate host and subnet suppression
- Use port instead of interface to specify which SR should ignore

Change-Id: Ie6491950cddf0860924565f081504b4f4d788179
...@@ -473,7 +473,7 @@ public class RoutingRulePopulator { ...@@ -473,7 +473,7 @@ public class RoutingRulePopulator {
473 for (Port port : srManager.deviceService.getPorts(deviceId)) { 473 for (Port port : srManager.deviceService.getPorts(deviceId)) {
474 ConnectPoint cp = new ConnectPoint(deviceId, port.number()); 474 ConnectPoint cp = new ConnectPoint(deviceId, port.number());
475 // TODO: Handles dynamic port events when we are ready for dynamic config 475 // TODO: Handles dynamic port events when we are ready for dynamic config
476 - if (!srManager.deviceConfiguration.excludedPorts().contains(cp) && 476 + if (!srManager.deviceConfiguration.suppressSubnet().contains(cp) &&
477 port.isEnabled()) { 477 port.isEnabled()) {
478 Ip4Prefix portSubnet = config.getPortSubnet(deviceId, port.number()); 478 Ip4Prefix portSubnet = config.getPortSubnet(deviceId, port.number());
479 VlanId assignedVlan = (portSubnet == null) 479 VlanId assignedVlan = (portSubnet == null)
......
...@@ -991,7 +991,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -991,7 +991,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
991 Set<IpAddress> ips = event.subject().ipAddresses(); 991 Set<IpAddress> ips = event.subject().ipAddresses();
992 log.info("Host {}/{} is added at {}:{}", mac, vlanId, deviceId, port); 992 log.info("Host {}/{} is added at {}:{}", mac, vlanId, deviceId, port);
993 993
994 - if (!deviceConfiguration.excludedPorts() 994 + if (!deviceConfiguration.suppressHost()
995 .contains(new ConnectPoint(deviceId, port))) { 995 .contains(new ConnectPoint(deviceId, port))) {
996 // Populate bridging table entry 996 // Populate bridging table entry
997 log.debug("Populate L2 table entry for host {} at {}:{}", 997 log.debug("Populate L2 table entry for host {} at {}:{}",
...@@ -1020,7 +1020,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -1020,7 +1020,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
1020 Set<IpAddress> ips = event.subject().ipAddresses(); 1020 Set<IpAddress> ips = event.subject().ipAddresses();
1021 log.debug("Host {}/{} is removed from {}:{}", mac, vlanId, deviceId, port); 1021 log.debug("Host {}/{} is removed from {}:{}", mac, vlanId, deviceId, port);
1022 1022
1023 - if (!deviceConfiguration.excludedPorts() 1023 + if (!deviceConfiguration.suppressHost()
1024 .contains(new ConnectPoint(deviceId, port))) { 1024 .contains(new ConnectPoint(deviceId, port))) {
1025 // Revoke bridging table entry 1025 // Revoke bridging table entry
1026 ForwardingObjective.Builder fob = 1026 ForwardingObjective.Builder fob =
...@@ -1051,7 +1051,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -1051,7 +1051,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
1051 log.debug("Host {}/{} is moved from {}:{} to {}:{}", 1051 log.debug("Host {}/{} is moved from {}:{} to {}:{}",
1052 mac, vlanId, prevDeviceId, prevPort, newDeviceId, newPort); 1052 mac, vlanId, prevDeviceId, prevPort, newDeviceId, newPort);
1053 1053
1054 - if (!deviceConfiguration.excludedPorts() 1054 + if (!deviceConfiguration.suppressHost()
1055 .contains(new ConnectPoint(prevDeviceId, prevPort))) { 1055 .contains(new ConnectPoint(prevDeviceId, prevPort))) {
1056 // Revoke previous bridging table entry 1056 // Revoke previous bridging table entry
1057 ForwardingObjective.Builder prevFob = 1057 ForwardingObjective.Builder prevFob =
...@@ -1069,7 +1069,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -1069,7 +1069,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
1069 }); 1069 });
1070 } 1070 }
1071 1071
1072 - if (!deviceConfiguration.excludedPorts() 1072 + if (!deviceConfiguration.suppressHost()
1073 .contains(new ConnectPoint(newDeviceId, newPort))) { 1073 .contains(new ConnectPoint(newDeviceId, newPort))) {
1074 // Populate new bridging table entry 1074 // Populate new bridging table entry
1075 ForwardingObjective.Builder newFob = 1075 ForwardingObjective.Builder newFob =
...@@ -1099,7 +1099,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -1099,7 +1099,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
1099 Set<IpAddress> newIps = event.subject().ipAddresses(); 1099 Set<IpAddress> newIps = event.subject().ipAddresses();
1100 log.debug("Host {}/{} is updated", mac, vlanId); 1100 log.debug("Host {}/{} is updated", mac, vlanId);
1101 1101
1102 - if (!deviceConfiguration.excludedPorts() 1102 + if (!deviceConfiguration.suppressHost()
1103 .contains(new ConnectPoint(prevDeviceId, prevPort))) { 1103 .contains(new ConnectPoint(prevDeviceId, prevPort))) {
1104 // Revoke previous IP table entry 1104 // Revoke previous IP table entry
1105 prevIps.forEach(ip -> { 1105 prevIps.forEach(ip -> {
...@@ -1110,7 +1110,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -1110,7 +1110,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
1110 }); 1110 });
1111 } 1111 }
1112 1112
1113 - if (!deviceConfiguration.excludedPorts() 1113 + if (!deviceConfiguration.suppressHost()
1114 .contains(new ConnectPoint(newDeviceId, newPort))) { 1114 .contains(new ConnectPoint(newDeviceId, newPort))) {
1115 // Populate new IP table entry 1115 // Populate new IP table entry
1116 newIps.forEach(ip -> { 1116 newIps.forEach(ip -> {
......
...@@ -18,7 +18,6 @@ package org.onosproject.segmentrouting.config; ...@@ -18,7 +18,6 @@ package org.onosproject.segmentrouting.config;
18 import com.google.common.collect.HashMultimap; 18 import com.google.common.collect.HashMultimap;
19 import com.google.common.collect.ImmutableSet; 19 import com.google.common.collect.ImmutableSet;
20 import com.google.common.collect.SetMultimap; 20 import com.google.common.collect.SetMultimap;
21 -import com.google.common.collect.Sets;
22 import org.onlab.packet.Ip4Address; 21 import org.onlab.packet.Ip4Address;
23 import org.onlab.packet.Ip4Prefix; 22 import org.onlab.packet.Ip4Prefix;
24 import org.onlab.packet.IpPrefix; 23 import org.onlab.packet.IpPrefix;
...@@ -30,6 +29,7 @@ import org.onosproject.incubator.net.config.basics.InterfaceConfig; ...@@ -30,6 +29,7 @@ import org.onosproject.incubator.net.config.basics.InterfaceConfig;
30 import org.onosproject.incubator.net.intf.Interface; 29 import org.onosproject.incubator.net.intf.Interface;
31 import org.onosproject.net.ConnectPoint; 30 import org.onosproject.net.ConnectPoint;
32 import org.onosproject.net.config.NetworkConfigRegistry; 31 import org.onosproject.net.config.NetworkConfigRegistry;
32 +import org.onosproject.net.config.NetworkConfigService;
33 import org.onosproject.net.host.InterfaceIpAddress; 33 import org.onosproject.net.host.InterfaceIpAddress;
34 import org.onosproject.net.DeviceId; 34 import org.onosproject.net.DeviceId;
35 import org.onosproject.net.PortNumber; 35 import org.onosproject.net.PortNumber;
...@@ -57,7 +57,8 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -57,7 +57,8 @@ public class DeviceConfiguration implements DeviceProperties {
57 private final List<Integer> allSegmentIds = new ArrayList<>(); 57 private final List<Integer> allSegmentIds = new ArrayList<>();
58 private final Map<DeviceId, SegmentRouterInfo> deviceConfigMap = new ConcurrentHashMap<>(); 58 private final Map<DeviceId, SegmentRouterInfo> deviceConfigMap = new ConcurrentHashMap<>();
59 private final Map<VlanId, List<ConnectPoint>> xConnects = new ConcurrentHashMap<>(); 59 private final Map<VlanId, List<ConnectPoint>> xConnects = new ConcurrentHashMap<>();
60 - private final Set<ConnectPoint> excludedPorts = Sets.newConcurrentHashSet(); 60 + private ApplicationId appId;
61 + private NetworkConfigService cfgService;
61 private SegmentRoutingAppConfig appConfig; 62 private SegmentRoutingAppConfig appConfig;
62 63
63 private class SegmentRouterInfo { 64 private class SegmentRouterInfo {
...@@ -85,6 +86,9 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -85,6 +86,9 @@ public class DeviceConfiguration implements DeviceProperties {
85 */ 86 */
86 public DeviceConfiguration(ApplicationId appId, 87 public DeviceConfiguration(ApplicationId appId,
87 NetworkConfigRegistry cfgService) { 88 NetworkConfigRegistry cfgService) {
89 + this.appId = appId;
90 + this.cfgService = cfgService;
91 +
88 // Read config from device subject, excluding gatewayIps and subnets. 92 // Read config from device subject, excluding gatewayIps and subnets.
89 Set<DeviceId> deviceSubjects = 93 Set<DeviceId> deviceSubjects =
90 cfgService.getSubjects(DeviceId.class, SegmentRoutingDeviceConfig.class); 94 cfgService.getSubjects(DeviceId.class, SegmentRoutingDeviceConfig.class);
...@@ -103,15 +107,18 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -103,15 +107,18 @@ public class DeviceConfiguration implements DeviceProperties {
103 allSegmentIds.add(info.nodeSid); 107 allSegmentIds.add(info.nodeSid);
104 }); 108 });
105 109
106 - // Read excluded port names from config 110 + // Read SegmentRoutingAppConfig
107 appConfig = cfgService.getConfig(appId, SegmentRoutingAppConfig.class); 111 appConfig = cfgService.getConfig(appId, SegmentRoutingAppConfig.class);
108 - Set<String> excludePorts = (appConfig != null) ?
109 - appConfig.excludePorts() : ImmutableSet.of();
110 112
111 // Read gatewayIps and subnets from port subject. 113 // Read gatewayIps and subnets from port subject.
112 Set<ConnectPoint> portSubjects = 114 Set<ConnectPoint> portSubjects =
113 cfgService.getSubjects(ConnectPoint.class, InterfaceConfig.class); 115 cfgService.getSubjects(ConnectPoint.class, InterfaceConfig.class);
114 portSubjects.forEach(subject -> { 116 portSubjects.forEach(subject -> {
117 + // Do not process excluded ports
118 + if (suppressSubnet().contains(subject)) {
119 + return;
120 + }
121 +
115 InterfaceConfig config = 122 InterfaceConfig config =
116 cfgService.getConfig(subject, InterfaceConfig.class); 123 cfgService.getConfig(subject, InterfaceConfig.class);
117 Set<Interface> networkInterfaces; 124 Set<Interface> networkInterfaces;
...@@ -122,12 +129,6 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -122,12 +129,6 @@ public class DeviceConfiguration implements DeviceProperties {
122 return; 129 return;
123 } 130 }
124 networkInterfaces.forEach(networkInterface -> { 131 networkInterfaces.forEach(networkInterface -> {
125 - // Do not process excluded ports
126 - if (excludePorts.contains(networkInterface.name())) {
127 - excludedPorts.add(subject);
128 - return;
129 - }
130 -
131 VlanId vlanId = networkInterface.vlan(); 132 VlanId vlanId = networkInterface.vlan();
132 ConnectPoint connectPoint = networkInterface.connectPoint(); 133 ConnectPoint connectPoint = networkInterface.connectPoint();
133 DeviceId dpid = connectPoint.deviceId(); 134 DeviceId dpid = connectPoint.deviceId();
...@@ -366,7 +367,7 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -366,7 +367,7 @@ public class DeviceConfiguration implements DeviceProperties {
366 367
367 ImmutableSet.Builder<Ip4Prefix> builder = ImmutableSet.builder(); 368 ImmutableSet.Builder<Ip4Prefix> builder = ImmutableSet.builder();
368 builder.addAll(srinfo.subnets.values()); 369 builder.addAll(srinfo.subnets.values());
369 - if (deviceId.equals(appConfig.vRouterId())) { 370 + if (appConfig != null && deviceId.equals(appConfig.vRouterId())) {
370 builder.add(Ip4Prefix.valueOf("0.0.0.0/0")); 371 builder.add(Ip4Prefix.valueOf("0.0.0.0/0"));
371 } 372 }
372 return builder.build(); 373 return builder.build();
...@@ -491,12 +492,11 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -491,12 +492,11 @@ public class DeviceConfiguration implements DeviceProperties {
491 return srinfo != null && srinfo.adjacencySids.containsKey(sid); 492 return srinfo != null && srinfo.adjacencySids.containsKey(sid);
492 } 493 }
493 494
494 - /** 495 + public Set<ConnectPoint> suppressSubnet() {
495 - * Returns a set of excluded ports. 496 + return (appConfig != null) ? appConfig.suppressSubnet() : ImmutableSet.of();
496 - * 497 + }
497 - * @return excluded ports 498 +
498 - */ 499 + public Set<ConnectPoint> suppressHost() {
499 - public Set<ConnectPoint> excludedPorts() { 500 + return (appConfig != null) ? appConfig.suppressHost() : ImmutableSet.of();
500 - return excludedPorts;
501 } 501 }
502 } 502 }
......
...@@ -21,8 +21,11 @@ import com.fasterxml.jackson.databind.node.ArrayNode; ...@@ -21,8 +21,11 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
21 import com.google.common.collect.ImmutableSet; 21 import com.google.common.collect.ImmutableSet;
22 import org.onlab.packet.MacAddress; 22 import org.onlab.packet.MacAddress;
23 import org.onosproject.core.ApplicationId; 23 import org.onosproject.core.ApplicationId;
24 +import org.onosproject.net.ConnectPoint;
24 import org.onosproject.net.DeviceId; 25 import org.onosproject.net.DeviceId;
25 import org.onosproject.net.config.Config; 26 import org.onosproject.net.config.Config;
27 +
28 +import java.util.Optional;
26 import java.util.Set; 29 import java.util.Set;
27 30
28 import static com.google.common.base.MoreObjects.toStringHelper; 31 import static com.google.common.base.MoreObjects.toStringHelper;
...@@ -33,23 +36,25 @@ import static com.google.common.base.MoreObjects.toStringHelper; ...@@ -33,23 +36,25 @@ import static com.google.common.base.MoreObjects.toStringHelper;
33 public class SegmentRoutingAppConfig extends Config<ApplicationId> { 36 public class SegmentRoutingAppConfig extends Config<ApplicationId> {
34 private static final String VROUTER_MACS = "vRouterMacs"; 37 private static final String VROUTER_MACS = "vRouterMacs";
35 private static final String VROUTER_ID = "vRouterId"; 38 private static final String VROUTER_ID = "vRouterId";
36 - private static final String EXCLUDE_PORTS = "excludePorts"; 39 + private static final String SUPPRESS_SUBNET = "suppressSubnet";
40 + private static final String SUPPRESS_HOST = "suppressHost";
37 41
38 @Override 42 @Override
39 public boolean isValid() { 43 public boolean isValid() {
40 - return hasOnlyFields(VROUTER_MACS, VROUTER_ID, EXCLUDE_PORTS) && 44 + return hasOnlyFields(VROUTER_MACS, VROUTER_ID, SUPPRESS_SUBNET, SUPPRESS_HOST) &&
41 vRouterMacs() != null && vRouterId() != null && 45 vRouterMacs() != null && vRouterId() != null &&
42 - excludePorts() != null; 46 + suppressSubnet() != null && suppressHost() != null;
43 } 47 }
44 48
45 /** 49 /**
46 * Gets vRouters from the config. 50 * Gets vRouters from the config.
47 * 51 *
48 - * @return a set of vRouter MAC addresses 52 + * @return Set of vRouter MAC addresses, empty is not specified,
53 + * or null if not valid
49 */ 54 */
50 public Set<MacAddress> vRouterMacs() { 55 public Set<MacAddress> vRouterMacs() {
51 if (!object.has(VROUTER_MACS)) { 56 if (!object.has(VROUTER_MACS)) {
52 - return null; 57 + return ImmutableSet.of();
53 } 58 }
54 59
55 ImmutableSet.Builder<MacAddress> builder = ImmutableSet.builder(); 60 ImmutableSet.Builder<MacAddress> builder = ImmutableSet.builder();
...@@ -96,15 +101,16 @@ public class SegmentRoutingAppConfig extends Config<ApplicationId> { ...@@ -96,15 +101,16 @@ public class SegmentRoutingAppConfig extends Config<ApplicationId> {
96 /** 101 /**
97 * Gets vRouter device ID. 102 * Gets vRouter device ID.
98 * 103 *
99 - * @return vRouter device ID, or null if not valid 104 + * @return Optional vRouter device ID,
105 + * empty is not specified or null if not valid
100 */ 106 */
101 - public DeviceId vRouterId() { 107 + public Optional<DeviceId> vRouterId() {
102 if (!object.has(VROUTER_ID)) { 108 if (!object.has(VROUTER_ID)) {
103 - return null; 109 + return Optional.empty();
104 } 110 }
105 111
106 try { 112 try {
107 - return DeviceId.deviceId(object.path(VROUTER_ID).asText()); 113 + return Optional.of(DeviceId.deviceId(object.path(VROUTER_ID).asText()));
108 } catch (IllegalArgumentException e) { 114 } catch (IllegalArgumentException e) {
109 return null; 115 return null;
110 } 116 }
...@@ -126,42 +132,95 @@ public class SegmentRoutingAppConfig extends Config<ApplicationId> { ...@@ -126,42 +132,95 @@ public class SegmentRoutingAppConfig extends Config<ApplicationId> {
126 } 132 }
127 133
128 /** 134 /**
129 - * Gets names of ports that are ignored by SegmentRouting. 135 + * Gets names of ports to which SegmentRouting does not push subnet rules.
130 * 136 *
131 - * @return set of port names 137 + * @return Set of port names, empty if not specified, or null
138 + * if not valid
132 */ 139 */
133 - public Set<String> excludePorts() { 140 + public Set<ConnectPoint> suppressSubnet() {
134 - if (!object.has(EXCLUDE_PORTS)) { 141 + if (!object.has(SUPPRESS_SUBNET)) {
142 + return ImmutableSet.of();
143 + }
144 +
145 + ImmutableSet.Builder<ConnectPoint> builder = ImmutableSet.builder();
146 + ArrayNode arrayNode = (ArrayNode) object.path(SUPPRESS_SUBNET);
147 + for (JsonNode jsonNode : arrayNode) {
148 + String portName = jsonNode.asText(null);
149 + if (portName == null) {
150 + return null;
151 + }
152 + try {
153 + builder.add(ConnectPoint.deviceConnectPoint(portName));
154 + } catch (IllegalArgumentException e) {
135 return null; 155 return null;
136 } 156 }
157 + }
158 + return builder.build();
159 + }
137 160
138 - ImmutableSet.Builder<String> builder = ImmutableSet.builder(); 161 + /**
139 - ArrayNode arrayNode = (ArrayNode) object.path(EXCLUDE_PORTS); 162 + * Sets names of ports to which SegmentRouting does not push subnet rules.
163 + *
164 + * @param suppressSubnet names of ports to which SegmentRouting does not push
165 + * subnet rules
166 + * @return this {@link SegmentRoutingAppConfig}
167 + */
168 + public SegmentRoutingAppConfig setSuppressSubnet(Set<ConnectPoint> suppressSubnet) {
169 + if (suppressSubnet == null) {
170 + object.remove(SUPPRESS_SUBNET);
171 + } else {
172 + ArrayNode arrayNode = mapper.createArrayNode();
173 + suppressSubnet.forEach(connectPoint -> {
174 + arrayNode.add(connectPoint.deviceId() + "/" + connectPoint.port());
175 + });
176 + object.set(SUPPRESS_SUBNET, arrayNode);
177 + }
178 + return this;
179 + }
180 +
181 + /**
182 + * Gets names of ports to which SegmentRouting does not push host rules.
183 + *
184 + * @return Set of port names, empty if not specified, or null
185 + * if not valid
186 + */
187 + public Set<ConnectPoint> suppressHost() {
188 + if (!object.has(SUPPRESS_HOST)) {
189 + return ImmutableSet.of();
190 + }
191 +
192 + ImmutableSet.Builder<ConnectPoint> builder = ImmutableSet.builder();
193 + ArrayNode arrayNode = (ArrayNode) object.path(SUPPRESS_HOST);
140 for (JsonNode jsonNode : arrayNode) { 194 for (JsonNode jsonNode : arrayNode) {
141 String portName = jsonNode.asText(null); 195 String portName = jsonNode.asText(null);
142 if (portName == null) { 196 if (portName == null) {
143 return null; 197 return null;
144 } 198 }
145 - builder.add(portName); 199 + try {
200 + builder.add(ConnectPoint.deviceConnectPoint(portName));
201 + } catch (IllegalArgumentException e) {
202 + return null;
203 + }
146 } 204 }
147 return builder.build(); 205 return builder.build();
148 } 206 }
149 207
150 /** 208 /**
151 - * Sets names of ports that are ignored by SegmentRouting. 209 + * Sets names of ports to which SegmentRouting does not push host rules.
152 * 210 *
153 - * @param excludePorts names of ports that are ignored by SegmentRouting 211 + * @param suppressHost names of ports to which SegmentRouting does not push
212 + * host rules
154 * @return this {@link SegmentRoutingAppConfig} 213 * @return this {@link SegmentRoutingAppConfig}
155 */ 214 */
156 - public SegmentRoutingAppConfig setExcludePorts(Set<String> excludePorts) { 215 + public SegmentRoutingAppConfig setSuppressHost(Set<ConnectPoint> suppressHost) {
157 - if (excludePorts == null) { 216 + if (suppressHost == null) {
158 - object.remove(EXCLUDE_PORTS); 217 + object.remove(SUPPRESS_HOST);
159 } else { 218 } else {
160 ArrayNode arrayNode = mapper.createArrayNode(); 219 ArrayNode arrayNode = mapper.createArrayNode();
161 - excludePorts.forEach(portName -> { 220 + suppressHost.forEach(connectPoint -> {
162 - arrayNode.add(portName); 221 + arrayNode.add(connectPoint.deviceId() + "/" + connectPoint.port());
163 }); 222 });
164 - object.set(EXCLUDE_PORTS, arrayNode); 223 + object.set(SUPPRESS_HOST, arrayNode);
165 } 224 }
166 return this; 225 return this;
167 } 226 }
...@@ -170,7 +229,9 @@ public class SegmentRoutingAppConfig extends Config<ApplicationId> { ...@@ -170,7 +229,9 @@ public class SegmentRoutingAppConfig extends Config<ApplicationId> {
170 public String toString() { 229 public String toString() {
171 return toStringHelper(this) 230 return toStringHelper(this)
172 .add("vRouterMacs", vRouterMacs()) 231 .add("vRouterMacs", vRouterMacs())
173 - .add("excludePorts", excludePorts()) 232 + .add("vRouterId", vRouterId())
233 + .add("suppressSubnet", suppressSubnet())
234 + .add("suppressHost", suppressHost())
174 .toString(); 235 .toString();
175 } 236 }
176 } 237 }
......
...@@ -24,16 +24,17 @@ import org.junit.Test; ...@@ -24,16 +24,17 @@ import org.junit.Test;
24 import org.onlab.packet.MacAddress; 24 import org.onlab.packet.MacAddress;
25 import org.onosproject.core.ApplicationId; 25 import org.onosproject.core.ApplicationId;
26 import org.onosproject.TestApplicationId; 26 import org.onosproject.TestApplicationId;
27 +import org.onosproject.net.ConnectPoint;
27 import org.onosproject.net.DeviceId; 28 import org.onosproject.net.DeviceId;
28 import org.onosproject.net.config.Config; 29 import org.onosproject.net.config.Config;
29 import org.onosproject.net.config.ConfigApplyDelegate; 30 import org.onosproject.net.config.ConfigApplyDelegate;
30 import org.onosproject.segmentrouting.SegmentRoutingManager; 31 import org.onosproject.segmentrouting.SegmentRoutingManager;
32 +
33 +import java.util.Optional;
31 import java.util.Set; 34 import java.util.Set;
32 35
33 import static org.hamcrest.Matchers.is; 36 import static org.hamcrest.Matchers.is;
34 -import static org.junit.Assert.assertThat; 37 +import static org.junit.Assert.*;
35 -import static org.junit.Assert.assertTrue;
36 -import static org.junit.Assert.assertFalse;
37 38
38 /** 39 /**
39 * Tests for class {@link SegmentRoutingAppConfig}. 40 * Tests for class {@link SegmentRoutingAppConfig}.
...@@ -50,25 +51,29 @@ public class SegmentRoutingAppConfigTest { ...@@ -50,25 +51,29 @@ public class SegmentRoutingAppConfigTest {
50 " \"00:00:00:00:00:02\"" + 51 " \"00:00:00:00:00:02\"" +
51 "]," + 52 "]," +
52 "\"vRouterId\" : \"of:1\"," + 53 "\"vRouterId\" : \"of:1\"," +
53 - "\"excludePorts\" : [" + 54 + "\"suppressSubnet\" : [" +
54 - " \"port1\"," + 55 + " \"of:1/1\"," +
55 - " \"port2\"" + 56 + " \"of:1/2\"" +
57 + "]," +
58 + "\"suppressHost\" : [" +
59 + " \"of:1/1\"," +
60 + " \"of:1/2\"" +
56 "]}"; 61 "]}";
57 private static final String INVALID_JSON_STRING = "{" + 62 private static final String INVALID_JSON_STRING = "{" +
58 "\"vRouterMacs\" : [" + 63 "\"vRouterMacs\" : [" +
59 " \"00:00:00:00:00:01\"," + 64 " \"00:00:00:00:00:01\"," +
60 " \"00:00:00:00:00:02\"" + 65 " \"00:00:00:00:00:02\"" +
61 "]," + 66 "]," +
62 - "\"excludePorts\" : [" + 67 + "\"suppressSubnet\" : [" +
63 - " \"port1\"," + 68 + " \"of:1/1\"," +
64 - " \"port2\"" + 69 + " \"wrongport\"" +
65 "]}"; 70 "]}";
66 private static final MacAddress ROUTER_MAC_1 = MacAddress.valueOf("00:00:00:00:00:01"); 71 private static final MacAddress ROUTER_MAC_1 = MacAddress.valueOf("00:00:00:00:00:01");
67 private static final MacAddress ROUTER_MAC_2 = MacAddress.valueOf("00:00:00:00:00:02"); 72 private static final MacAddress ROUTER_MAC_2 = MacAddress.valueOf("00:00:00:00:00:02");
68 private static final MacAddress ROUTER_MAC_3 = MacAddress.valueOf("00:00:00:00:00:03"); 73 private static final MacAddress ROUTER_MAC_3 = MacAddress.valueOf("00:00:00:00:00:03");
69 - private static final String PORT_NAME_1 = "port1"; 74 + private static final ConnectPoint PORT_1 = ConnectPoint.deviceConnectPoint("of:1/1");
70 - private static final String PORT_NAME_2 = "port2"; 75 + private static final ConnectPoint PORT_2 = ConnectPoint.deviceConnectPoint("of:1/2");
71 - private static final String PORT_NAME_3 = "port3"; 76 + private static final ConnectPoint PORT_3 = ConnectPoint.deviceConnectPoint("of:1/3");
72 private static final DeviceId VROUTER_ID_1 = DeviceId.deviceId("of:1"); 77 private static final DeviceId VROUTER_ID_1 = DeviceId.deviceId("of:1");
73 private static final DeviceId VROUTER_ID_2 = DeviceId.deviceId("of:2"); 78 private static final DeviceId VROUTER_ID_2 = DeviceId.deviceId("of:2");
74 79
...@@ -109,11 +114,12 @@ public class SegmentRoutingAppConfigTest { ...@@ -109,11 +114,12 @@ public class SegmentRoutingAppConfigTest {
109 * @throws Exception 114 * @throws Exception
110 */ 115 */
111 @Test 116 @Test
112 - public void testVRouters() throws Exception { 117 + public void testVRouterMacs() throws Exception {
113 - Set<MacAddress> vRouters = config.vRouterMacs(); 118 + Set<MacAddress> vRouterMacs = config.vRouterMacs();
114 - assertThat(vRouters.size(), is(2)); 119 + assertNotNull("vRouterMacs should not be null", vRouterMacs);
115 - assertTrue(vRouters.contains(ROUTER_MAC_1)); 120 + assertThat(vRouterMacs.size(), is(2));
116 - assertTrue(vRouters.contains(ROUTER_MAC_2)); 121 + assertTrue(vRouterMacs.contains(ROUTER_MAC_1));
122 + assertTrue(vRouterMacs.contains(ROUTER_MAC_2));
117 } 123 }
118 124
119 /** 125 /**
...@@ -122,14 +128,14 @@ public class SegmentRoutingAppConfigTest { ...@@ -122,14 +128,14 @@ public class SegmentRoutingAppConfigTest {
122 * @throws Exception 128 * @throws Exception
123 */ 129 */
124 @Test 130 @Test
125 - public void testSetVRouters() throws Exception { 131 + public void testSetVRouterMacs() throws Exception {
126 ImmutableSet.Builder<MacAddress> builder = ImmutableSet.builder(); 132 ImmutableSet.Builder<MacAddress> builder = ImmutableSet.builder();
127 builder.add(ROUTER_MAC_3); 133 builder.add(ROUTER_MAC_3);
128 config.setVRouterMacs(builder.build()); 134 config.setVRouterMacs(builder.build());
129 135
130 - Set<MacAddress> macs = config.vRouterMacs(); 136 + Set<MacAddress> vRouterMacs = config.vRouterMacs();
131 - assertThat(macs.size(), is(1)); 137 + assertThat(vRouterMacs.size(), is(1));
132 - assertTrue(macs.contains(ROUTER_MAC_3)); 138 + assertTrue(vRouterMacs.contains(ROUTER_MAC_3));
133 } 139 }
134 140
135 /** 141 /**
...@@ -139,7 +145,9 @@ public class SegmentRoutingAppConfigTest { ...@@ -139,7 +145,9 @@ public class SegmentRoutingAppConfigTest {
139 */ 145 */
140 @Test 146 @Test
141 public void testVRouterId() throws Exception { 147 public void testVRouterId() throws Exception {
142 - assertThat(config.vRouterId(), is(VROUTER_ID_1)); 148 + Optional<DeviceId> vRouterId = config.vRouterId();
149 + assertTrue(vRouterId.isPresent());
150 + assertThat(vRouterId.get(), is(VROUTER_ID_1));
143 } 151 }
144 152
145 /** 153 /**
...@@ -150,36 +158,72 @@ public class SegmentRoutingAppConfigTest { ...@@ -150,36 +158,72 @@ public class SegmentRoutingAppConfigTest {
150 @Test 158 @Test
151 public void testSetVRouterId() throws Exception { 159 public void testSetVRouterId() throws Exception {
152 config.setVRouterId(VROUTER_ID_2); 160 config.setVRouterId(VROUTER_ID_2);
153 - assertThat(config.vRouterId(), is(VROUTER_ID_2)); 161 +
162 + Optional<DeviceId> vRouterId = config.vRouterId();
163 + assertTrue(vRouterId.isPresent());
164 + assertThat(vRouterId.get(), is(VROUTER_ID_2));
165 + }
166 +
167 + /**
168 + * Tests suppressSubnet getter.
169 + *
170 + * @throws Exception
171 + */
172 + @Test
173 + public void testSuppressSubnet() throws Exception {
174 + Set<ConnectPoint> suppressSubnet = config.suppressSubnet();
175 + assertNotNull("suppressSubnet should not be null", suppressSubnet);
176 + assertThat(suppressSubnet.size(), is(2));
177 + assertTrue(suppressSubnet.contains(PORT_1));
178 + assertTrue(suppressSubnet.contains(PORT_2));
179 + }
180 +
181 + /**
182 + * Tests suppressSubnet setter.
183 + *
184 + * @throws Exception
185 + */
186 + @Test
187 + public void testSetSuppressSubnet() throws Exception {
188 + ImmutableSet.Builder<ConnectPoint> builder = ImmutableSet.builder();
189 + builder.add(PORT_3);
190 + config.setSuppressSubnet(builder.build());
191 +
192 + Set<ConnectPoint> suppressSubnet = config.suppressSubnet();
193 + assertNotNull("suppressSubnet should not be null", suppressSubnet);
194 + assertThat(suppressSubnet.size(), is(1));
195 + assertTrue(suppressSubnet.contains(PORT_3));
154 } 196 }
155 197
156 /** 198 /**
157 - * Tests excludePort getter. 199 + * Tests suppressHost getter.
158 * 200 *
159 * @throws Exception 201 * @throws Exception
160 */ 202 */
161 @Test 203 @Test
162 - public void testExcludePorts() throws Exception { 204 + public void testSuppressHost() throws Exception {
163 - Set<String> excludePorts = config.excludePorts(); 205 + Set<ConnectPoint> suppressHost = config.suppressHost();
164 - assertThat(excludePorts.size(), is(2)); 206 + assertNotNull("suppressHost should not be null", suppressHost);
165 - assertTrue(excludePorts.contains(PORT_NAME_1)); 207 + assertThat(suppressHost.size(), is(2));
166 - assertTrue(excludePorts.contains(PORT_NAME_2)); 208 + assertTrue(suppressHost.contains(PORT_1));
209 + assertTrue(suppressHost.contains(PORT_2));
167 } 210 }
168 211
169 /** 212 /**
170 - * Tests excludePort setter. 213 + * Tests suppressHost setter.
171 * 214 *
172 * @throws Exception 215 * @throws Exception
173 */ 216 */
174 @Test 217 @Test
175 - public void testSetExcludePorts() throws Exception { 218 + public void testSetSuppressHost() throws Exception {
176 - ImmutableSet.Builder<String> builder = ImmutableSet.builder(); 219 + ImmutableSet.Builder<ConnectPoint> builder = ImmutableSet.builder();
177 - builder.add(PORT_NAME_3); 220 + builder.add(PORT_3);
178 - config.setExcludePorts(builder.build()); 221 + config.setSuppressHost(builder.build());
179 - 222 +
180 - Set<String> excludePorts = config.excludePorts(); 223 + Set<ConnectPoint> suppressHost = config.suppressHost();
181 - assertThat(excludePorts.size(), is(1)); 224 + assertNotNull("suppressHost should not be null", suppressHost);
182 - assertTrue(excludePorts.contains(PORT_NAME_3)); 225 + assertThat(suppressHost.size(), is(1));
226 + assertTrue(suppressHost.contains(PORT_3));
183 } 227 }
184 228
185 private class MockDelegate implements ConfigApplyDelegate { 229 private class MockDelegate implements ConfigApplyDelegate {
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
35 "of:0000000000000002/5" : { 35 "of:0000000000000002/5" : {
36 "interfaces" : [ 36 "interfaces" : [
37 { 37 {
38 - "name" : "2/5/1",
39 "ips" : [ "100.0.0.0/24" ], 38 "ips" : [ "100.0.0.0/24" ],
40 "vlan" : "-1" 39 "vlan" : "-1"
41 } 40 }
...@@ -123,8 +122,11 @@ ...@@ -123,8 +122,11 @@
123 "00:00:00:aa:00:02" 122 "00:00:00:aa:00:02"
124 ], 123 ],
125 "vRouterId" : "of:0000000000000002", 124 "vRouterId" : "of:0000000000000002",
126 - "excludePorts" : [ 125 + "suppressSubnet" : [
127 - "2/5/1" 126 + "of:0000000000000002/5"
127 + ],
128 + "suppressHost" : [
129 + "of:0000000000000002/5"
128 ] 130 ]
129 } 131 }
130 } 132 }
......