CORD-60 Support dynamic vSG creation/deletion
We no longer need to configure /32 IP in interfaces.
SR will push a per-host route when discovering a host
with IP address(es) that does not belong to configured subnet.
Also includes:
- HostHandler refactoring
Change-Id: Ic1ad42d1ccdfee32be85f49e6fc94d9026000ffc
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
index 8fe00ba..d95efd2 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java
@@ -46,6 +46,8 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import static com.google.common.base.Preconditions.checkNotNull;
+
/**
* Segment Routing configuration component that reads the
* segment routing related configuration from Network Configuration Manager
@@ -167,7 +169,6 @@
}
}
});
-
});
}
@@ -517,4 +518,38 @@
cfgService.getConfig(appId, SegmentRoutingAppConfig.class);
return (appConfig != null) ? appConfig.suppressHost() : ImmutableSet.of();
}
+
+ /**
+ * Add subnet to specific connect point.
+ *
+ * @param cp connect point
+ * @param ip4Prefix subnet being added to the device
+ */
+ public void addSubnet(ConnectPoint cp, Ip4Prefix ip4Prefix) {
+ checkNotNull(cp);
+ checkNotNull(ip4Prefix);
+ SegmentRouterInfo srinfo = deviceConfigMap.get(cp.deviceId());
+ if (srinfo == null) {
+ log.warn("Device {} is not configured. Abort.", cp.deviceId());
+ return;
+ }
+ srinfo.subnets.put(cp.port(), ip4Prefix);
+ }
+
+ /**
+ * Remove subnet from specific connect point.
+ *
+ * @param cp connect point
+ * @param ip4Prefix subnet being removed to the device
+ */
+ public void removeSubnet(ConnectPoint cp, Ip4Prefix ip4Prefix) {
+ checkNotNull(cp);
+ checkNotNull(ip4Prefix);
+ SegmentRouterInfo srinfo = deviceConfigMap.get(cp.deviceId());
+ if (srinfo == null) {
+ log.warn("Device {} is not configured. Abort.", cp.deviceId());
+ return;
+ }
+ srinfo.subnets.remove(cp.port(), ip4Prefix);
+ }
}