bgp NLRI has a specific format for label, terminating with bottom
of stack bit. This value is updated in all BGP attribute tests. A
specific test has been added to check for a list of labels contained
in a single NLRI.

Signed-off-by: Philippe Guibert <philippe.guib...@6wind.com>
---
 tests/bgp_mp_attr_test.c           | 87 ++++++++++++++++++++++++++++++--------
 tests/bgpd.tests/testbgpmpattr.exp |  2 +
 2 files changed, 71 insertions(+), 18 deletions(-)

diff --git a/tests/bgp_mp_attr_test.c b/tests/bgp_mp_attr_test.c
index 3b1bf1452cf8..7d6d8293c298 100644
--- a/tests/bgp_mp_attr_test.c
+++ b/tests/bgp_mp_attr_test.c
@@ -322,13 +322,13 @@ static struct test_segment {
       /* Nexthop */            192, 168,   0,  1, 
       /* SNPA (defunct, MBZ) */        0x0,
       /* NLRI tuples */                88 + 16,
-                                  0, 1, 2,   /* tag */
+                                  0, 1, 1,   /* tag */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_AS */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 17,
-                                  0xff, 0, 0,   /* tag */
+                                  2, 43, 1,   /* tag */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -365,13 +365,13 @@ static struct test_segment {
       /* Nexthop */            192, 168,   0,  1, 
       /* SNPA (defunct, MBZ) */        0x0,
       /* NLRI tuples */                88 + 1,
-                                  0, 1, 2,   /* tag */
+                                  0, 2, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_AS */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 17,
-                                  0xff, 0, 0,   /* tag */
+                                  3, 4, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -391,13 +391,13 @@ static struct test_segment {
       /* Nexthop */            192, 168,   0,  1, 
       /* SNPA (defunct, MBZ) */        0x0,
       /* NLRI tuples */                88 + 32,
-                                  0, 1, 2,   /* tag */
+                                  0, 2, 1,   /* tag  with BOS bit */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_AS */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 17,
-                                  0xff, 0, 0,   /* tag */
+                                  3, 4, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -417,13 +417,13 @@ static struct test_segment {
       /* Nexthop */            192, 168,   0,  1, 
       /* SNPA (defunct, MBZ) */        0x0,
       /* NLRI tuples */                88 + 16,
-                                  0, 1, 2,   /* tag */
+                                  0, 2, 1,   /* tag  with BOS bit */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_AS */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 17,
-                                  0xff, 0, 0,   /* tag */
+                                  3, 4, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -444,13 +444,13 @@ static struct test_segment {
       /* Nexthop */            192, 168,   0,  1, 
       /* SNPA (defunct, MBZ) */        0x0,
       /* NLRI tuples */                88 + 16,
-                                  0, 1, 2,   /* tag */
+                                  0, 2, 1,   /* tag  with BOS bit */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_AS */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 2,
-                                  0xff, 0, 0,   /* tag */
+                                  3, 4, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -470,13 +470,13 @@ static struct test_segment {
       /* Nexthop */            192, 168,   0,  1, 
       /* SNPA (defunct, MBZ) */        0x0,
       /* NLRI tuples */                88 + 16,
-                                  0, 1, 2,   /* tag */
+                                  0, 2, 1,   /* tag  with BOS bit */
                                   /* rd, 8 octets */
                                     0xff, 0, /* Bogus RD */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 17,
-                                  0xff, 0, 0,   /* tag */
+                                  3, 4, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -496,13 +496,13 @@ static struct test_segment {
       /* Nexthop */            192, 168,   0,  1, 
       /* SNPA (defunct, MBZ) */        0x0,
       /* NLRI tuples */                88 + 16,
-                                  0, 1, 2,   /* tag */
+                                  0, 2, 1,   /* tag  with BOS bit */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_AS */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 17,
-                                  0xff, 0, 0,   /* tag */
+                                  3, 4, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -513,7 +513,59 @@ static struct test_segment {
     SHOULD_ERR,
     AFI_IP, SAFI_MPLS_LABELED_VPN, VALID_AFI,
   },
-
+  { "IPv4-VPNv4-2-label",
+    "IPv4/VPNv4 MP Reach, RD, NH, 2 NLRI, 2 label in 1st",
+    {
+      /* AFI / SAFI */         0x0, AFI_IP, SAFI_MPLS_LABELED_VPN,
+      /* nexthop bytes */      12,
+      /* RD */                 0, 0, 0, 0, /* RD defined to be 0 */
+                                0, 0, 0, 0,
+      /* Nexthop */            192, 168,   0,  1, 
+      /* SNPA (defunct, MBZ) */        0x0,
+      /* NLRI tuples */                104+3*8,
+                                  44, 2, 0,  /* no BOS bit */
+                                  0, 2, 1,   /* tag  with BOS bit */
+                                  /* rd, 8 octets */
+                                    0, 0, /* RD_TYPE_AS */
+                                    0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
+                                  10, 1,    /* 10.1/16 */
+                                88 + 17,
+                                  3, 4, 1,   /* tag with BOS bit set */
+                                  /* rd, 8 octets */
+                                    0, 0, /* RD_TYPE_IP */
+                                    192, 168, 0, 1, /* IPv4 */
+                                  10, 2, 3,  /* 10.2.3/17 */
+    },
+    (4 + 12 + 1 + (1+3+3+8+2) + (1+3+8+3)),
+    SHOULD_PARSE,
+    AFI_IP, SAFI_MPLS_LABELED_VPN, VALID_AFI,
+  },
+  { "IPv4-VPNv4-bogus-label",
+    "IPv4/VPNv4 MP Reach, RD, NH, 2 NLRI, bad label in 1st (log, but parse)",
+    {
+      /* AFI / SAFI */         0x0, AFI_IP, SAFI_MPLS_LABELED_VPN,
+      /* nexthop bytes */      12,
+      /* RD */                 0, 0, 0, 0, /* RD defined to be 0 */
+                                0, 0, 0, 0,
+      /* Nexthop */            192, 168,   0,  1, 
+      /* SNPA (defunct, MBZ) */        0x0,
+      /* NLRI tuples */                88 + 16,
+                                  44, 2, 0,   /* no BOS bit */
+                                  /* rd, 8 octets */
+                                    0, 0, /* RD_TYPE_AS */
+                                    0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
+                                  10, 1,    /* 10.1/16 */
+                                88 + 17,
+                                  3, 4, 1,   /* tag with BOS bit set */
+                                  /* rd, 8 octets */
+                                    0, 0, /* RD_TYPE_IP */
+                                    192, 168, 0, 1, /* IPv4 */
+                                  10, 2, 3,  /* 10.2.3/17 */
+    },
+    (4 + 12 + 1 + (1+3+8+2) + (1+3+8+3)),
+    SHOULD_PARSE,
+    AFI_IP, SAFI_MPLS_LABELED_VPN, VALID_AFI,
+  },
   /* From bug #385 */
   { "IPv6-bug",
     "IPv6, global nexthop, 1 default NLRI", 
@@ -625,13 +677,13 @@ static struct test_segment mp_unreach_segments [] =
     {
       /* AFI / SAFI */         0x0, AFI_IP, SAFI_MPLS_LABELED_VPN,
       /* NLRI tuples */                88 + 16,
-                                  0, 1, 2,   /* tag */
+                                  0, 2, 1,   /* tag  with BOS bit */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_AS */
                                     0, 2, 0, 0xff, 3, 4, /* AS(2):val(4) */
                                   10, 1,    /* 10.1/16 */
                                 88 + 17,
-                                  0xff, 0, 0,   /* tag */
+                                  3, 4, 1,   /* tag with BOS bit set */
                                   /* rd, 8 octets */
                                     0, 0, /* RD_TYPE_IP */
                                     192, 168, 0, 1, /* IPv4 */
@@ -718,7 +770,6 @@ parse_test (struct peer *peer, struct test_segment *t, int 
type)
     parse_ret = bgp_mp_reach_parse (&attr_args, &nlri);
   else
     parse_ret = bgp_mp_unreach_parse (&attr_args, &nlri);
-  
   if (parse_ret == 0 && t->afi_valid == VALID_AFI)
     assert (nlri.afi == t->afi && nlri.safi == t->safi);
   
diff --git a/tests/bgpd.tests/testbgpmpattr.exp 
b/tests/bgpd.tests/testbgpmpattr.exp
index e6d7305a688d..f97ba6986341 100644
--- a/tests/bgpd.tests/testbgpmpattr.exp
+++ b/tests/bgpd.tests/testbgpmpattr.exp
@@ -27,6 +27,8 @@ simpletest "IPv4-VPNv4-plenn-long: IPv4/VPNv4 MP Reach, RD, 
Nexthop, 3 NLRIs, la
 simpletest "IPv4-VPNv4-plenn-short: IPv4/VPNv4 MP Reach, RD, Nexthop, 2 NLRIs, 
last plen short"
 simpletest "IPv4-VPNv4-bogus-rd-type: IPv4/VPNv4 MP Reach, RD, NH, 2 NLRI, 
unknown RD in 1st (log, but parse)"
 simpletest "IPv4-VPNv4-0-nlri: IPv4/VPNv4 MP Reach, RD, Nexthop, 3 NLRI, 3rd 0 
bogus"
+simpletest "IPv4/VPNv4 MP Reach, RD, NH, 2 NLRI, 2 label in 1st"
+simpletest "IPv4/VPNv4 MP Reach, RD, NH, 2 NLRI, bad label in 1st (log, but 
parse)"
 simpletest "IPv6-bug: IPv6, global nexthop, 1 default NLRI"
 simpletest "IPv6-unreach: IPV6 MP Unreach, 1 NLRI"
 simpletest "IPv6-unreach2: IPV6 MP Unreach, 2 NLRIs"
-- 
2.1.4


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to