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;
@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
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;
@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
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;
@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;
}
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;
@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;
}
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;
@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
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;
@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
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
}
/**
- * 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) {