BUG-4730: Update BGP-LS EPE 90/31190/3
authorMilos Fabian <milfabia@cisco.com>
Fri, 11 Dec 2015 11:32:12 +0000 (12:32 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 15 Dec 2015 12:00:14 +0000 (12:00 +0000)
Update implementation to conform draft-ietf-idr-bgpls-segment-routing-epe-01
which is reflecting changes in latest linkstate segment routing extension draft.
-TLVs redefined with common structure
-changed TLVs codepoints

API (Yang data model) change:
renamed container "peer-sid" -> "peer-node-sid"
added container "peer-adj-sid"

Change-Id: I391862970fd751f54426e7222eb99519a68b4d99
Signed-off-by: Milos Fabian <milfabia@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/attribute/LinkAttributesParser.java
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/attribute/sr/SrLinkAttributesParser.java
bgp/linkstate/src/main/yang/bgp-linkstate.yang
bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateAttributeParserTest.java

index 457c4c790084e7d2d0d22e76b16db12cc89913db..efc22246436e8d7404746fed1b9a2877775f81c0 100644 (file)
@@ -28,8 +28,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.link
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.LinkProtectionType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.MplsProtocolMask;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.ProtocolId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerAdjSidBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerNodeSidBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerSetSidBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerSidBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrAdjIdBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.UnreservedBandwidth;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.UnreservedBandwidthBuilder;
@@ -80,8 +81,9 @@ public final class LinkAttributesParser {
     private static final int LINK_NAME = 1098;
     private static final int SR_ADJ_ID = 1099;
     private static final int SR_LAN_ADJ_ID = 1100;
-    private static final int PEER_SID_CODE = 1036;
-    private static final int PEER_SET_SID_CODE = 1037;
+    private static final int PEER_NODE_SID_CODE = 1101;
+    private static final int PEER_ADJ_SID_CODE = 1102;
+    private static final int PEER_SET_SID_CODE = 1103;
 
     /**
      * Parse Link Attributes.
@@ -164,12 +166,16 @@ public final class LinkAttributesParser {
                 builder.setSrLanAdjId(SrLinkAttributesParser.parseLanAdjacencySegmentIdentifier(value, protocolId));
                 LOG.debug("Parsed Adjacency Segment Identifier :{}", builder.getSrLanAdjId());
                 break;
-            case PEER_SID_CODE:
-                builder.setPeerSid(new PeerSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value, protocolId)).build());
-                LOG.debug("Parsed Peer Segment Identifier :{}", builder.getPeerSid());
+            case PEER_NODE_SID_CODE:
+                builder.setPeerNodeSid(new PeerNodeSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value, null)).build());
+                LOG.debug("Parsed Peer Segment Identifier :{}", builder.getPeerNodeSid());
+                break;
+            case PEER_ADJ_SID_CODE:
+                builder.setPeerAdjSid(new PeerAdjSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value, null)).build());
+                LOG.debug("Parsed Peer Segment Identifier :{}", builder.getPeerAdjSid());
                 break;
             case PEER_SET_SID_CODE:
-                builder.setPeerSetSid(new PeerSetSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value, protocolId)).build());
+                builder.setPeerSetSid(new PeerSetSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value, null)).build());
                 LOG.debug("Parsed Peer Set Sid :{}", builder.getPeerSetSid());
                 break;
             default:
@@ -245,8 +251,11 @@ public final class LinkAttributesParser {
         if (linkAttributes.getSrLanAdjId() != null) {
             TlvUtil.writeTLV(SR_LAN_ADJ_ID, SrLinkAttributesParser.serializeLanAdjacencySegmentIdentifier(linkAttributes.getSrLanAdjId()), byteAggregator);
         }
-        if (linkAttributes.getPeerSid() != null) {
-            TlvUtil.writeTLV(PEER_SID_CODE, SrLinkAttributesParser.serializeAdjacencySegmentIdentifier(linkAttributes.getPeerSid()), byteAggregator);
+        if (linkAttributes.getPeerNodeSid() != null) {
+            TlvUtil.writeTLV(PEER_NODE_SID_CODE, SrLinkAttributesParser.serializeAdjacencySegmentIdentifier(linkAttributes.getPeerNodeSid()), byteAggregator);
+        }
+        if (linkAttributes.getPeerAdjSid() != null) {
+            TlvUtil.writeTLV(PEER_ADJ_SID_CODE, SrLinkAttributesParser.serializeAdjacencySegmentIdentifier(linkAttributes.getPeerAdjSid()), byteAggregator);
         }
         if (linkAttributes.getPeerSetSid() != null) {
             TlvUtil.writeTLV(PEER_SET_SID_CODE, SrLinkAttributesParser.serializeAdjacencySegmentIdentifier(linkAttributes.getPeerSetSid()), byteAggregator);
index 16b7fb46c24f9b59dfb9831a5a10a9f4b5fd5308..2d75512eb68ab27ed123832b06dae95d11289606 100644 (file)
@@ -38,8 +38,10 @@ public final class SrLinkAttributesParser {
     private static final int BACKUP_OSPF = 0;
     private static final int VALUE_ISIS = 2;
     private static final int VALUE_OSPF = 1;
+    private static final int VALUE_EPE = 0;
     private static final int LOCAL_ISIS = 3;
     private static final int LOCAL_OSPF = 2;
+    private static final int LOCAL_EPE = 1;
     private static final int SET_ISIS = 4;
     private static final int SET_OSPF = 3;
     private static final int FLAGS_SIZE = 8;
@@ -116,6 +118,9 @@ public final class SrLinkAttributesParser {
     }
 
     private static Flags parseFlags(final BitArray flags, final ProtocolId protocol) {
+        if (protocol == null) {
+            return null;
+        }
         if (protocol.equals(ProtocolId.IsisLevel1) || protocol.equals(ProtocolId.IsisLevel2)) {
             return new IsisAdjFlagsCaseBuilder()
                 .setAddressFamily(flags.get(ADDRESS_FAMILY_FLAG))
@@ -167,6 +172,8 @@ public final class SrLinkAttributesParser {
             bitFlags.set(BACKUP_ISIS, isisFlags.isBackup());
             bitFlags.set(SET_ISIS, isisFlags.isSet());
             SidLabelIndexParser.setFlags(sidLabelIndex, bitFlags, VALUE_ISIS, LOCAL_ISIS);
+        } else if (flags == null){
+            SidLabelIndexParser.setFlags(sidLabelIndex, bitFlags, VALUE_EPE, LOCAL_EPE);
         }
         return bitFlags;
     }
index 74d389371640b5c4fbda79546b58e96fd9004251..2e2205cb15a4d616c81090ecb5c7354ebc91d9ee 100644 (file)
@@ -573,14 +573,19 @@ module bgp-linkstate {
         container sr-lan-adj-id {
             uses bgp-sr:lan-adj-sid-tlv;
         }
-        container peer-sid {
+        container peer-node-sid {
             description "The SID representing the peer of the BGP session.";
-            reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-00#section-4.3";
+            reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-01#section-4.3";
+            uses bgp-sr:adj-sid-tlv;
+        }
+        container peer-adj-sid {
+            description "The SID representing the peer of the BGP session.";
+            reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-01#section-4.3";
             uses bgp-sr:adj-sid-tlv;
         }
         container peer-set-sid {
             description "The SID representing the group the peer is part of.";
-            reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-00#section-4.3";
+            reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-01#section-4.3";
             uses bgp-sr:adj-sid-tlv;
         }
     }
index 23b4fbeee671ee5c08261802c08510b8a10055ee..c0588778bb8812f66e9dd037109d498f735ade65 100644 (file)
@@ -11,7 +11,9 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -96,8 +98,9 @@ public class LinkstateAttributeParserTest {
         0, 0x05, 0x31, 0x32, 0x4b, 0x2d, 0x32,
         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, 0x4d, 0, 0x08, 0, 0x05, 0, 0, 0x0a, 0x0b, 0x0c, 0x0d, // peer-node-sid
+        0x04, 0x4e, 0, 0x08, 0, 0x05, 0, 0, 0x0a, 0x0b, 0x0c, 0x0f, // peer-adj-sid
+        0x04, 0x4f, 0, 0x08, 0, 0x05, 0, 0, 0x0a, 0x0b, 0x0c, 0x0e, // peer-set-sid
         0x04, (byte) 0x88, 0, 0x01, 0x0a };
 
     private static final byte[] NODE_ATTR = { 0x01, 0x07, 0, 0x04, 0, 0x2a, 0, 0x2b, 0x04, 0, 0, 0x01, (byte) 0xbc, 0x04, 0x02, 0,
@@ -210,12 +213,16 @@ public class LinkstateAttributeParserTest {
         assertEquals(305419896, ls.getSharedRiskLinkGroups().get(0).getValue().intValue());
         assertEquals("12K-2", ls.getLinkName());
         final IsisAdjFlagsCase flags = new IsisAdjFlagsCaseBuilder().setAddressFamily(Boolean.TRUE).setBackup(Boolean.FALSE).setSet(Boolean.FALSE).build();
-        assertEquals(flags, ls.getPeerSid().getFlags());
-        assertEquals(flags, ls.getPeerSetSid().getFlags());
-        assertEquals(new Long(168496141L), ((SidCase) ls.getPeerSid().getSidLabelIndex()).getSid());
-        assertEquals(new Short("5"), ls.getPeerSid().getWeight().getValue());
+        assertEquals(flags, ls.getSrAdjId().getFlags());
+        assertNull(ls.getPeerNodeSid().getFlags());
+        assertNull(ls.getPeerSetSid().getFlags());
+        assertNull(ls.getPeerAdjSid().getFlags());
+        assertEquals(new Long(168496141L), ((SidCase) ls.getPeerNodeSid().getSidLabelIndex()).getSid());
+        assertEquals(new Short("5"), ls.getPeerNodeSid().getWeight().getValue());
         assertEquals(new Long(168496142L), ((SidCase) ls.getPeerSetSid().getSidLabelIndex()).getSid());
         assertEquals(new Short("5"), ls.getPeerSetSid().getWeight().getValue());
+        assertEquals(new Long(168496143L), ((SidCase) ls.getPeerAdjSid().getSidLabelIndex()).getSid());
+        assertEquals(new Short("5"), ls.getPeerAdjSid().getWeight().getValue());
 
         //serialization
         final ByteBuf buff = Unpooled.buffer();