grouping "ipv4-match-arbitrary-bitmask-fields" {
leaf ipv4-source-address-no-mask {
- description "IPv4 source address with no mask .";
+ description "IPv4 source address with no mask.";
type inet:ipv4-address;
}
}
leaf ipv4-source-arbitrary-bitmask {
- description "IPv4 source address with no mask .";
+ description "Arbitrary bit mask of IPv4 source address.";
type yang:dotted-quad;
}
leaf ipv4-destination-arbitrary-bitmask {
- description "IPv4 destination address with no mask.";
+ description "Arbitrary bit mask of IPv4 destination address.";
type yang:dotted-quad;
}
}
import java.util.BitSet;
import java.util.Iterator;
import java.util.List;
-
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-/**
- * Created by Martin Bobak <mbobak@cisco.com> on 5.3.2015.
- * v6 routines added by Anton Ivanov on 14.6.2015
- * Arbitrary masks by sai.marapareddy@gmail.com
- */
public final class IpConversionUtil {
private static final Logger LOG = LoggerFactory.getLogger(IpConversionUtil.class);
* @param ipv6Address - v6 Address object
* @return - byte array of size 16. Last byte contains netmask
*/
-
-
public static byte[] canonicalBinaryV6Address(final Ipv6Address ipv6Address) {
/*
* Do not modify this routine to take direct strings input!!!
* the input is validated via regexps in Ipv6Prefix()
*/
+ return canonicalBinaryV6AddressFromString(ipv6Address.getValue());
+ }
+
+
+ private static byte[] canonicalBinaryV6AddressFromString(final String ipv6Address) {
Iterable<String> splittedV6Address = Splitter.on("%")
.trimResults()
.omitEmptyStrings()
- .split(ipv6Address.getValue());
+ .split(ipv6Address);
List<String> partsV6Address = Lists.newArrayList(splittedV6Address.iterator());
int colonp;
return dst;
}
- public static String byteArrayV6AddressToString (final byte [] _binary_form) throws UnknownHostException{
+ public static String byteArrayV6AddressToString (final byte [] _binary_form) throws UnknownHostException {
/* DO NOT DIY!!! - InetAddresses will actually print correct canonical
* zero compressed form.
*/
return false;
}
- public static String compressedIpv6Format(final String ipv6Address) {
- String compressedIpv6Address;
- compressedIpv6Address = ipv6Address.replaceAll("((?::0+\\b){2,}):?(?!\\S*\\b\\1:0\\b)(\\S*)", "::$2");
- return compressedIpv6Address;
+ private static String compressedIpv6FormatFromString(final String ipv6Address) {
+ try {
+ return byteArrayV6AddressToString(canonicalBinaryV6AddressFromString(ipv6Address));
+ } catch (UnknownHostException e) {
+ LOG.warn("Failed to compress IPv6 address {} because it is invalid", ipv6Address);
+ return ipv6Address;
+ }
+ }
+
+ public static Ipv6Address compressedIpv6AddressFormat(final Ipv6Address ipv6Address) {
+ return new Ipv6Address(compressedIpv6FormatFromString(ipv6Address.getValue()));
}
public static Ipv6ArbitraryMask compressedIpv6MaskFormat(final Ipv6ArbitraryMask ipv6Mask) {
- String stringIpv6Mask = ipv6Mask.getValue();
- return new Ipv6ArbitraryMask(compressedIpv6Format(stringIpv6Mask));
+ return new Ipv6ArbitraryMask(compressedIpv6FormatFromString(ipv6Mask.getValue()));
}
}
Ipv6ArbitraryMask srcIpv6Arbitrary = IpConversionUtil.compressedIpv6MaskFormat(
IpConversionUtil.extractIpv6AddressMask(ipv6PrefixSourceAddress));
setSrcIpv6MatchArbitraryBitMaskBuilderFields(ipv6MatchArbitraryBitMaskBuilder,
- srcIpv6Arbitrary, IpConversionUtil.compressedIpv6Format(ipv6SrcAddress.getValue()));
+ srcIpv6Arbitrary, IpConversionUtil.compressedIpv6AddressFormat(ipv6SrcAddress));
}
Ipv6ArbitraryMask dstIpv6ArbitraryMask = IpConversionUtil.compressedIpv6MaskFormat(
IpConversionUtil.createIpv6ArbitraryBitMask(mask));
- String stringIpv6DstAddress = IpConversionUtil.compressedIpv6Format(ipv6Dst.getIpv6Address().getValue());
+ Ipv6Address stringIpv6DstAddress = IpConversionUtil.compressedIpv6AddressFormat(ipv6Dst.getIpv6Address());
setDstIpv6MatchArbitraryBitMaskBuilderFields(ipv6MatchArbitraryBitMaskBuilder,
dstIpv6ArbitraryMask, stringIpv6DstAddress);
matchBuilder.setLayer3Match(ipv6MatchArbitraryBitMaskBuilder.build());
*/
Ipv6ArbitraryMask dstIpv6ArbitraryMask = IpConversionUtil.compressedIpv6MaskFormat(
IpConversionUtil.createIpv6ArbitraryBitMask(mask));
- String stringIpv6DstAddress = IpConversionUtil.compressedIpv6Format(ipv6Dst.getIpv6Address().getValue());
+ Ipv6Address stringIpv6DstAddress = IpConversionUtil.compressedIpv6AddressFormat(ipv6Dst.getIpv6Address());
setDstIpv6MatchArbitraryBitMaskBuilderFields(ipv6MatchArbitraryBitMaskBuilder,
dstIpv6ArbitraryMask, stringIpv6DstAddress);
matchBuilder.setLayer3Match(ipv6MatchArbitraryBitMaskBuilder.build());
} else {
- String stringIpv6DstAddress = IpConversionUtil.compressedIpv6Format(ipv6Dst.getIpv6Address().getValue());
+ Ipv6Address stringIpv6DstAddress = IpConversionUtil.compressedIpv6AddressFormat(ipv6Dst.getIpv6Address());
setIpv6MatchBuilderFields(ipv6MatchBuilder, mask, stringIpv6DstAddress);
matchBuilder.setLayer3Match(ipv6MatchBuilder.build());
}
return Optional.of(matchBuilder);
}
- private static void setIpv6MatchBuilderFields(final Ipv6MatchBuilder ipv6MatchBuilder, final byte[] mask, final String ipv6PrefixStr) {
+ private static void setIpv6MatchBuilderFields(final Ipv6MatchBuilder builder, final byte[] mask, final Ipv6Address prefix) {
Ipv6Prefix ipv6Prefix;
-
if (mask != null) {
- ipv6Prefix = IpConversionUtil.createPrefix(new Ipv6Address(ipv6PrefixStr), mask);
+ ipv6Prefix = IpConversionUtil.createPrefix(prefix, mask);
} else {
- ipv6Prefix = IpConversionUtil.createPrefix(new Ipv6Address(ipv6PrefixStr));
+ ipv6Prefix = IpConversionUtil.createPrefix(prefix);
}
-
- ipv6MatchBuilder.setIpv6Destination(ipv6Prefix);
+ builder.setIpv6Destination(ipv6Prefix);
}
- private static void setSrcIpv6MatchArbitraryBitMaskBuilderFields(
- final Ipv6MatchArbitraryBitMaskBuilder ipv6MatchArbitraryBitMaskBuilder,
- final Ipv6ArbitraryMask mask, final String ipv6AddressStr) {
- Ipv6Address ipv6Address;
+ private static void setSrcIpv6MatchArbitraryBitMaskBuilderFields(final Ipv6MatchArbitraryBitMaskBuilder builder,
+ final Ipv6ArbitraryMask mask,
+ final Ipv6Address ipv6Address) {
if (mask != null) {
- ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceArbitraryBitmask(mask);
+ builder.setIpv6SourceArbitraryBitmask(mask);
}
- ipv6Address = new Ipv6Address(ipv6AddressStr);
- ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceAddressNoMask(ipv6Address);
+ builder.setIpv6SourceAddressNoMask(ipv6Address);
}
- private static void setDstIpv6MatchArbitraryBitMaskBuilderFields(
- final Ipv6MatchArbitraryBitMaskBuilder ipv6MatchArbitraryBitMaskBuilder,
- final Ipv6ArbitraryMask mask, final String ipv6AddressStr) {
- Ipv6Address ipv6Address;
+ private static void setDstIpv6MatchArbitraryBitMaskBuilderFields(final Ipv6MatchArbitraryBitMaskBuilder builder,
+ final Ipv6ArbitraryMask mask,
+ final Ipv6Address ipv6Address) {
if (mask != null) {
- ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationArbitraryBitmask(mask);
+ builder.setIpv6DestinationArbitraryBitmask(mask);
}
- ipv6Address = new Ipv6Address(ipv6AddressStr);
- ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationAddressNoMask(ipv6Address);
+ builder.setIpv6DestinationAddressNoMask(ipv6Address);
}
}
Ipv6ArbitraryMask dstIpv6ArbitraryMask = IpConversionUtil.compressedIpv6MaskFormat(
IpConversionUtil.extractIpv6AddressMask(ipv6PrefixDestinationAddress));
setDstIpv6MatchArbitraryBitMaskBuilderFields(ipv6MatchArbitraryBitMaskBuilder,
- dstIpv6ArbitraryMask, IpConversionUtil.compressedIpv6Format(ipv6DstAddress.getValue()));
+ dstIpv6ArbitraryMask, IpConversionUtil.compressedIpv6AddressFormat(ipv6DstAddress));
}
Ipv6ArbitraryMask srcIpv6ArbitraryMask = IpConversionUtil.compressedIpv6MaskFormat(
IpConversionUtil.createIpv6ArbitraryBitMask(mask));
- String stringIpv6SrcAddress = IpConversionUtil.compressedIpv6Format(ipv6Src.getIpv6Address().getValue());
+ Ipv6Address stringIpv6SrcAddress = IpConversionUtil.compressedIpv6AddressFormat(ipv6Src.getIpv6Address());
setSrcIpv6MatchArbitraryBitMaskBuilderFields(ipv6MatchArbitraryBitMaskBuilder,
srcIpv6ArbitraryMask, stringIpv6SrcAddress);
matchBuilder.setLayer3Match(ipv6MatchArbitraryBitMaskBuilder.build());
*/
Ipv6ArbitraryMask srcIpv6ArbitraryMask = IpConversionUtil.compressedIpv6MaskFormat(
IpConversionUtil.createIpv6ArbitraryBitMask(mask));
- String stringIpv6SrcAddress = IpConversionUtil.compressedIpv6Format(ipv6Src.getIpv6Address().getValue());
+ Ipv6Address stringIpv6SrcAddress = IpConversionUtil.compressedIpv6AddressFormat(ipv6Src.getIpv6Address());
setSrcIpv6MatchArbitraryBitMaskBuilderFields(ipv6MatchArbitraryBitMaskBuilder,
srcIpv6ArbitraryMask, stringIpv6SrcAddress);
matchBuilder.setLayer3Match(ipv6MatchArbitraryBitMaskBuilder.build());
} else {
- String stringIpv6SrcAddress = IpConversionUtil.compressedIpv6Format(ipv6Src.getIpv6Address().getValue());
+ Ipv6Address stringIpv6SrcAddress = IpConversionUtil.compressedIpv6AddressFormat(ipv6Src.getIpv6Address());
setIpv6MatchBuilderFields(ipv6MatchBuilder, mask, stringIpv6SrcAddress);
matchBuilder.setLayer3Match(ipv6MatchBuilder.build());
}
return Optional.of(matchBuilder);
}
- private static void setIpv6MatchBuilderFields(final Ipv6MatchBuilder ipv6MatchBuilder, final byte[] mask, final String ipv6PrefixStr) {
+ private static void setIpv6MatchBuilderFields(final Ipv6MatchBuilder builder, final byte[] mask, final Ipv6Address prefix) {
Ipv6Prefix ipv6Prefix;
-
if (mask != null) {
- ipv6Prefix = IpConversionUtil.createPrefix(new Ipv6Address(ipv6PrefixStr), mask);
+ ipv6Prefix = IpConversionUtil.createPrefix(prefix, mask);
} else {
- ipv6Prefix = IpConversionUtil.createPrefix(new Ipv6Address(ipv6PrefixStr));
+ ipv6Prefix = IpConversionUtil.createPrefix(prefix);
}
-
- ipv6MatchBuilder.setIpv6Source(ipv6Prefix);
+ builder.setIpv6Source(ipv6Prefix);
}
- private static void setSrcIpv6MatchArbitraryBitMaskBuilderFields(
- final Ipv6MatchArbitraryBitMaskBuilder ipv6MatchArbitraryBitMaskBuilder,
- final Ipv6ArbitraryMask mask, final String ipv6AddressStr) {
- Ipv6Address ipv6Address;
+ private static void setSrcIpv6MatchArbitraryBitMaskBuilderFields(final Ipv6MatchArbitraryBitMaskBuilder builder,
+ final Ipv6ArbitraryMask mask,
+ final Ipv6Address ipv6Address) {
if (mask != null) {
- ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceArbitraryBitmask(mask);
+ builder.setIpv6SourceArbitraryBitmask(mask);
}
- ipv6Address = new Ipv6Address(ipv6AddressStr);
- ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceAddressNoMask(ipv6Address);
+ builder.setIpv6SourceAddressNoMask(ipv6Address);
}
- private static void setDstIpv6MatchArbitraryBitMaskBuilderFields(
- final Ipv6MatchArbitraryBitMaskBuilder ipv6MatchArbitraryBitMaskBuilder,
- final Ipv6ArbitraryMask mask, final String ipv6AddressStr) {
- Ipv6Address ipv6Address;
+ private static void setDstIpv6MatchArbitraryBitMaskBuilderFields(final Ipv6MatchArbitraryBitMaskBuilder builder,
+ final Ipv6ArbitraryMask mask,
+ final Ipv6Address ipv6Address) {
if (mask != null) {
- ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationArbitraryBitmask(mask);
+ builder.setIpv6DestinationArbitraryBitmask(mask);
}
- ipv6Address = new Ipv6Address(ipv6AddressStr);
- ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationAddressNoMask(ipv6Address);
+ builder.setIpv6DestinationAddressNoMask(ipv6Address);
}
}
* terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
* and is available at http://www.eclipse.org/legal/epl-v10.html\r
*/\r
-package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;\r
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common;\r
\r
import java.math.BigInteger;\r
import java.util.Arrays;\r
import org.junit.Assert;\r
import org.junit.Test;\r
import org.opendaylight.openflowjava.util.ByteBufUtils;\r
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.IpConversionUtil;\r
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorUtil;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.opendaylight.ipv6.arbitrary.bitmask.fields.rev160224.Ipv6ArbitraryMask;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.opendaylight.ipv6.arbitrary.bitmask.fields.rev160224.Ipv6ArbitraryMask;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
\r
-/**\r
- * @author Anton Ivanov aivanov@brocade.com\r
- * @author Sai MarapaReddy sai.marapareddy@gmail.com\r
- *\r
- */\r
public class IpConversionUtilTest {\r
+ private static Logger LOG = LoggerFactory.getLogger(IpConversionUtilTest.class);\r
\r
- private static Logger LOG = LoggerFactory\r
- .getLogger(IpConversionUtilTest.class);\r
-\r
-\r
-\r
- /*\r
- * Test canonicalBinaryV6Address\r
- */\r
@Test\r
public void canonicalBinaryV6AddressTest() {\r
\r
}\r
}\r
\r
- /*\r
- * Test canonicalBinaryV6Prefix\r
- */\r
@Test\r
public void canonicalBinaryV6AddressPrefixTest() {\r
\r
}\r
}\r
\r
-\r
- /**\r
- * Test method for {@link MatchConvertorUtil#getIpv4Mask(byte[])}.\r
- *\r
- * @throws Exception\r
- */\r
-\r
@Test\r
public void testcountBitsAsGetIpv4Mask() {\r
byte[][] maskInputs = new byte[][]{\r
\r
@Test\r
public void compressedIpv6MaskFormatTest() {\r
- Ipv6ArbitraryMask compressedIpv6IpAddressMask;\r
- Ipv6ArbitraryMask ipv6IpAddressMask = new Ipv6ArbitraryMask("FFFF:0000:0000:0:0:0:1001:1000");\r
- compressedIpv6IpAddressMask = IpConversionUtil.compressedIpv6MaskFormat(ipv6IpAddressMask);\r
- Assert.assertEquals(compressedIpv6IpAddressMask.getValue(),"FFFF::1001:1000");\r
+ Ipv6ArbitraryMask compressedIpv6Mask;\r
+ Ipv6ArbitraryMask ipv6IpAddressMask;\r
+ // zero compression\r
+ ipv6IpAddressMask = new Ipv6ArbitraryMask("FFFF:0000:0000:0:0:0:1001:1000");\r
+ compressedIpv6Mask = IpConversionUtil.compressedIpv6MaskFormat(ipv6IpAddressMask);\r
+ Assert.assertEquals(compressedIpv6Mask.getValue(), "ffff::1001:1000");\r
+ // :: present - no compression\r
+ ipv6IpAddressMask = new Ipv6ArbitraryMask("FFFF::F000:0:0:1000");\r
+ compressedIpv6Mask = IpConversionUtil.compressedIpv6MaskFormat(ipv6IpAddressMask);\r
+ Assert.assertEquals(compressedIpv6Mask.getValue(), "ffff::f000:0:0:1000");\r
+ // more zero sequences - compress only one\r
+ ipv6IpAddressMask = new Ipv6ArbitraryMask("FFFF:0:0:F000:0000:0:0:1000");\r
+ compressedIpv6Mask = IpConversionUtil.compressedIpv6MaskFormat(ipv6IpAddressMask);\r
+ Assert.assertEquals(compressedIpv6Mask.getValue(), "ffff:0:0:f000::1000");\r
+ }\r
+\r
+ @Test\r
+ public void compressedIpv6AddressFormatTest() {\r
+ Ipv6Address compressedIpv6Address;\r
+ Ipv6Address ipv6IpAddressMask;\r
+ // zero compression\r
+ ipv6IpAddressMask = new Ipv6Address("FFFF:0000:0000:0:0:0:1001:1000");\r
+ compressedIpv6Address = IpConversionUtil.compressedIpv6AddressFormat(ipv6IpAddressMask);\r
+ Assert.assertEquals(compressedIpv6Address.getValue(), "ffff::1001:1000");\r
+ // :: present - no compression\r
+ ipv6IpAddressMask = new Ipv6Address("FFFF::F000:0:0:1000");\r
+ compressedIpv6Address = IpConversionUtil.compressedIpv6AddressFormat(ipv6IpAddressMask);\r
+ Assert.assertEquals(compressedIpv6Address.getValue(), "ffff::f000:0:0:1000");\r
+ // more zero sequences - compress only one\r
+ ipv6IpAddressMask = new Ipv6Address("FFFF:0:0:F000:0000:0:0:1000");\r
+ compressedIpv6Address = IpConversionUtil.compressedIpv6AddressFormat(ipv6IpAddressMask);\r
+ Assert.assertEquals(compressedIpv6Address.getValue(), "ffff:0:0:f000::1000");\r
}\r
+\r
}\r