diff options
Diffstat (limited to 'vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java')
-rw-r--r-- | vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java index cb8b2ac87..2d0b51b40 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java @@ -39,17 +39,11 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. */ public interface Ipv6Translator extends ByteDataTranslator { - /** - * Transform Ipv6 address to a byte array acceptable by VPP. VPP expects incoming byte array to be in the same order - * as the address. - * - * @return byte array with address bytes - */ - default byte[] ipv6AddressNoZoneToArray(@Nonnull final Ipv6AddressNoZone ipv6Addr) { + default byte[] ipv6AddressNoZoneToArray(@Nonnull final String address) { byte[] retval = new byte[16]; //splits address and add ommited zeros for easier parsing - List<String> segments = Arrays.asList(ipv6Addr.getValue().split(":")) + List<String> segments = Arrays.asList(address.split(":")) .stream() .map(segment -> StringUtils.repeat('0', 4 - segment.length()) + segment) .collect(Collectors.toList()); @@ -74,6 +68,16 @@ public interface Ipv6Translator extends ByteDataTranslator { } /** + * Transform Ipv6 address to a byte array acceptable by VPP. VPP expects incoming byte array to be in the same order + * as the address. + * + * @return byte array with address bytes + */ + default byte[] ipv6AddressNoZoneToArray(@Nonnull final Ipv6AddressNoZone ipv6Addr) { + return ipv6AddressNoZoneToArray(ipv6Addr.getValue()); + } + + /** * Creates address array from address part of {@link Ipv6Prefix} */ default byte[] ipv6AddressPrefixToArray(@Nonnull final Ipv6Prefix ipv6Prefix) { @@ -136,4 +140,15 @@ public interface Ipv6Translator extends ByteDataTranslator { checkState(!(address.getIpv4Prefix() == null && address.getIpv6Prefix() == null), "Invalid address"); return address.getIpv6Prefix() != null; } + + default Ipv6Prefix toIpv6Prefix(final byte[] address, final int prefix) { + try { + return new Ipv6Prefix( + String.format("%s/%s", InetAddress.getByAddress(address).getHostAddress(), + String.valueOf(prefix))); + } catch (UnknownHostException e) { + throw new IllegalArgumentException( + "Cannot create prefix for address[" + Arrays.toString(address) + "],prefix[" + prefix + "]"); + } + } } |