Annotation of embedaddon/quagga/tests/bgp_mp_attr_test.c, revision 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>