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