diff options
author | Hongjun Ni <hongjun.ni@intel.com> | 2017-03-16 00:17:26 +0800 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-03-27 11:37:01 +0000 |
commit | 169ce221c4e8e2eeb24fc1f509cc440c694fa5a4 (patch) | |
tree | 9499cc2b8b883798b31005586731892d289b74e8 /nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config | |
parent | 148e3067aa22b312c0bec24b1c8c89994b311c77 (diff) |
Add Yang model for NSH MD2 support
Change-Id: Idec4f8dae90ef90de538b977248bee7a078ae374
Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
Diffstat (limited to 'nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config')
3 files changed, 68 insertions, 26 deletions
diff --git a/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshEntryWriterCustomizer.java b/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshEntryWriterCustomizer.java index 553d946b4..122594c3d 100755 --- a/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshEntryWriterCustomizer.java +++ b/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshEntryWriterCustomizer.java @@ -32,17 +32,23 @@ import io.fd.vpp.jvpp.nsh.dto.NshAddDelEntryReply; import io.fd.vpp.jvpp.nsh.future.FutureJVppNsh; import java.util.concurrent.CompletionStage; import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Ethernet; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Ipv4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Ipv6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.MdType1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.NshMdType1Augment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.nsh.entries.NshEntry; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.nsh.entries.NshEntryKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Ethernet; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Ipv4; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Ipv6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.MdType1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.MdType2; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.NshMdType1Augment; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.NshMdType2Augment; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.nsh.entries.NshEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.nsh.entries.NshEntryKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.nsh.md.type2.attributes.Md2Data; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.charset.StandardCharsets; +import java.util.List; + /** * Writer customizer responsible for NshEntry create/delete. */ @@ -117,6 +123,37 @@ public class NshEntryWriterCustomizer extends FutureJVppNshCustomizer } } + private void getNshEntryMdType2Request(@Nonnull final NshEntry entry, @Nonnull NshAddDelEntry request) { + final List<Md2Data> md2Datas = entry.getAugmentation(NshMdType2Augment.class).getMd2Data(); + final byte md2_len = (byte) (entry.getLength() * 4 - 8); + byte cur_len = 0; + byte option_len = 0; + + LOG.debug("wr: md2_len={}", md2_len); + request.tlv = new byte[md2_len]; + for (Md2Data md2data : md2Datas) { + option_len = (byte) md2data.getLen().shortValue(); + LOG.debug("wr: option_len={}", option_len); + if ((cur_len + option_len + 4) <= md2_len) { + request.tlv[cur_len] = (byte) (md2data.getMd2Class().shortValue() >> 8); + request.tlv[cur_len + 1] = (byte) (md2data.getMd2Class().shortValue() & 0xF); + request.tlv[cur_len + 2] = (byte) md2data.getType().shortValue(); + request.tlv[cur_len + 3] = option_len; + + /* convert string to hex digits */ + LOG.debug("wr: md2data.getMetadata()={}", md2data.getMetadata()); + int length = md2data.getMetadata().length(); + for (int i = 0; i < length / 2; ++i) + { + request.tlv[(cur_len+4)+i] = (byte)(Integer.parseInt + (md2data.getMetadata().substring(i*2, i*2+2), 16) & 0xff); + } + cur_len += (option_len + 4); + } + } + request.tlvLength = cur_len; + } + private NshAddDelEntry getNshAddDelEntryRequest(final boolean isAdd, final int entryIndex, @Nonnull final NshEntry entry, @Nonnull final MappingContext ctx) { @@ -138,8 +175,9 @@ public class NshEntryWriterCustomizer extends FutureJVppNshCustomizer if (entry.getMdType() == MdType1.class) { request.mdType = 1; getNshEntryMdType1Request(entry, request); - } else if (entry.getMdType() == MdType1.class) { + } else if (entry.getMdType() == MdType2.class) { request.mdType = 2; + getNshEntryMdType2Request(entry, request); } else { request.mdType = 0; } diff --git a/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshMapWriterCustomizer.java b/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshMapWriterCustomizer.java index 486655cd3..eaa1e75ee 100755 --- a/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshMapWriterCustomizer.java +++ b/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/NshMapWriterCustomizer.java @@ -32,15 +32,15 @@ import io.fd.vpp.jvpp.nsh.dto.NshAddDelMapReply; import io.fd.vpp.jvpp.nsh.future.FutureJVppNsh; import java.util.concurrent.CompletionStage; import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Pop; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Push; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Swap; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.VxlanGpe; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Vxlan4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.Vxlan6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.None; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.nsh.maps.NshMap; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.nsh.maps.NshMapKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Pop; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Push; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Swap; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.VxlanGpe; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Vxlan4; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.Vxlan6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.None; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.nsh.maps.NshMap; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.nsh.maps.NshMapKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/VppNshWriterFactory.java b/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/VppNshWriterFactory.java index 24601fa22..c78abb955 100755 --- a/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/VppNshWriterFactory.java +++ b/nsh/impl/src/main/java/io/fd/hc2vpp/vppnsh/impl/config/VppNshWriterFactory.java @@ -16,6 +16,7 @@ package io.fd.hc2vpp.vppnsh.impl.config; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.inject.Inject; import com.google.inject.name.Named; @@ -25,13 +26,15 @@ import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import io.fd.vpp.jvpp.nsh.future.FutureJVppNsh; import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.NshMdType1Augment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.NshMdType2Augment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.VppNsh; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.NshEntries; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.NshMaps; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.nsh.entries.NshEntry; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev161214.vpp.nsh.nsh.maps.NshMap; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.NshMdType1Augment; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.NshMdType2Augment; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.VppNsh; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.NshEntries; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.NshMaps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.nsh.entries.NshEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.nsh.md.type2.attributes.Md2Data; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev170315.vpp.nsh.nsh.maps.NshMap; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public class VppNshWriterFactory implements WriterFactory { @@ -65,9 +68,10 @@ public class VppNshWriterFactory implements WriterFactory { final InstanceIdentifier<NshEntries> nshEntriesId = InstanceIdentifier.create(VppNsh.class).child(NshEntries.class); final InstanceIdentifier<NshEntry> nshEntryId = nshEntriesId.child(NshEntry.class); registry.subtreeAdd( - Sets.newHashSet( + ImmutableSet.of( InstanceIdentifier.create(NshEntry.class).augmentation(NshMdType1Augment.class), - InstanceIdentifier.create(NshEntry.class).augmentation(NshMdType2Augment.class)), + InstanceIdentifier.create(NshEntry.class).augmentation(NshMdType2Augment.class), + InstanceIdentifier.create(NshEntry.class).augmentation(NshMdType2Augment.class).child(Md2Data.class)), new GenericListWriter<>(nshEntryId, new NshEntryWriterCustomizer(jvppNsh, nshEntryContext))); // VppNsh has no handlers |