Add generalized IetfInetUtil.ipPrefixFor() 23/96623/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 20 Jul 2021 18:43:01 +0000 (20:43 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 21 Jul 2021 18:08:26 +0000 (18:08 +0000)
Conversion of IpAddress (or IpAddressNoZone) to a IpPrefix is rather
something which is useful to reduce RSI where we already provide
base address->prefix utilities.

Change-Id: I2242e8945065763f6941dff0db1c6f4f14776286
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit b9982f1378245b75525d8fdb5638ceb7b2ca7b40)

model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfInetUtil.java

index ae330d4eabdeb171da62359153ecf66a6546c9ad..d79fa592c733a0ba47314961f8a1a0ed6540fea9 100644 (file)
@@ -170,27 +170,27 @@ public abstract class AbstractIetfInetUtil<A4, A4NZ extends A4, P4, A6, A6NZ ext
         }
     }
 
+    public final @NonNull P ipPrefixFor(final @NonNull A addr) {
+        final A4 v4 = maybeIpv4Address(addr);
+        return v4 != null ? ipv4Prefix(ipv4PrefixFor(v4)) : ipv6Prefix(ipv6PrefixFor(coerceIpv6Address(addr)));
+    }
+
+    public final @NonNull P ipPrefixForNoZone(final @NonNull ANZ addr) {
+        final A4NZ v4 = maybeIpv4AddressNoZone(addr);
+        return v4 != null ? ipv4Prefix(ipv4PrefixFor(inet4AddressForNoZone(v4)))
+            : ipv6Prefix(ipv6PrefixFor(coerceIpv6AddressNoZone(addr)));
+    }
+
     public final @NonNull InetAddress inetAddressFor(final @NonNull A addr) {
         final A4 v4 = maybeIpv4Address(addr);
-        if (v4 != null) {
-            return inet4AddressFor(v4);
-        }
-        final A6 v6 = maybeIpv6Address(addr);
-        checkArgument(v6 != null, "Address %s is neither IPv4 nor IPv6", addr);
-        return inet6AddressFor(v6);
+        return v4 != null ? inet4AddressFor(v4) : inet6AddressFor(coerceIpv6Address(addr));
     }
 
     public final @NonNull InetAddress inetAddressForNoZone(final @NonNull ANZ addr) {
         final A4NZ v4 = maybeIpv4AddressNoZone(addr);
-        if (v4 != null) {
-            return inet4AddressForNoZone(v4);
-        }
-        final A6NZ v6 = maybeIpv6AddressNoZone(addr);
-        checkArgument(v6 != null, "Address %s is neither IPv4 nor IPv6", addr);
-        return inet6AddressForNoZone(v6);
+        return v4 != null ? inet4AddressForNoZone(v4) : inet6AddressForNoZone(coerceIpv6AddressNoZone(addr));
     }
 
-
     public final @NonNull Inet4Address inet4AddressFor(final @NonNull A4 addr) {
         try {
             return (Inet4Address) InetAddress.getByAddress(ipv4AddressBytes(addr));
@@ -681,4 +681,16 @@ public abstract class AbstractIetfInetUtil<A4, A4NZ extends A4, P4, A6, A6NZ ext
 
         return prefix4Factory.newInstance(sb.toString());
     }
+
+    private @NonNull A6 coerceIpv6Address(final @NonNull A addr) {
+        final A6 ret = maybeIpv6Address(addr);
+        checkArgument(ret != null, "Address %s is neither IPv4 nor IPv6", addr);
+        return ret;
+    }
+
+    private @NonNull A6NZ coerceIpv6AddressNoZone(final @NonNull ANZ addr) {
+        final A6NZ ret = maybeIpv6AddressNoZone(addr);
+        checkArgument(ret != null, "Address %s is neither IPv4 nor IPv6", addr);
+        return ret;
+    }
 }