diff options
author | 2016-06-08 20:51:32 +0200 | |
---|---|---|
committer | 2016-06-09 18:24:23 +0200 | |
commit | 973d8c2ecbb02cf6e4971060b6edec3617bce96f (patch) | |
tree | 84d2907763553be76a1573cbeca58f14713c380d /v3po/vpp-translate-utils/src/main/java | |
parent | e17470c944ae71202cf438bf36f87b4e032618ed (diff) |
HONEYCOMB-62: Add Ip readers
+ Fix 1 interface reads. Interface reader worked only
if GET interfaces-state was executed
+ Fix readSubtree for augmentations. Comoposite readers did
not check child readers for augmentations, only direct children.
Change-Id: I2bc433e3e5785453062ab262b9edabc72c333bf0
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Diffstat (limited to 'v3po/vpp-translate-utils/src/main/java')
-rw-r--r-- | v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/TranslateUtils.java | 53 |
1 files changed, 41 insertions, 12 deletions
diff --git a/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/TranslateUtils.java b/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/TranslateUtils.java index 9c3fea615..d68ea19b7 100644 --- a/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/TranslateUtils.java +++ b/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/TranslateUtils.java @@ -16,23 +16,25 @@ package io.fd.honeycomb.v3po.translate.v3po.util; -import com.google.common.base.Splitter; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.openvpp.jvpp.VppBaseCallException; -import org.openvpp.jvpp.dto.JVppReply; +import static com.google.common.base.Preconditions.checkArgument; -import javax.annotation.Nonnegative; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import com.google.common.base.Splitter; +import com.google.common.net.InetAddresses; +import java.net.UnknownHostException; +import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.BiConsumer; - -import static com.google.common.base.Preconditions.checkArgument; +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.openvpp.jvpp.VppBaseCallException; +import org.openvpp.jvpp.dto.JVppReply; public final class TranslateUtils { @@ -77,17 +79,44 @@ public final class TranslateUtils { } } + /** + * Transform Ipv4 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 + */ public static byte[] ipv4AddressNoZoneToArray(final Ipv4AddressNoZone ipv4Addr) { byte[] retval = new byte[4]; String[] dots = ipv4Addr.getValue().split("\\."); - for (int d = 3; d >= 0; d--) { - retval[d] = (byte) (Short.parseShort(dots[3 - d]) & 0xff); + for (int d = 0; d < 4; d++) { + retval[d] = (byte) (Short.parseShort(dots[d]) & 0xff); } return retval; } /** + * Parse byte array returned by VPP representing an Ipv4 address. Vpp returns IP byte arrays in reversed order. + * + * @return Ipv4AddressNoZone containing string representation of IPv4 address constructed from submitted bytes. No + * change in order. + */ + @Nonnull + public static Ipv4AddressNoZone arrayToIpv4AddressNoZone(@Nonnull byte[] ip) { + // VPP sends ipv4 in a 16 byte array + if(ip.length == 16) { + ip = Arrays.copyOfRange(ip, 0, 4); + } + try { + // Not reversing the byte array here!! because the IP coming from VPP is in reversed byte order + // compared to byte order it was submitted + return new Ipv4AddressNoZone(InetAddresses.toAddrString(InetAddresses.fromLittleEndianByteArray(ip))); + } catch (UnknownHostException e) { + throw new IllegalArgumentException("Unable to parse ipv4", e); + } + } + + /** * Return (interned) string from byte array while removing \u0000. * Strings represented as fixed length byte[] from vpp contain \u0000. */ |