Implement component config to enable double tagged host programming
Change-Id: I4b2c113e5ddcfe23f825fb15d053cc2ee48ee9e1
diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/HostHandler.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/HostHandler.java
index d4fbcad..e4d85de 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/HostHandler.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/HostHandler.java
@@ -529,6 +529,11 @@
MacAddress mac, VlanId innerVlan,
VlanId outerVlan, EthType outerTpid,
IpAddress ip, boolean revoke) {
+ if (!srManager.handleDoubleTaggedHosts) {
+ log.debug("Ignore double tagged host {}/{}/{}", mac, outerVlan, innerVlan);
+ return;
+ }
+
ConnectPoint location = new ConnectPoint(deviceId, port);
if (!srManager.deviceConfiguration.inSameSubnet(location, ip)) {
log.info("{} is not included in the subnet config of {}/{}. Ignored.", ip, deviceId, port);
@@ -545,6 +550,30 @@
}
}
+ void populateAllDoubleTaggedHost() {
+ log.info("Populating all double tagged hosts");
+ Sets.newHashSet(srManager.hostService.getHosts()).stream().filter(this::isDoubleTaggedHost)
+ .forEach(h -> h.locations().forEach(l ->
+ h.ipAddresses().forEach(i ->
+ processDoubleTaggedRoutingRule(l.deviceId(), l.port(), h.mac(), h.innerVlan(),
+ h.vlan(), h.tpid(), i, false)
+ )
+ )
+ );
+ }
+
+ void revokeAllDoubleTaggedHost() {
+ log.info("Revoking all double tagged hosts");
+ Sets.newHashSet(srManager.hostService.getHosts()).stream().filter(this::isDoubleTaggedHost)
+ .forEach(h -> h.locations().forEach(l ->
+ h.ipAddresses().forEach(i ->
+ processDoubleTaggedRoutingRule(l.deviceId(), l.port(), h.mac(), h.innerVlan(),
+ h.vlan(), h.tpid(), i, true)
+ )
+ )
+ );
+ }
+
/**
* Returns VLAN ID to be used to program redirection flow on pair port.
*