BUG-4705: LS-SR MplsLabel as 20 rightmost bits 32/30532/4
authorIveta Halanova <ihalanov@cisco.com>
Wed, 2 Dec 2015 19:24:04 +0000 (20:24 +0100)
committerIveta Halanova <ihalanov@cisco.com>
Thu, 3 Dec 2015 10:24:22 +0000 (10:24 +0000)
Change-Id: Ia8c47d4f9b16785b911025994c5b56cd6e7b78d9
Signed-off-by: Iveta Halanova <ihalanov@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/attribute/sr/SidLabelIndexParser.java
bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateAttributeParserTest.java
bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/SrAttributeParserTest.java

index 9c76788cfbb452b36f967eff9163f619218d95fb..2d223ba9772f51b75ba9ade01c1e639214acb7e6 100644 (file)
@@ -13,7 +13,6 @@ import io.netty.buffer.Unpooled;
 import java.util.Map;
 import org.opendaylight.protocol.util.BitArray;
 import org.opendaylight.protocol.util.Ipv6Util;
-import org.opendaylight.protocol.util.MplsLabelUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.sid.label.index.SidLabelIndex;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.sid.label.index.sid.label.index.Ipv6AddressCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.sid.label.index.sid.label.index.Ipv6AddressCaseBuilder;
@@ -21,12 +20,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segm
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.sid.label.index.sid.label.index.LocalLabelCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.sid.label.index.sid.label.index.SidCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.sid.label.index.sid.label.index.SidCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.MplsLabel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public final class SidLabelIndexParser {
 
     private static final Logger LOG = LoggerFactory.getLogger(SidLabelIndexParser.class);
+    private static final int LABEL_MASK = 0xfffff;
 
     private SidLabelIndexParser() {
         throw new UnsupportedOperationException();
@@ -57,7 +58,7 @@ public final class SidLabelIndexParser {
         if (tlv instanceof Ipv6AddressCase) {
             return Ipv6Util.byteBufForAddress(((Ipv6AddressCase) tlv).getIpv6Address());
         } else if (tlv instanceof LocalLabelCase) {
-            return MplsLabelUtil.byteBufForMplsLabel(((LocalLabelCase) tlv).getLocalLabel());
+            return Unpooled.copyMedium(((LocalLabelCase) tlv).getLocalLabel().getValue().intValue() & LABEL_MASK);
         } else if (tlv instanceof SidCase) {
             return Unpooled.copyInt(((SidCase) tlv).getSid().intValue());
         }
@@ -77,7 +78,7 @@ public final class SidLabelIndexParser {
     static SidLabelIndex parseSidLabelIndex(final Size length, final ByteBuf buffer) {
         switch (length) {
         case LABEL:
-            return new LocalLabelCaseBuilder().setLocalLabel(MplsLabelUtil.mplsLabelForByteBuf(buffer)).build();
+            return new LocalLabelCaseBuilder().setLocalLabel(new MplsLabel(new Long(buffer.readUnsignedMedium() & LABEL_MASK))).build();
         case SID:
             return new SidCaseBuilder().setSid(buffer.readUnsignedInt()).build();
         case IPV6_ADD:
index 55dee23120313d00666f37e210543f671df834e4..23b4fbeee671ee5c08261802c08510b8a10055ee 100644 (file)
@@ -94,8 +94,8 @@ public class LinkstateAttributeParserTest {
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x04, 0x44, 0, 0x08, 0, 0, 0, 0, 0, 0, 0, 0, 0x04, 0x45, 0, 0x02, 0, 0x08, 0x04, 0x46, 0, 0x01,
         (byte) 0xc0, 0x04, 0x47, 0, 0x03, 0, 0, 0x0a, 0x04, 0x48, 0, 0x08, 0x12, 0x34, 0x56, 0x78, 0x10, 0x30, 0x50, 0x70, 0x04, 0x4a,
         0, 0x05, 0x31, 0x32, 0x4b, 0x2d, 0x32,
-        0x04, 0x4b, 0, 0x07, (byte)-80, 10, 0, 0, (byte)0xff, (byte)0xff, (byte)0xf0, // sr-adj
-        0x04, 0x4c, 0, 0x0d, (byte)-80, 10, 0, 0, 1, 2, 3, 4, 5, 6, (byte)0xff, (byte)0xff, (byte)0xf0, // sr-lan-adj
+        0x04, 0x4b, 0, 0x07, (byte)-80, 10, 0, 0, (byte)0x0f, (byte)0xff, (byte)0xff, // sr-adj
+        0x04, 0x4c, 0, 0x0d, (byte)-80, 10, 0, 0, 1, 2, 3, 4, 5, 6, (byte)0x0f, (byte)0xff, (byte)0xff, // sr-lan-adj
         0x04, 0x0c, 0, 0x08, (byte)0x80, 0x05, 0, 0, 0x0a, 0x0b, 0x0c, 0x0d, // peer-sid
         0x04, 0x0d, 0, 0x08, (byte)0x80, 0x05, 0, 0, 0x0a, 0x0b, 0x0c, 0x0e, // peer-set-sid
         0x04, (byte) 0x88, 0, 0x01, 0x0a };
index c74933be9097c018fac8a8292e9a38d72c7d7540..ee5cd1649c0d691c09b66829d80b3b59da103ad5 100644 (file)
@@ -101,6 +101,9 @@ public class SrAttributeParserTest {
     private static final OspfAdjFlagsCase OSPF_ADJ_FLAGS = new OspfAdjFlagsCaseBuilder()
         .setBackup(Boolean.TRUE)
         .setSet(Boolean.FALSE).build();
+    private static final OspfAdjFlagsCase OSPF_LAN_ADJ_FLAGS = new OspfAdjFlagsCaseBuilder()
+        .setBackup(Boolean.FALSE)
+        .setSet(Boolean.FALSE).build();
 
     @Test
     public void testSrAlgorithm() {
@@ -161,7 +164,7 @@ public class SrAttributeParserTest {
         final byte[] tested = {
             0, 0, 0, 5,
             4, (byte)0x89, 0, 4, 1, 2, 3, 4, // sid
-            4, (byte)0x86, 0, 7, (byte)0xac, 1, 0, 0, 1, 2, 0, // prefix
+            4, (byte)0x86, 0, 7, (byte)0xac, 1, 0, 0, 1, 2, 0, // prefix + mpls label
             4, (byte)0x88, 0, 0x58, 5, 0x48, 0, 0, // binding sid
             // binding sub-tlvs
             4, (byte)0x86, 0, 8, (byte)0xa0, 1, 0, 0, 1, 2, 3, 4, // prefix
@@ -193,7 +196,7 @@ public class SrAttributeParserTest {
             new PrefixSidTlvCaseBuilder()
                 .setFlags(ISIS_PREFIX_FLAGS)
                 .setAlgorithm(Algorithm.StrictShortestPathFirst)
-                .setSidLabelIndex(new LocalLabelCaseBuilder().setLocalLabel(new MplsLabel(4128L)).build()).build()).build());
+                .setSidLabelIndex(new LocalLabelCaseBuilder().setLocalLabel(new MplsLabel(66048L)).build()).build()).build());
         final List<BindingSubTlvs> bindingSubTlvs = new ArrayList<BindingSubTlvs>();
         addBindingSubTlvs(bindingSubTlvs);
         rangeSubTlvs.add(new SubTlvsBuilder().setRangeSubTlv(
@@ -280,7 +283,20 @@ public class SrAttributeParserTest {
     }
 
     @Test
-    public void testSrLanAdjId() {
+    public void testSrLanAdjIdOspf() {
+        final byte[] tested = { (byte)0x60, 10, 0, 0, 1, 2, 3, 4, 0,  0x5d, (byte)0xc0 };
+        final SrLanAdjId srLanAdjId = new SrLanAdjIdBuilder()
+            .setFlags(OSPF_LAN_ADJ_FLAGS)
+            .setWeight(new Weight((short)10))
+            .setNeighborId(new Ipv4Address("1.2.3.4"))
+            .setSidLabelIndex(new LocalLabelCaseBuilder().setLocalLabel(new MplsLabel(24000L)).build()).build();
+        assertEquals(srLanAdjId, SrLinkAttributesParser.parseLanAdjacencySegmentIdentifier(Unpooled.wrappedBuffer(tested), ProtocolId.Ospf));
+        final ByteBuf serializedData = SrLinkAttributesParser.serializeLanAdjacencySegmentIdentifier(srLanAdjId);
+        assertArrayEquals(tested, ByteArray.readAllBytes(serializedData));
+    }
+
+    @Test
+    public void testSrLanAdjIdIsis() {
         final byte[] tested = { (byte)0x60, 10, 0, 0, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
         final byte[] sidLabel = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
         final byte[] systemId = { 1, 2, 3, 4, 5, 6 };