Annotation of embedaddon/quagga/tests/bgp_mp_attr_test.c, revision 1.1.1.1

1.1       misho       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-vpnv4",
                    290:     "IPv4/VPNv4 MP Reach, RD, Nexthop, 3 NLRIs", 
                    291:     {
                    292:       /* AFI / SAFI */         0x0, AFI_IP, BGP_SAFI_VPNV4,
                    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-vpnv4",
                    413:     "IPv4/VPNv4 MP Unreach, RD, 3 NLRIs", 
                    414:     {
                    415:       /* AFI / SAFI */         0x0, AFI_IP, BGP_SAFI_VPNV4,
                    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: parse_test (struct peer *peer, struct test_segment *t, int type)
                    436: {
                    437:   int ret;
                    438:   int oldfailed = failed;
                    439:   struct attr attr;
                    440:   struct bgp_nlri nlri;
                    441: #define RANDOM_FUZZ 35
                    442:   
                    443:   stream_reset (peer->ibuf);
                    444:   stream_put (peer->ibuf, NULL, RANDOM_FUZZ);
                    445:   stream_set_getp (peer->ibuf, RANDOM_FUZZ);
                    446:   
                    447:   stream_write (peer->ibuf, t->data, t->len);
                    448:   
                    449:   printf ("%s: %s\n", t->name, t->desc);
                    450: 
                    451:   if (type == BGP_ATTR_MP_REACH_NLRI)
                    452:     ret = bgp_mp_reach_parse (peer, t->len, &attr, &nlri);
                    453:   else
                    454:     ret = bgp_mp_unreach_parse (peer, t->len, &nlri);
                    455: 
                    456:   if (!ret)
                    457:     {
                    458:       safi_t safi = t->safi;
                    459:       
                    460:       if (bgp_afi_safi_valid_indices (t->afi, &safi) != t->afi_valid)
                    461:         failed++;
                    462:       
                    463:       printf ("MP: %u/%u (%u): recv %u, nego %u\n",
                    464:               t->afi, t->safi, safi,
                    465:               peer->afc_recv[t->afi][safi],
                    466:               peer->afc_nego[t->afi][safi]);
                    467:     }
                    468:   
                    469:   printf ("parsed?: %s\n", ret ? "no" : "yes");
                    470:   
                    471:   if (ret != t->parses)
                    472:     failed++;
                    473:   
                    474:   if (tty)
                    475:     printf ("%s", (failed > oldfailed) ? VT100_RED "failed!" VT100_RESET 
                    476:                                          : VT100_GREEN "OK" VT100_RESET);
                    477:   else
                    478:     printf ("%s", (failed > oldfailed) ? "failed!" : "OK" );
                    479:   
                    480:   if (failed)
                    481:     printf (" (%u)", failed);
                    482:   
                    483:   printf ("\n\n");
                    484: }
                    485: 
                    486: static struct bgp *bgp;
                    487: static as_t asn = 100;
                    488: 
                    489: int
                    490: main (void)
                    491: {
                    492:   struct peer *peer;
                    493:   int i, j;
                    494:   
                    495:   conf_bgp_debug_fsm = -1UL;
                    496:   conf_bgp_debug_events = -1UL;
                    497:   conf_bgp_debug_packet = -1UL;
                    498:   conf_bgp_debug_normal = -1UL;
                    499:   conf_bgp_debug_as4 = -1UL;
                    500:   term_bgp_debug_fsm = -1UL;
                    501:   term_bgp_debug_events = -1UL;
                    502:   term_bgp_debug_packet = -1UL;
                    503:   term_bgp_debug_normal = -1UL;
                    504:   term_bgp_debug_as4 = -1UL;
                    505:   
                    506:   master = thread_master_create ();
                    507:   bgp_master_init ();
                    508:   
                    509:   if (fileno (stdout) >= 0) 
                    510:     tty = isatty (fileno (stdout));
                    511:   
                    512:   if (bgp_get (&bgp, &asn, NULL))
                    513:     return -1;
                    514:   
                    515:   peer = peer_create_accept (bgp);
                    516:   peer->host = "foo";
                    517:   
                    518:   for (i = AFI_IP; i < AFI_MAX; i++)
                    519:     for (j = SAFI_UNICAST; j < SAFI_MAX; j++)
                    520:       {
                    521:         peer->afc[i][j] = 1;
                    522:         peer->afc_adv[i][j] = 1;
                    523:       }
                    524:   
                    525:   i = 0;
                    526:   while (mp_reach_segments[i].name)
                    527:     parse_test (peer, &mp_reach_segments[i++], BGP_ATTR_MP_REACH_NLRI);
                    528: 
                    529:   i = 0;
                    530:   while (mp_unreach_segments[i].name)
                    531:     parse_test (peer, &mp_unreach_segments[i++], BGP_ATTR_MP_UNREACH_NLRI);
                    532: 
                    533:   printf ("failures: %d\n", failed);
                    534:   return failed;
                    535: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>