LCOV - code coverage report
Current view: top level - tests/testcases/bgpd - test_mp_attr.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 60 65 92.3 %
Date: 2015-11-19 Functions: 2 2 100.0 %

          Line data    Source code
       1             : #include <zebra.h>
       2             : 
       3             : #include "vty.h"
       4             : #include "stream.h"
       5             : #include "privs.h"
       6             : #include "memory.h"
       7             : 
       8             : #include "bgpd/bgpd.h"
       9             : #include "bgpd/bgp_attr.h"
      10             : #include "bgpd/bgp_open.h"
      11             : #include "bgpd/bgp_debug.h"
      12             : 
      13             : #define VT100_RESET "\x1b[0m"
      14             : #define VT100_RED "\x1b[31m"
      15             : #define VT100_GREEN "\x1b[32m"
      16             : #define VT100_YELLOW "\x1b[33m"
      17             : 
      18             : 
      19             : #define CAPABILITY 0
      20             : #define DYNCAP     1
      21             : #define OPT_PARAM  2
      22             : 
      23             : /* need these to link in libbgp */
      24             : struct zebra_privs_t *bgpd_privs = NULL;
      25             : struct thread_master *master = NULL;
      26             : 
      27             : static int failed = 0;
      28             : static int tty = 0;
      29             : 
      30             : /* test segments to parse and validate, and use for other tests */
      31             : static struct test_segment {
      32             :   const char *name;
      33             :   const char *desc;
      34             :   const u_char data[1024];
      35             :   int len;
      36             : #define SHOULD_PARSE    0
      37             : #define SHOULD_ERR      -1
      38             :   int parses; /* whether it should parse or not */
      39             :   
      40             :   /* AFI/SAFI validation */
      41             :   afi_t afi;
      42             :   safi_t safi;
      43             : #define VALID_AFI 1
      44             : #define INVALID_AFI 0
      45             :   int afi_valid;
      46             : } mp_reach_segments [] = 
      47             : {
      48             :   { "IPv6",
      49             :     "IPV6 MP Reach, global nexthop, 1 NLRI", 
      50             :     {
      51             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
      52             :       /* nexthop bytes */       16,
      53             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,
      54             :                                 0xaa, 0xbb, 0xcc, 0xdd,
      55             :                                 0x3,  0x4,  0x5,  0x6,
      56             :                                 0xa1, 0xa2, 0xa3, 0xa4,
      57             :       /* SNPA (defunct, MBZ) */ 0x0,
      58             :       /* NLRI tuples */         32, 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
      59             :     },
      60             :     (4 + 16 + 1 + 5), 
      61             :     SHOULD_PARSE,
      62             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
      63             :   },
      64             :   { "IPv6-2",
      65             :     "IPV6 MP Reach, global nexthop, 2 NLRIs", 
      66             :     {
      67             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
      68             :       /* nexthop bytes */       16,
      69             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,   /* ffee:102:... */
      70             :                                 0xaa, 0xbb, 0xcc, 0xdd,
      71             :                                 0x3,  0x4,  0x5,  0x6,
      72             :                                 0xa1, 0xa2, 0xa3, 0xa4,
      73             :       /* SNPA (defunct, MBZ) */ 0x0,
      74             :       /* NLRI tuples */         32, 
      75             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
      76             :                                 64,
      77             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
      78             :                                 0x0,  0x2,  0x0, 0x3,
      79             :     },
      80             :     (4 + 16 + 1 + 5 + 9), 
      81             :     SHOULD_PARSE,
      82             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
      83             :   },
      84             :   { "IPv6-default",
      85             :     "IPV6 MP Reach, global nexthop, 2 NLRIs + default", 
      86             :     {
      87             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
      88             :       /* nexthop bytes */       16,
      89             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,
      90             :                                 0xaa, 0xbb, 0xcc, 0xdd,
      91             :                                 0x3,  0x4,  0x5,  0x6,
      92             :                                 0xa1, 0xa2, 0xa3, 0xa4,
      93             :       /* SNPA (defunct, MBZ) */ 0x0,
      94             :       /* NLRI tuples */         32, 
      95             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
      96             :                                 64,
      97             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
      98             :                                 0x0,  0x2,  0x0, 0x3,
      99             :                                 0x0, /* ::/0 */
     100             :     },
     101             :     (4 + 16 + 1 + 5 + 9 + 1),
     102             :     SHOULD_PARSE,
     103             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     104             :   },
     105             :   { "IPv6-lnh",
     106             :     "IPV6 MP Reach, global+local nexthops, 2 NLRIs + default", 
     107             :     {
     108             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     109             :       /* nexthop bytes */       32,
     110             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,  /* fffe:102:... */
     111             :                                 0xaa, 0xbb, 0xcc, 0xdd,
     112             :                                 0x3,  0x4,  0x5,  0x6,
     113             :                                 0xa1, 0xa2, 0xa3, 0xa4,
     114             :       /* Nexthop (local) */     0xfe, 0x80, 0x0,  0x0,  /* fe80::210:2ff:.. */
     115             :                                 0x0,  0x0,  0x0,  0x0,
     116             :                                 0x2,  0x10, 0x2,  0xff,
     117             :                                 0x1,  0x2,  0x3,  0x4,
     118             :       /* SNPA (defunct, MBZ) */ 0x0,
     119             :       /* NLRI tuples */         32, 
     120             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     121             :                                 64,
     122             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     123             :                                 0x0,  0x2,  0x0, 0x3,
     124             :                                 0x0, /* ::/0 */
     125             :     },
     126             :     (4 + 32 + 1 + 5 + 9 + 1),
     127             :     SHOULD_PARSE,
     128             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     129             :   },
     130             :   { "IPv6-nhlen",
     131             :     "IPV6 MP Reach, inappropriate nexthop length", 
     132             :     {
     133             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     134             :       /* nexthop bytes */       4,
     135             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,  /* fffe:102:... */
     136             :                                 0xaa, 0xbb, 0xcc, 0xdd,
     137             :                                 0x3,  0x4,  0x5,  0x6,
     138             :                                 0xa1, 0xa2, 0xa3, 0xa4,
     139             :       /* Nexthop (local) */     0xfe, 0x80, 0x0,  0x0,  /* fe80::210:2ff:.. */
     140             :                                 0x0,  0x0,  0x0,  0x0,
     141             :                                 0x2,  0x10, 0x2,  0xff,
     142             :                                 0x1,  0x2,  0x3,  0x4,
     143             :       /* SNPA (defunct, MBZ) */ 0x0,
     144             :       /* NLRI tuples */         32, 
     145             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     146             :                                 64,
     147             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     148             :                                 0x0,  0x2,  0x0, 0x3,
     149             :                                 0x0, /* ::/0 */
     150             :     },
     151             :     (4 + 32 + 1 + 5 + 9 + 1),
     152             :     SHOULD_ERR,
     153             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     154             :   },
     155             :   { "IPv6-nhlen2",
     156             :     "IPV6 MP Reach, invalid nexthop length", 
     157             :     {
     158             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     159             :       /* nexthop bytes */       5,
     160             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,  /* fffe:102:... */
     161             :                                 0xaa, 0xbb, 0xcc, 0xdd,
     162             :                                 0x3,  0x4,  0x5,  0x6,
     163             :                                 0xa1, 0xa2, 0xa3, 0xa4,
     164             :       /* Nexthop (local) */     0xfe, 0x80, 0x0,  0x0,  /* fe80::210:2ff:.. */
     165             :                                 0x0,  0x0,  0x0,  0x0,
     166             :                                 0x2,  0x10, 0x2,  0xff,
     167             :                                 0x1,  0x2,  0x3,  0x4,
     168             :       /* SNPA (defunct, MBZ) */ 0x0,
     169             :       /* NLRI tuples */         32, 
     170             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     171             :                                 64,
     172             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     173             :                                 0x0,  0x2,  0x0, 0x3,
     174             :                                 0x0, /* ::/0 */
     175             :     },
     176             :     (4 + 32 + 1 + 5 + 9 + 1),
     177             :     SHOULD_ERR,
     178             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     179             :   },
     180             :   { "IPv6-nhlen3",
     181             :     "IPV6 MP Reach, nexthop length overflow", 
     182             :     {
     183             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     184             :       /* nexthop bytes */       32,
     185             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,  /* fffe:102:... */
     186             :                                 0xaa, 0xbb, 0xcc, 0xdd,
     187             :                                 0x3,  0x4,  0x5,  0x6,
     188             :                                 0xa1, 0xa2, 0xa3, 0xa4,
     189             :     },
     190             :     (4 + 16),
     191             :     SHOULD_ERR,
     192             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     193             :   },
     194             :   { "IPv6-nhlen4",
     195             :     "IPV6 MP Reach, nexthop length short", 
     196             :     {
     197             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     198             :       /* nexthop bytes */       16,
     199             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,  /* fffe:102:... */
     200             :                                 0xaa, 0xbb, 0xcc, 0xdd,
     201             :                                 0x3,  0x4,  0x5,  0x6,
     202             :                                 0xa1, 0xa2, 0xa3, 0xa4,
     203             :       /* Nexthop (local) */     0xfe, 0x80, 0x0,  0x0,  /* fe80::210:2ff:.. */
     204             :                                 0x0,  0x0,  0x0,  0x0,
     205             :                                 0x2,  0x10, 0x2,  0xff,
     206             :                                 0x1,  0x2,  0x3,  0x4,
     207             :       /* SNPA (defunct, MBZ) */ 0x0,
     208             :       /* NLRI tuples */         32, 
     209             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     210             :                                 64,
     211             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     212             :                                 0x0,  0x2,  0x0, 0x3,
     213             :                                 0x0, /* ::/0 */
     214             :     },
     215             :     (4 + 32 + 1 + 5 + 9 + 1),
     216             :     SHOULD_ERR,
     217             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     218             :   },
     219             :   { "IPv6-nlri",
     220             :     "IPV6 MP Reach, NLRI bitlen overflow", 
     221             :     {
     222             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     223             :       /* nexthop bytes */       32,
     224             :       /* Nexthop (global) */    0xff, 0xfe, 0x1,  0x2,  /* fffe:102:... */
     225             :                                 0xaa, 0xbb, 0xcc, 0xdd,
     226             :                                 0x3,  0x4,  0x5,  0x6,
     227             :                                 0xa1, 0xa2, 0xa3, 0xa4,
     228             :       /* Nexthop (local) */     0xfe, 0x80, 0x0,  0x0,  /* fe80::210:2ff:.. */
     229             :                                 0x0,  0x0,  0x0,  0x0,
     230             :                                 0x2,  0x10, 0x2,  0xff,
     231             :                                 0x1,  0x2,  0x3,  0x4,
     232             :       /* SNPA (defunct, MBZ) */ 0x0,
     233             :       /* NLRI tuples */         120, 
     234             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     235             :                                 64,
     236             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     237             :                                 0x0,  0x2,  0x0, 0x3,
     238             :                                 0, /* ::/0 */
     239             :     },
     240             :     (4 + 32 + 1 + 5 + 9 + 1),
     241             :     SHOULD_ERR,
     242             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     243             :   },
     244             :   { "IPv4",
     245             :     "IPv4 MP Reach, 2 NLRIs + default", 
     246             :     {
     247             :       /* AFI / SAFI */          0x0, AFI_IP, SAFI_UNICAST,
     248             :       /* nexthop bytes */       4,
     249             :       /* Nexthop */             192, 168,   0,  1, 
     250             :       /* SNPA (defunct, MBZ) */ 0x0,
     251             :       /* NLRI tuples */         16, 10, 1,    /* 10.1/16 */
     252             :                                 17, 10, 2, 3, /* 10.2.3/17 */
     253             :                                 0, /* 0/0 */
     254             :     },
     255             :     (4 + 4 + 1 + 3 + 4 + 1),
     256             :     SHOULD_PARSE,
     257             :     AFI_IP, SAFI_UNICAST, VALID_AFI,
     258             :   },
     259             :   { "IPv4-nhlen",
     260             :     "IPv4 MP Reach, nexthop lenth overflow", 
     261             :     {
     262             :       /* AFI / SAFI */          0x0, AFI_IP, SAFI_UNICAST,
     263             :       /* nexthop bytes */       32,
     264             :       /* Nexthop */             192, 168,   0,  1, 
     265             :       /* SNPA (defunct, MBZ) */ 0x0,
     266             :       /* NLRI tuples */         16, 10, 1,    /* 10.1/16 */
     267             :                                 17, 10, 2, 3, /* 10.2.3/17 */
     268             :                                 0, /* 0/0 */
     269             :     },
     270             :     (4 + 4 + 1 + 3 + 4 + 1),
     271             :     SHOULD_ERR,
     272             :     AFI_IP, SAFI_UNICAST, VALID_AFI,
     273             :   },
     274             :   { "IPv4-nlrilen",
     275             :     "IPv4 MP Reach, nlri lenth overflow", 
     276             :     {
     277             :       /* AFI / SAFI */          0x0, AFI_IP, SAFI_UNICAST,
     278             :       /* nexthop bytes */       4,
     279             :       /* Nexthop */             192, 168,   0,  1, 
     280             :       /* SNPA (defunct, MBZ) */ 0x0,
     281             :       /* NLRI tuples */         16, 10, 1,    /* 10.1/16 */
     282             :                                 30, 10, 
     283             :                                 0, /* 0/0 */
     284             :     },
     285             :     (4 + 4 + 1 + 3 + 2 + 1),
     286             :     SHOULD_ERR,
     287             :     AFI_IP, SAFI_UNICAST, VALID_AFI,
     288             :   },
     289             :   { "IPv4-MLVPN",
     290             :     "IPv4/MPLS-labeled VPN MP Reach, RD, Nexthop, 3 NLRIs", 
     291             :     {
     292             :       /* AFI / SAFI */          0x0, AFI_IP, SAFI_MPLS_LABELED_VPN,
     293             :       /* nexthop bytes */       12,
     294             :       /* RD */                  0, 0, 1, 2,
     295             :                                 0, 0xff, 3, 4,
     296             :       /* Nexthop */             192, 168,   0,  1, 
     297             :       /* SNPA (defunct, MBZ) */ 0x0,
     298             :       /* NLRI tuples */         16, 10, 1,    /* 10.1/16 */
     299             :                                 17, 10, 2, 3,  /* 10.2.3/17 */
     300             :                                 0, /* 0/0 */
     301             :     },
     302             :     (4 + 12 + 1 + 3 + 4 + 1),
     303             :     SHOULD_PARSE,
     304             :     AFI_IP, SAFI_UNICAST, VALID_AFI,
     305             :   },
     306             :   /* From bug #385 */
     307             :   { "IPv6-bug",
     308             :     "IPv6, global nexthop, 1 default NLRI", 
     309             :     {
     310             :       /* AFI / SAFI */          0x0, 0x2, 0x1,
     311             :       /* nexthop bytes */       0x20,
     312             :       /* Nexthop (global) */    0x20, 0x01, 0x04, 0x70, 
     313             :                                 0x00, 0x01, 0x00, 0x06,
     314             :                                 0x00, 0x00, 0x00, 0x00,
     315             :                                 0x00, 0x00, 0x00, 0x01, 
     316             :       /* Nexthop (local) */     0xfe, 0x80, 0x00, 0x00, 
     317             :                                 0x00, 0x00, 0x00, 0x00,
     318             :                                 0x02, 0x0c, 0xdb, 0xff, 
     319             :                                 0xfe, 0xfe, 0xeb, 0x00,
     320             :       /* SNPA (defunct, MBZ) */ 0,
     321             :       /* NLRI tuples */         /* Should have 0 here for ::/0, but dont */
     322             :     },
     323             :     37,
     324             :     SHOULD_ERR,
     325             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     326             :   },
     327             :   
     328             :   { NULL, NULL, {0}, 0, 0}
     329             : };
     330             : 
     331             : /* MP_UNREACH_NLRI tests */
     332             : static struct test_segment mp_unreach_segments [] =
     333             : {
     334             :   { "IPv6-unreach",
     335             :     "IPV6 MP Unreach, 1 NLRI", 
     336             :     {
     337             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     338             :       /* NLRI tuples */         32, 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     339             :     },
     340             :     (3 + 5), 
     341             :     SHOULD_PARSE,
     342             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     343             :   },
     344             :   { "IPv6-unreach2",
     345             :     "IPV6 MP Unreach, 2 NLRIs", 
     346             :     {
     347             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     348             :       /* NLRI tuples */         32, 
     349             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     350             :                                 64,
     351             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     352             :                                 0x0,  0x2,  0x0, 0x3,
     353             :     },
     354             :     (3 + 5 + 9), 
     355             :     SHOULD_PARSE,
     356             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     357             :   },
     358             :   { "IPv6-unreach-default",
     359             :     "IPV6 MP Unreach, 2 NLRIs + default", 
     360             :     {
     361             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     362             :       /* NLRI tuples */         32, 
     363             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     364             :                                 64,
     365             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     366             :                                 0x0,  0x2,  0x0, 0x3,
     367             :                                 0x0, /* ::/0 */
     368             :     },
     369             :     (3 + 5 + 9 + 1),
     370             :     SHOULD_PARSE,
     371             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     372             :   },
     373             :   { "IPv6-unreach-nlri",
     374             :     "IPV6 MP Unreach, NLRI bitlen overflow", 
     375             :     {
     376             :       /* AFI / SAFI */          0x0, AFI_IP6, SAFI_UNICAST,
     377             :       /* NLRI tuples */         120, 
     378             :                                 0xff, 0xfe, 0x1, 0x2, /* fffe:102::/32 */
     379             :                                 64,
     380             :                                 0xff, 0xfe, 0x0, 0x1, /* fffe:1:2:3::/64 */
     381             :                                 0x0,  0x2,  0x0, 0x3,
     382             :                                 0, /* ::/0 */
     383             :     },
     384             :     (3 + 5 + 9 + 1),
     385             :     SHOULD_ERR,
     386             :     AFI_IP6, SAFI_UNICAST, VALID_AFI,
     387             :   },
     388             :   { "IPv4-unreach",
     389             :     "IPv4 MP Unreach, 2 NLRIs + default", 
     390             :     {
     391             :       /* AFI / SAFI */          0x0, AFI_IP, SAFI_UNICAST,
     392             :       /* NLRI tuples */         16, 10, 1,    /* 10.1/16 */
     393             :                                 17, 10, 2, 3, /* 10.2.3/17 */
     394             :                                 0, /* 0/0 */
     395             :     },
     396             :     (3 + 3 + 4 + 1),
     397             :     SHOULD_PARSE,
     398             :     AFI_IP, SAFI_UNICAST, VALID_AFI,
     399             :   },
     400             :   { "IPv4-unreach-nlrilen",
     401             :     "IPv4 MP Unreach, nlri length overflow", 
     402             :     {
     403             :       /* AFI / SAFI */          0x0, AFI_IP, SAFI_UNICAST,
     404             :       /* NLRI tuples */         16, 10, 1,    /* 10.1/16 */
     405             :                                 30, 10, 
     406             :                                 0, /* 0/0 */
     407             :     },
     408             :     (3 + 3 + 2 + 1),
     409             :     SHOULD_ERR,
     410             :     AFI_IP, SAFI_UNICAST, VALID_AFI,
     411             :   },
     412             :   { "IPv4-unreach-MLVPN",
     413             :     "IPv4/MPLS-labeled VPN MP Unreach, RD, 3 NLRIs", 
     414             :     {
     415             :       /* AFI / SAFI */          0x0, AFI_IP, SAFI_MPLS_LABELED_VPN,
     416             :       /* nexthop bytes */       12,
     417             :       /* RD */                  0, 0, 1, 2,
     418             :                                 0, 0xff, 3, 4,
     419             :       /* Nexthop */             192, 168,   0,  1, 
     420             :       /* SNPA (defunct, MBZ) */ 0x0,
     421             :       /* NLRI tuples */         16, 10, 1,    /* 10.1/16 */
     422             :                                 17, 10, 2, 3,  /* 10.2.3/17 */
     423             :                                 0, /* 0/0 */
     424             :     },
     425             :     (3 + 3 + 4 + 1),
     426             :     SHOULD_PARSE,
     427             :     AFI_IP, SAFI_UNICAST, VALID_AFI,
     428             :   },
     429             :   { NULL, NULL, {0}, 0, 0}
     430             : };
     431             : 
     432             : 
     433             : /* basic parsing test */
     434             : static void
     435          21 : parse_test (struct peer *peer, struct test_segment *t, int type)
     436             : {
     437             :   int ret;
     438          21 :   int oldfailed = failed;
     439          21 :   struct attr attr = { };
     440          21 :   struct bgp_nlri nlri = { };
     441          63 :   struct bgp_attr_parser_args attr_args = {
     442             :     .peer = peer,
     443          21 :     .length = t->len,
     444             :     .total = 1,
     445             :     .attr = &attr,
     446             :     .type = BGP_ATTR_MP_REACH_NLRI,
     447             :     .flags = BGP_ATTR_FLAG_OPTIONAL, 
     448          21 :     .startp = BGP_INPUT_PNT (peer),
     449             :   };
     450             : #define RANDOM_FUZZ 35
     451             :   
     452          21 :   stream_reset (peer->ibuf);
     453          21 :   stream_put (peer->ibuf, NULL, RANDOM_FUZZ);
     454          21 :   stream_set_getp (peer->ibuf, RANDOM_FUZZ);
     455             :   
     456          21 :   stream_write (peer->ibuf, t->data, t->len);
     457             :   
     458          21 :   printf ("%s: %s\n", t->name, t->desc);
     459             :   
     460             :   
     461          21 :   if (type == BGP_ATTR_MP_REACH_NLRI)
     462          14 :     ret = bgp_mp_reach_parse (&attr_args, &nlri);
     463             :   else
     464           7 :     ret = bgp_mp_unreach_parse (&attr_args, &nlri);
     465             : 
     466          21 :   if (!ret)
     467             :     {
     468          11 :       safi_t safi = t->safi;
     469             :       
     470          11 :       if (bgp_afi_safi_valid_indices (t->afi, &safi) != t->afi_valid)
     471           0 :         failed++;
     472             :       
     473          44 :       printf ("MP: %u/%u (%u): recv %u, nego %u\n",
     474          22 :               t->afi, t->safi, safi,
     475          11 :               peer->afc_recv[t->afi][safi],
     476          11 :               peer->afc_nego[t->afi][safi]);
     477             :     }
     478             :   
     479          21 :   printf ("parsed?: %s\n", ret ? "no" : "yes");
     480             :   
     481          21 :   if (ret != t->parses)
     482           0 :     failed++;
     483             :   
     484          21 :   if (tty)
     485          21 :     printf ("%s", (failed > oldfailed) ? VT100_RED "failed!" VT100_RESET 
     486             :                                          : VT100_GREEN "OK" VT100_RESET);
     487             :   else
     488           0 :     printf ("%s", (failed > oldfailed) ? "failed!" : "OK" );
     489             :   
     490          21 :   if (failed)
     491           0 :     printf (" (%u)", failed);
     492             :   
     493          21 :   printf ("\n\n");
     494          21 : }
     495             : 
     496             : static struct bgp *bgp;
     497             : static as_t asn = 100;
     498             : 
     499             : int
     500           1 : main (void)
     501             : {
     502             :   struct peer *peer;
     503             :   int i, j;
     504             :   
     505           1 :   conf_bgp_debug_fsm = -1UL;
     506           1 :   conf_bgp_debug_events = -1UL;
     507           1 :   conf_bgp_debug_packet = -1UL;
     508           1 :   conf_bgp_debug_normal = -1UL;
     509           1 :   conf_bgp_debug_as4 = -1UL;
     510           1 :   term_bgp_debug_fsm = -1UL;
     511           1 :   term_bgp_debug_events = -1UL;
     512           1 :   term_bgp_debug_packet = -1UL;
     513           1 :   term_bgp_debug_normal = -1UL;
     514           1 :   term_bgp_debug_as4 = -1UL;
     515             :   
     516           1 :   master = thread_master_create ();
     517           1 :   bgp_master_init ();
     518           1 :   bgp_option_set (BGP_OPT_NO_LISTEN);
     519             :   
     520           1 :   if (fileno (stdout) >= 0) 
     521           1 :     tty = isatty (fileno (stdout));
     522             :   
     523           1 :   if (bgp_get (&bgp, &asn, NULL))
     524           0 :     return -1;
     525             :   
     526           1 :   peer = peer_create_accept (bgp);
     527           1 :   peer->host = "foo";
     528             :   
     529           3 :   for (i = AFI_IP; i < AFI_MAX; i++)
     530          10 :     for (j = SAFI_UNICAST; j < SAFI_MAX; j++)
     531             :       {
     532           8 :         peer->afc[i][j] = 1;
     533           8 :         peer->afc_adv[i][j] = 1;
     534             :       }
     535             :   
     536           1 :   i = 0;
     537          16 :   while (mp_reach_segments[i].name)
     538          14 :     parse_test (peer, &mp_reach_segments[i++], BGP_ATTR_MP_REACH_NLRI);
     539             : 
     540           1 :   i = 0;
     541           9 :   while (mp_unreach_segments[i].name)
     542           7 :     parse_test (peer, &mp_unreach_segments[i++], BGP_ATTR_MP_UNREACH_NLRI);
     543             : 
     544           1 :   printf ("failures: %d\n", failed);
     545           1 :   return failed;
     546             : }

Generated by: LCOV version 1.10