Add IpConversionUtil.hasIpv4Prefix() 43/80543/8
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 22 Feb 2019 12:09:35 +0000 (13:09 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 7 Mar 2019 10:43:20 +0000 (11:43 +0100)
This is a mirror method to the IPv6 case. The IPv6 version is
also optimized to prevent unnecessary reboxing via a shared internal
utility method.

JIRA: OPNFLWPLUG-1067
Change-Id: Ic32b95a52a197e5735f1740cbd7b2cb3530baa99
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/match/ArpSourceTransportAddressEntrySerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/match/ArpTargetTransportAddressEntrySerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/match/Ipv4DestinationEntrySerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/match/Ipv4SourceEntrySerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/match/TunnelIpv4DestinationEntrySerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/match/TunnelIpv4SourceEntrySerializer.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/IpConversionUtil.java

index 0e167e7ddc8fefa5257689d24e9e01edf105e005..57a60c9587f53c9a63b547a475f3544f53cda12e 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.openflowplugin.impl.protocol.serialization.match;
 
 import io.netty.buffer.ByteBuf;
-import java.util.Iterator;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;
@@ -32,13 +31,8 @@ public class ArpSourceTransportAddressEntrySerializer extends AbstractMatchEntry
 
     @Override
     protected boolean getHasMask(Match match) {
-        // Split address to IP and mask
-        final Iterator<String> addressParts = IpConversionUtil.splitToParts(
-                ((ArpMatch) match.getLayer3Match()).getArpSourceTransportAddress());
-        addressParts.next();
-
-        // Check if we have mask
-        return addressParts.hasNext() && Integer.parseInt(addressParts.next()) < 32;
+        return IpConversionUtil.hasIpv4Prefix(((ArpMatch) match.getLayer3Match()).getArpSourceTransportAddress())
+                != null;
     }
 
     @Override
index 9a7c7903ee0405a4cbe1df11c9ba2b020cb375d9..f88267553faaa3cb67be6b9db7a9e38b5fe8e41f 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.openflowplugin.impl.protocol.serialization.match;
 
 import io.netty.buffer.ByteBuf;
-import java.util.Iterator;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;
@@ -32,13 +31,8 @@ public class ArpTargetTransportAddressEntrySerializer extends AbstractMatchEntry
 
     @Override
     protected boolean getHasMask(Match match) {
-        // Split address to IP and mask
-        final Iterator<String> addressParts = IpConversionUtil.splitToParts(
-                ((ArpMatch) match.getLayer3Match()).getArpTargetTransportAddress());
-        addressParts.next();
-
-        // Check if we have mask
-        return addressParts.hasNext() && Integer.parseInt(addressParts.next()) < 32;
+        return IpConversionUtil.hasIpv4Prefix(((ArpMatch) match.getLayer3Match()).getArpTargetTransportAddress())
+                != null;
     }
 
     @Override
index 37d4cf88aa2ecc7ae45aea5b845a603795bca764..33d88a20b8ab40a04c1a3b3c5332a35a6ac2d810 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.openflowplugin.impl.protocol.serialization.match;
 
 import io.netty.buffer.ByteBuf;
-import java.util.Iterator;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;
@@ -52,13 +51,7 @@ public class Ipv4DestinationEntrySerializer extends AbstractMatchEntrySerializer
     @Override
     protected boolean getHasMask(Match match) {
         if (isPrefix(match)) {
-            // Split address to IP and mask
-            final Iterator<String> addressParts = IpConversionUtil.splitToParts(
-                    ((Ipv4Match) match.getLayer3Match()).getIpv4Destination());
-            addressParts.next();
-
-            // Check if we have mask
-            return addressParts.hasNext() && Integer.parseInt(addressParts.next()) < 32;
+            return IpConversionUtil.hasIpv4Prefix(((Ipv4Match) match.getLayer3Match()).getIpv4Destination()) != null;
         } else if (isArbitrary(match)) {
             return ((Ipv4MatchArbitraryBitMask) match.getLayer3Match()).getIpv4DestinationArbitraryBitmask() != null;
         }
index c419a44e255006669f73eed0b80bcac69e931757..2fe043f6257caeef7d7e6f7428c4685d4a20f858 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.openflowplugin.impl.protocol.serialization.match;
 
 import io.netty.buffer.ByteBuf;
-import java.util.Iterator;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;
@@ -52,13 +51,7 @@ public class Ipv4SourceEntrySerializer extends AbstractMatchEntrySerializer {
     @Override
     protected boolean getHasMask(Match match) {
         if (isPrefix(match)) {
-            // Split address to IP and mask
-            final Iterator<String> addressParts = IpConversionUtil.splitToParts(
-                    ((Ipv4Match) match.getLayer3Match()).getIpv4Source());
-            addressParts.next();
-
-            // Check if we have mask
-            return addressParts.hasNext() && Integer.parseInt(addressParts.next()) < 32;
+            return IpConversionUtil.hasIpv4Prefix(((Ipv4Match) match.getLayer3Match()).getIpv4Source()) != null;
         } else if (isArbitrary(match)) {
             return ((Ipv4MatchArbitraryBitMask) match.getLayer3Match()).getIpv4SourceArbitraryBitmask() != null;
         }
index 64382e78a08a907973bf48a6ac2a9e371c16a7aa..5f073dbcf4dab6d760ad0fcca6e757ebda9cb47c 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.openflowplugin.impl.protocol.serialization.match;
 
 import io.netty.buffer.ByteBuf;
-import java.util.Iterator;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;
@@ -33,13 +32,8 @@ public class TunnelIpv4DestinationEntrySerializer extends AbstractMatchEntrySeri
 
     @Override
     protected boolean getHasMask(Match match) {
-        // Split address to IP and mask
-        final Iterator<String> addressParts = IpConversionUtil.splitToParts(
-                ((TunnelIpv4Match) match.getLayer3Match()).getTunnelIpv4Destination());
-        addressParts.next();
-
-        // Check if we have mask
-        return addressParts.hasNext() && Integer.parseInt(addressParts.next()) < 32;
+        return IpConversionUtil.hasIpv4Prefix(((TunnelIpv4Match) match.getLayer3Match()).getTunnelIpv4Destination())
+                != null;
     }
 
     @Override
index 6849068c5bc2a939a3287756b47f3f98fc126716..9e0220fb28e7cedfa8cf11fc20c2b5f265293025 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.openflowplugin.impl.protocol.serialization.match;
 
 import io.netty.buffer.ByteBuf;
-import java.util.Iterator;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;
@@ -33,13 +32,7 @@ public class TunnelIpv4SourceEntrySerializer extends AbstractMatchEntrySerialize
 
     @Override
     protected boolean getHasMask(Match match) {
-        // Split address to IP and mask
-        final Iterator<String> addressParts = IpConversionUtil.splitToParts(
-                ((TunnelIpv4Match) match.getLayer3Match()).getTunnelIpv4Source());
-        addressParts.next();
-
-        // Check if we have mask
-        return addressParts.hasNext() && Integer.parseInt(addressParts.next()) < 32;
+        return IpConversionUtil.hasIpv4Prefix(((TunnelIpv4Match) match.getLayer3Match()).getTunnelIpv4Source()) != null;
     }
 
     @Override
index 224280760bce21387e4f41529191ae4f0db717f6..6b86c3c1a6ef17b47ae7efce9464debacecb0a77 100644 (file)
@@ -222,6 +222,20 @@ public final class IpConversionUtil {
         return 128;
     }
 
+    /**
+     * Check if the supplied Ipv4Prefix has a prefix shorter than IPv4 address length.
+     *
+     * @param ipv4Prefix Ipv4 prefix
+     * @return prefix if there is one, else null
+     */
+    public static Integer hasIpv4Prefix(final Ipv4Prefix ipv4Prefix) {
+        return hasPrefix(extractPrefix(ipv4Prefix), IPV4_ADDRESS_LENGTH);
+    }
+
+    private static Integer hasPrefix(final Integer prefix, final int addressLength) {
+        return prefix != null && prefix < addressLength ? prefix : null;
+    }
+
     /*
      * BIG FAT WARNING!!!
      * Read all of the following before you touch any v6 code or decide to
@@ -595,14 +609,13 @@ public final class IpConversionUtil {
     }
 
     /**
-     * Check if the supplied IPv6Address has any prefix.
+     * Check if the supplied Ipv6Prefix has a prefix shorter than IPv6 address length.
      *
      * @param ipv6Prefix Ipv6 prefix
      * @return prefix if there is one, else null
      */
     public static Integer hasIpv6Prefix(final Ipv6Prefix ipv6Prefix) {
-        final int prefix = IpConversionUtil.extractIpv6Prefix(ipv6Prefix);
-        return prefix < IPV6_ADDRESS_LENGTH ? prefix : null;
+        return hasPrefix(extractIpv6Prefix(ipv6Prefix), IPV6_ADDRESS_LENGTH);
     }
 
     private static int ipv6PrefixByteArrayOffset(final int mask) {