[CORD-630] IPv6 filtering rules
Changes:
- Udpates TMAC table in order to handle IPv6 protocol;
- Updates ACL table in order to handle ICMPv6 traffic and traffic for the router;
- Udpates UNICAST table in order to handle the traffic towards the other routers;
- Updates the router ip in the netcfg in order to handle IPv6 address;
- Substitutes IpAddress and IpPrefix in many parts;
- Updates cpqd and ofdpa drivers to handle the above cases;
- Fixes the interaction with NRM when neighbordiscovery is activated;
- Introduces the IPv6 loopback and IPv6 node sid;
Change-Id: I0a3003be6f2f4b581cabe224c47a0cfbf51e8f9c
diff --git a/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingDeviceConfig.java b/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingDeviceConfig.java
index 21ba1e6..bc0d329 100644
--- a/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingDeviceConfig.java
+++ b/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingDeviceConfig.java
@@ -21,6 +21,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableMap;
import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ip6Address;
import org.onlab.packet.MacAddress;
import org.onosproject.net.DeviceId;
import org.onosproject.net.config.Config;
@@ -36,9 +37,11 @@
*/
public class SegmentRoutingDeviceConfig extends Config<DeviceId> {
private static final String NAME = "name";
- private static final String IP = "routerIp";
+ private static final String IP4 = "ipv4Loopback";
+ private static final String IP6 = "ipv6Loopback";
private static final String MAC = "routerMac";
- private static final String SID = "nodeSid";
+ private static final String IP4_SID = "ipv4NodeSid";
+ private static final String IP6_SID = "ipv6NodeSid";
private static final String EDGE = "isEdgeRouter";
private static final String ADJSIDS = "adjacencySids";
private static final String ADJSID = "adjSid";
@@ -46,11 +49,13 @@
@Override
public boolean isValid() {
- return hasOnlyFields(NAME, IP, MAC, SID, EDGE, ADJSIDS, ADJSID, PORTS) &&
+ return hasOnlyFields(NAME, IP4, IP6, MAC,
+ IP4_SID, IP6_SID, EDGE,
+ ADJSIDS, ADJSID, PORTS) &&
name() != null &&
- routerIp() != null &&
+ routerIpv4() != null &&
routerMac() != null &&
- nodeSid() != -1 &&
+ nodeSidIPv4() != -1 &&
isEdgeRouter() != null &&
adjacencySids() != null;
}
@@ -76,23 +81,43 @@
}
/**
- * Gets the IP address of the router.
+ * Gets the IPv4 address of the router.
*
* @return IP address of the router. Or null if not configured.
*/
- public Ip4Address routerIp() {
- String ip = get(IP, null);
+ public Ip4Address routerIpv4() {
+ String ip = get(IP4, null);
return ip != null ? Ip4Address.valueOf(ip) : null;
}
/**
- * Sets the IP address of the router.
+ * Gets the IPv6 address of the router.
*
- * @param ip IP address of the router.
+ * @return IP address of the router. Or null if not configured.
+ */
+ public Ip6Address routerIpv6() {
+ String ip = get(IP6, null);
+ return ip != null ? Ip6Address.valueOf(ip) : null;
+ }
+
+ /**
+ * Sets the IPv4 address of the router.
+ *
+ * @param ip IPv4 address of the router.
* @return the config of the router.
*/
- public SegmentRoutingDeviceConfig setRouterIp(String ip) {
- return (SegmentRoutingDeviceConfig) setOrClear(IP, ip);
+ public SegmentRoutingDeviceConfig setRouterIpv4(String ip) {
+ return (SegmentRoutingDeviceConfig) setOrClear(IP4, ip);
+ }
+
+ /**
+ * Sets the IPv6 address of the router.
+ *
+ * @param ip IPv6 address of the router.
+ * @return the config of the router.
+ */
+ public SegmentRoutingDeviceConfig setRouterIpv6(String ip) {
+ return (SegmentRoutingDeviceConfig) setOrClear(IP6, ip);
}
/**
@@ -116,22 +141,41 @@
}
/**
- * Gets the node SID of the router.
+ * Gets the IPv4 node SID of the router.
*
* @return node SID of the router. Or -1 if not configured.
*/
- public int nodeSid() {
- return get(SID, -1);
+ public int nodeSidIPv4() {
+ return get(IP4_SID, -1);
}
/**
- * Sets the node SID of the router.
+ * Gets the IPv6 node SID of the router.
+ *
+ * @return node SID of the router. Or -1 if not configured.
+ */
+ public int nodeSidIPv6() {
+ return get(IP6_SID, -1);
+ }
+
+ /**
+ * Sets the node IPv4 node SID of the router.
*
* @param sid node SID of the router.
* @return the config of the router.
*/
- public SegmentRoutingDeviceConfig setNodeSid(int sid) {
- return (SegmentRoutingDeviceConfig) setOrClear(SID, sid);
+ public SegmentRoutingDeviceConfig setNodeSidIPv4(int sid) {
+ return (SegmentRoutingDeviceConfig) setOrClear(IP4_SID, sid);
+ }
+
+ /**
+ * Sets the node IPv6 node SID of the router.
+ *
+ * @param sid node SID of the router.
+ * @return the config of the router.
+ */
+ public SegmentRoutingDeviceConfig setNodeSidIPv6(int sid) {
+ return (SegmentRoutingDeviceConfig) setOrClear(IP6_SID, sid);
}
/**
@@ -222,4 +266,4 @@
return this;
}
-}
\ No newline at end of file
+}