summaryrefslogtreecommitdiffstats
path: root/tests/bgpd/test_aspath.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bgpd/test_aspath.c')
-rw-r--r--tests/bgpd/test_aspath.c2541
1 files changed, 1271 insertions, 1270 deletions
diff --git a/tests/bgpd/test_aspath.c b/tests/bgpd/test_aspath.c
index e5ff6a137..a8ecaa571 100644
--- a/tests/bgpd/test_aspath.c
+++ b/tests/bgpd/test_aspath.c
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (C) 2005 Sun Microsystems, Inc.
*
* This file is part of Quagga.
@@ -16,7 +16,7 @@
* You should have received a copy of the GNU General Public License
* along with Quagga; see the file COPYING. If not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * 02111-1307, USA.
*/
#include <zebra.h>
@@ -45,1345 +45,1346 @@ struct thread_master *master = NULL;
static int failed = 0;
/* specification for a test - what the results should be */
-struct test_spec
-{
- const char *shouldbe; /* the string the path should parse to */
- const char *shouldbe_delete_confed; /* ditto, but once confeds are deleted */
- const unsigned int hops; /* aspath_count_hops result */
- const unsigned int confeds; /* aspath_count_confeds */
- const int private_as; /* whether the private_as check should pass or fail */
+struct test_spec {
+ const char *shouldbe; /* the string the path should parse to */
+ const char *shouldbe_delete_confed; /* ditto, but once confeds are
+ deleted */
+ const unsigned int hops; /* aspath_count_hops result */
+ const unsigned int confeds; /* aspath_count_confeds */
+ const int private_as; /* whether the private_as check should pass or
+ fail */
#define NOT_ALL_PRIVATE 0
#define ALL_PRIVATE 1
- const as_t does_loop; /* an ASN which should trigger loop-check */
- const as_t doesnt_loop; /* one which should not */
- const as_t first; /* the first ASN, if there is one */
+ const as_t does_loop; /* an ASN which should trigger loop-check */
+ const as_t doesnt_loop; /* one which should not */
+ const as_t first; /* the first ASN, if there is one */
#define NULL_ASN 0
};
/* test segments to parse and validate, and use for other tests */
static struct test_segment {
- const char *name;
- const char *desc;
- const u_char asdata[1024];
- int len;
- struct test_spec sp;
-} test_segments [] =
-{
- { /* 0 */
- "seq1",
- "seq(8466,3,52737,4096)",
- { 0x2,0x4, 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00 },
- 10,
- { "8466 3 52737 4096",
- "8466 3 52737 4096",
- 4, 0, NOT_ALL_PRIVATE, 4096, 4, 8466 },
- },
- { /* 1 */
- "seq2",
- "seq(8722) seq(4)",
- { 0x2,0x1, 0x22,0x12,
- 0x2,0x1, 0x00,0x04 },
- 8,
- { "8722 4",
- "8722 4",
- 2, 0, NOT_ALL_PRIVATE, 4, 5, 8722, },
- },
- { /* 2 */
- "seq3",
- "seq(8466,3,52737,4096,8722,4)",
- { 0x2,0x6, 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00,
- 0x22,0x12, 0x00,0x04},
- 14,
- { "8466 3 52737 4096 8722 4",
- "8466 3 52737 4096 8722 4",
- 6, 0, NOT_ALL_PRIVATE, 3, 5, 8466 },
- },
- { /* 3 */
- "seqset",
- "seq(8482,51457) set(5204)",
- { 0x2,0x2, 0x21,0x22, 0xc9,0x01,
- 0x1,0x1, 0x14,0x54 },
- 10,
- { "8482 51457 {5204}",
- "8482 51457 {5204}",
- 3, 0, NOT_ALL_PRIVATE, 5204, 51456, 8482},
- },
- { /* 4 */
- "seqset2",
- "seq(8467, 59649) set(4196,48658) set(17322,30745)",
- { 0x2,0x2, 0x21,0x13, 0xe9,0x01,
- 0x1,0x2, 0x10,0x64, 0xbe,0x12,
- 0x1,0x2, 0x43,0xaa, 0x78,0x19 },
- 18,
- { "8467 59649 {4196,48658} {17322,30745}",
- "8467 59649 {4196,48658} {17322,30745}",
- 4, 0, NOT_ALL_PRIVATE, 48658, 1, 8467},
- },
- { /* 5 */
- "multi",
- "seq(6435,59408,21665) set(2457,61697,4369), seq(1842,41590,51793)",
- { 0x2,0x3, 0x19,0x23, 0xe8,0x10, 0x54,0xa1,
- 0x1,0x3, 0x09,0x99, 0xf1,0x01, 0x11,0x11,
- 0x2,0x3, 0x07,0x32, 0xa2,0x76, 0xca,0x51 },
- 24,
- { "6435 59408 21665 {2457,4369,61697} 1842 41590 51793",
- "6435 59408 21665 {2457,4369,61697} 1842 41590 51793",
- 7, 0, NOT_ALL_PRIVATE, 51793, 1, 6435 },
- },
- { /* 6 */
- "confed",
- "confseq(123,456,789)",
- { 0x3,0x3, 0x00,0x7b, 0x01,0xc8, 0x03,0x15 },
- 8,
- { "(123 456 789)",
- "",
- 0, 3, NOT_ALL_PRIVATE, 789, 1, NULL_ASN },
- },
- { /* 7 */
- "confed2",
- "confseq(123,456,789) confseq(111,222)",
- { 0x3,0x3, 0x00,0x7b, 0x01,0xc8, 0x03,0x15,
- 0x3,0x2, 0x00,0x6f, 0x00,0xde },
- 14,
- { "(123 456 789) (111 222)",
- "",
- 0, 5, NOT_ALL_PRIVATE, 111, 1, NULL_ASN },
- },
- { /* 8 */
- "confset",
- "confset(456,123,789)",
- { 0x4,0x3, 0x01,0xc8, 0x00,0x7b, 0x03,0x15 },
- 8,
- { "[123,456,789]",
- "",
- 0, 1, NOT_ALL_PRIVATE, 123, 1, NULL_ASN },
- },
- { /* 9 */
- "confmulti",
- "confseq(123,456,789) confset(222,111) seq(8722) set(4196,48658)",
- { 0x3,0x3, 0x00,0x7b, 0x01,0xc8, 0x03,0x15,
- 0x4,0x2, 0x00,0xde, 0x00,0x6f,
- 0x2,0x1, 0x22,0x12,
- 0x1,0x2, 0x10,0x64, 0xbe,0x12 },
- 24,
- { "(123 456 789) [111,222] 8722 {4196,48658}",
- "8722 {4196,48658}",
- 2, 4, NOT_ALL_PRIVATE, 123, 1, NULL_ASN },
- },
- { /* 10 */
- "seq4",
- "seq(8466,2,52737,4096,8722,4)",
- { 0x2,0x6, 0x21,0x12, 0x00,0x02, 0xce,0x01, 0x10,0x00,
- 0x22,0x12, 0x00,0x04},
- 14,
- { "8466 2 52737 4096 8722 4",
- "8466 2 52737 4096 8722 4",
- 6, 0, NOT_ALL_PRIVATE, 4096, 1, 8466 },
- },
- { /* 11 */
- "tripleseq1",
- "seq(8466,2,52737) seq(4096,8722,4) seq(8722)",
- { 0x2,0x3, 0x21,0x12, 0x00,0x02, 0xce,0x01,
- 0x2,0x3, 0x10,0x00, 0x22,0x12, 0x00,0x04,
- 0x2,0x1, 0x22,0x12},
- 20,
- { "8466 2 52737 4096 8722 4 8722",
- "8466 2 52737 4096 8722 4 8722",
- 7, 0, NOT_ALL_PRIVATE, 4096, 1, 8466 },
- },
- { /* 12 */
- "someprivate",
- "seq(8466,64512,52737,65535)",
- { 0x2,0x4, 0x21,0x12, 0xfc,0x00, 0xce,0x01, 0xff,0xff },
- 10,
- { "8466 64512 52737 65535",
- "8466 64512 52737 65535",
- 4, 0, NOT_ALL_PRIVATE, 65535, 4, 8466 },
- },
- { /* 13 */
- "allprivate",
- "seq(65534,64512,64513,65535)",
- { 0x2,0x4, 0xff,0xfe, 0xfc,0x00, 0xfc,0x01, 0xff,0xff },
- 10,
- { "65534 64512 64513 65535",
- "65534 64512 64513 65535",
- 4, 0, ALL_PRIVATE, 65534, 4, 65534 },
- },
- { /* 14 */
- "long",
- "seq(8466,3,52737,4096,34285,<repeated 49 more times>)",
- { 0x2,0xfa, 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed,
- 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x85,0xed, },
- 502,
- { "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285",
-
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285",
- 250, 0, NOT_ALL_PRIVATE, 4096, 4, 8466 },
- },
- { /* 15 */
- "seq1extra",
- "seq(8466,3,52737,4096,3456)",
- { 0x2,0x5, 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x0d,0x80 },
- 12,
- { "8466 3 52737 4096 3456",
- "8466 3 52737 4096 3456",
- 5, 0, NOT_ALL_PRIVATE, 4096, 4, 8466 },
- },
- { /* 16 */
- "empty",
- "<empty>",
- {},
- 0,
- { "", "", 0, 0, 0, 0, 0, 0 },
- },
- { /* 17 */
- "redundantset",
- "seq(8466,3,52737,4096,3456) set(7099,8153,8153,8153)",
- { 0x2,0x5, 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x0d,0x80,
- 0x1,0x4, 0x1b,0xbb, 0x1f,0xd9, 0x1f,0xd9, 0x1f,0xd9 },
- 22,
- {
- /* We shouldn't ever /generate/ such paths. However, we should
- * cope with them fine.
- */
- "8466 3 52737 4096 3456 {7099,8153}",
- "8466 3 52737 4096 3456 {7099,8153}",
- 6, 0, NOT_ALL_PRIVATE, 4096, 4, 8466 },
- },
- { /* 18 */
- "reconcile_lead_asp",
- "seq(6435,59408,21665) set(23456,23456,23456), seq(23456,23456,23456)",
- { 0x2,0x3, 0x19,0x23, 0xe8,0x10, 0x54,0xa1,
- 0x1,0x3, 0x5b,0xa0, 0x5b,0xa0, 0x5b,0xa0,
- 0x2,0x3, 0x5b,0xa0, 0x5b,0xa0, 0x5b,0xa0 },
- 24,
- { "6435 59408 21665 {23456} 23456 23456 23456",
- "6435 59408 21665 {23456} 23456 23456 23456",
- 7, 0, NOT_ALL_PRIVATE, 23456, 1, 6435 },
- },
- { /* 19 */
- "reconcile_new_asp",
- "set(2457,61697,4369), seq(1842,41591,51793)",
- {
- 0x1,0x3, 0x09,0x99, 0xf1,0x01, 0x11,0x11,
- 0x2,0x3, 0x07,0x32, 0xa2,0x77, 0xca,0x51 },
- 16,
- { "{2457,4369,61697} 1842 41591 51793",
- "{2457,4369,61697} 1842 41591 51793",
- 4, 0, NOT_ALL_PRIVATE, 51793, 1, 2457 },
- },
- { /* 20 */
- "reconcile_confed",
- "confseq(123,456,789) confset(456,124,788) seq(6435,59408,21665)"
- " set(23456,23456,23456), seq(23456,23456,23456)",
- { 0x3,0x3, 0x00,0x7b, 0x01,0xc8, 0x03,0x15,
- 0x4,0x3, 0x01,0xc8, 0x00,0x7c, 0x03,0x14,
- 0x2,0x3, 0x19,0x23, 0xe8,0x10, 0x54,0xa1,
- 0x1,0x3, 0x5b,0xa0, 0x5b,0xa0, 0x5b,0xa0,
- 0x2,0x3, 0x5b,0xa0, 0x5b,0xa0, 0x5b,0xa0 },
- 40,
- { "(123 456 789) [124,456,788] 6435 59408 21665"
- " {23456} 23456 23456 23456",
- "6435 59408 21665 {23456} 23456 23456 23456",
- 7, 4, NOT_ALL_PRIVATE, 23456, 1, 6435 },
- },
- { /* 21 */
- "reconcile_start_trans",
- "seq(23456,23456,23456) seq(6435,59408,21665)",
- { 0x2,0x3, 0x5b,0xa0, 0x5b,0xa0, 0x5b,0xa0,
- 0x2,0x3, 0x19,0x23, 0xe8,0x10, 0x54,0xa1, },
- 16,
- { "23456 23456 23456 6435 59408 21665",
- "23456 23456 23456 6435 59408 21665",
- 6, 0, NOT_ALL_PRIVATE, 21665, 1, 23456 },
- },
- { /* 22 */
- "reconcile_start_trans4",
- "seq(1842,41591,51793) seq(6435,59408,21665)",
- { 0x2,0x3, 0x07,0x32, 0xa2,0x77, 0xca,0x51,
- 0x2,0x3, 0x19,0x23, 0xe8,0x10, 0x54,0xa1, },
- 16,
- { "1842 41591 51793 6435 59408 21665",
- "1842 41591 51793 6435 59408 21665",
- 6, 0, NOT_ALL_PRIVATE, 41591, 1, 1842 },
- },
- { /* 23 */
- "reconcile_start_trans_error",
- "seq(23456,23456,23456) seq(6435,59408)",
- { 0x2,0x3, 0x5b,0xa0, 0x5b,0xa0, 0x5b,0xa0,
- 0x2,0x2, 0x19,0x23, 0xe8,0x10, },
- 14,
- { "23456 23456 23456 6435 59408",
- "23456 23456 23456 6435 59408",
- 5, 0, NOT_ALL_PRIVATE, 59408, 1, 23456 },
- },
- { /* 24 */
- "redundantset2",
- "seq(8466,3,52737,4096,3456) set(7099,8153,8153,8153,7099)",
- { 0x2,0x5, 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x0d,0x80,
- 0x1,0x5, 0x1b,0xbb, 0x1f,0xd9, 0x1f,0xd9, 0x1f,0xd9, 0x1b,0xbb,},
- 24,
- {
- /* We should weed out duplicate set members. */
- "8466 3 52737 4096 3456 {7099,8153}",
- "8466 3 52737 4096 3456 {7099,8153}",
- 6, 0, NOT_ALL_PRIVATE, 4096, 4, 8466 },
- },
- { /* 25 */
- "zero-size overflow",
- "#ASNs = 0, data = seq(8466 3 52737 4096 3456)",
- { 0x2,0x0, 0x21,0x12, 0x00,0x03, 0xce,0x01, 0x10,0x00, 0x0d,0x80 },
- 12,
- { NULL, NULL,
- 0, 0, 0, 0, 0, 0 },
- },
- { /* 26 */
- "zero-size overflow + valid segment",
- "seq(#AS=0:8466 3 52737),seq(4096 3456)",
- { 0x2,0x0, 0x21,0x12, 0x00,0x03, 0xce,0x01,
- 0x2,0x2, 0x10,0x00, 0x0d,0x80 },
- 14
- ,
- { NULL, NULL,
- 0, 0, 0, 0, 0, 0 },
- },
- { /* 27 */
- "invalid segment type",
- "type=8(4096 3456)",
- { 0x8,0x2, 0x10,0x00, 0x0d,0x80 },
- 14
- ,
- { NULL, NULL,
- 0, 0, 0, 0, 0, 0 },
- }, { NULL, NULL, {0}, 0, { NULL, 0, 0 } }
-};
+ const char *name;
+ const char *desc;
+ const u_char asdata[1024];
+ int len;
+ struct test_spec sp;
+} test_segments[] = {
+ {
+ /* 0 */
+ "seq1",
+ "seq(8466,3,52737,4096)",
+ {0x2, 0x4, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00},
+ 10,
+ {"8466 3 52737 4096", "8466 3 52737 4096", 4, 0,
+ NOT_ALL_PRIVATE, 4096, 4, 8466},
+ },
+ {
+ /* 1 */
+ "seq2",
+ "seq(8722) seq(4)",
+ {0x2, 0x1, 0x22, 0x12, 0x2, 0x1, 0x00, 0x04},
+ 8,
+ {
+ "8722 4", "8722 4", 2, 0, NOT_ALL_PRIVATE, 4, 5, 8722,
+ },
+ },
+ {
+ /* 2 */
+ "seq3",
+ "seq(8466,3,52737,4096,8722,4)",
+ {0x2, 0x6, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x22,
+ 0x12, 0x00, 0x04},
+ 14,
+ {"8466 3 52737 4096 8722 4", "8466 3 52737 4096 8722 4", 6, 0,
+ NOT_ALL_PRIVATE, 3, 5, 8466},
+ },
+ {
+ /* 3 */
+ "seqset",
+ "seq(8482,51457) set(5204)",
+ {0x2, 0x2, 0x21, 0x22, 0xc9, 0x01, 0x1, 0x1, 0x14, 0x54},
+ 10,
+ {"8482 51457 {5204}", "8482 51457 {5204}", 3, 0,
+ NOT_ALL_PRIVATE, 5204, 51456, 8482},
+ },
+ {
+ /* 4 */
+ "seqset2",
+ "seq(8467, 59649) set(4196,48658) set(17322,30745)",
+ {0x2, 0x2, 0x21, 0x13, 0xe9, 0x01, 0x1, 0x2, 0x10, 0x64, 0xbe,
+ 0x12, 0x1, 0x2, 0x43, 0xaa, 0x78, 0x19},
+ 18,
+ {"8467 59649 {4196,48658} {17322,30745}",
+ "8467 59649 {4196,48658} {17322,30745}", 4, 0, NOT_ALL_PRIVATE,
+ 48658, 1, 8467},
+ },
+ {
+ /* 5 */
+ "multi",
+ "seq(6435,59408,21665) set(2457,61697,4369), seq(1842,41590,51793)",
+ {0x2, 0x3, 0x19, 0x23, 0xe8, 0x10, 0x54, 0xa1,
+ 0x1, 0x3, 0x09, 0x99, 0xf1, 0x01, 0x11, 0x11,
+ 0x2, 0x3, 0x07, 0x32, 0xa2, 0x76, 0xca, 0x51},
+ 24,
+ {"6435 59408 21665 {2457,4369,61697} 1842 41590 51793",
+ "6435 59408 21665 {2457,4369,61697} 1842 41590 51793", 7, 0,
+ NOT_ALL_PRIVATE, 51793, 1, 6435},
+ },
+ {
+ /* 6 */
+ "confed",
+ "confseq(123,456,789)",
+ {0x3, 0x3, 0x00, 0x7b, 0x01, 0xc8, 0x03, 0x15},
+ 8,
+ {"(123 456 789)", "", 0, 3, NOT_ALL_PRIVATE, 789, 1, NULL_ASN},
+ },
+ {
+ /* 7 */
+ "confed2",
+ "confseq(123,456,789) confseq(111,222)",
+ {0x3, 0x3, 0x00, 0x7b, 0x01, 0xc8, 0x03, 0x15, 0x3, 0x2, 0x00,
+ 0x6f, 0x00, 0xde},
+ 14,
+ {"(123 456 789) (111 222)", "", 0, 5, NOT_ALL_PRIVATE, 111, 1,
+ NULL_ASN},
+ },
+ {
+ /* 8 */
+ "confset",
+ "confset(456,123,789)",
+ {0x4, 0x3, 0x01, 0xc8, 0x00, 0x7b, 0x03, 0x15},
+ 8,
+ {"[123,456,789]", "", 0, 1, NOT_ALL_PRIVATE, 123, 1, NULL_ASN},
+ },
+ {
+ /* 9 */
+ "confmulti",
+ "confseq(123,456,789) confset(222,111) seq(8722) set(4196,48658)",
+ {0x3, 0x3, 0x00, 0x7b, 0x01, 0xc8, 0x03, 0x15,
+ 0x4, 0x2, 0x00, 0xde, 0x00, 0x6f, 0x2, 0x1,
+ 0x22, 0x12, 0x1, 0x2, 0x10, 0x64, 0xbe, 0x12},
+ 24,
+ {"(123 456 789) [111,222] 8722 {4196,48658}",
+ "8722 {4196,48658}", 2, 4, NOT_ALL_PRIVATE, 123, 1, NULL_ASN},
+ },
+ {
+ /* 10 */
+ "seq4",
+ "seq(8466,2,52737,4096,8722,4)",
+ {0x2, 0x6, 0x21, 0x12, 0x00, 0x02, 0xce, 0x01, 0x10, 0x00, 0x22,
+ 0x12, 0x00, 0x04},
+ 14,
+ {"8466 2 52737 4096 8722 4", "8466 2 52737 4096 8722 4", 6, 0,
+ NOT_ALL_PRIVATE, 4096, 1, 8466},
+ },
+ {
+ /* 11 */
+ "tripleseq1",
+ "seq(8466,2,52737) seq(4096,8722,4) seq(8722)",
+ {0x2, 0x3, 0x21, 0x12, 0x00, 0x02, 0xce, 0x01, 0x2, 0x3,
+ 0x10, 0x00, 0x22, 0x12, 0x00, 0x04, 0x2, 0x1, 0x22, 0x12},
+ 20,
+ {"8466 2 52737 4096 8722 4 8722",
+ "8466 2 52737 4096 8722 4 8722", 7, 0, NOT_ALL_PRIVATE, 4096,
+ 1, 8466},
+ },
+ {
+ /* 12 */
+ "someprivate",
+ "seq(8466,64512,52737,65535)",
+ {0x2, 0x4, 0x21, 0x12, 0xfc, 0x00, 0xce, 0x01, 0xff, 0xff},
+ 10,
+ {"8466 64512 52737 65535", "8466 64512 52737 65535", 4, 0,
+ NOT_ALL_PRIVATE, 65535, 4, 8466},
+ },
+ {
+ /* 13 */
+ "allprivate",
+ "seq(65534,64512,64513,65535)",
+ {0x2, 0x4, 0xff, 0xfe, 0xfc, 0x00, 0xfc, 0x01, 0xff, 0xff},
+ 10,
+ {"65534 64512 64513 65535", "65534 64512 64513 65535", 4, 0,
+ ALL_PRIVATE, 65534, 4, 65534},
+ },
+ {
+ /* 14 */
+ "long",
+ "seq(8466,3,52737,4096,34285,<repeated 49 more times>)",
+ {
+ 0x2, 0xfa, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10,
+ 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce,
+ 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03,
+ 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00,
+ 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12,
+ 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21,
+ 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed,
+ 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85,
+ 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00,
+ 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10,
+ 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce,
+ 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03,
+ 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00,
+ 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12,
+ 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21,
+ 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed,
+ 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85,
+ 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00,
+ 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10,
+ 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce,
+ 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03,
+ 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00,
+ 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12,
+ 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21,
+ 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed,
+ 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85,
+ 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00,
+ 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10,
+ 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce,
+ 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03,
+ 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00,
+ 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12,
+ 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21,
+ 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed,
+ 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85,
+ 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00,
+ 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10,
+ 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce,
+ 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03,
+ 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00,
+ 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12,
+ 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21,
+ 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed,
+ 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x85,
+ 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00,
+ 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10,
+ 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03, 0xce,
+ 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00, 0x03,
+ 0xce, 0x01, 0x10, 0x00, 0x85, 0xed, 0x21, 0x12, 0x00,
+ 0x03, 0xce, 0x01, 0x10, 0x00, 0x85, 0xed,
+ },
+ 502,
+ {"8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285",
-#define COMMON_ATTRS \
- BGP_ATTR_FLAG_TRANS, \
- BGP_ATTR_ORIGIN, \
- 1, \
- BGP_ORIGIN_EGP, \
- BGP_ATTR_FLAG_TRANS, \
- BGP_ATTR_NEXT_HOP, \
- 4, 192, 0, 2, 0
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285",
+ 250, 0, NOT_ALL_PRIVATE, 4096, 4, 8466},
+ },
+ {
+ /* 15 */
+ "seq1extra",
+ "seq(8466,3,52737,4096,3456)",
+ {0x2, 0x5, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x0d,
+ 0x80},
+ 12,
+ {"8466 3 52737 4096 3456", "8466 3 52737 4096 3456", 5, 0,
+ NOT_ALL_PRIVATE, 4096, 4, 8466},
+ },
+ {
+ /* 16 */
+ "empty",
+ "<empty>",
+ {},
+ 0,
+ {"", "", 0, 0, 0, 0, 0, 0},
+ },
+ {
+ /* 17 */
+ "redundantset",
+ "seq(8466,3,52737,4096,3456) set(7099,8153,8153,8153)",
+ {0x2, 0x5, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x0d, 0x80, 0x1, 0x4, 0x1b, 0xbb,
+ 0x1f, 0xd9, 0x1f, 0xd9, 0x1f, 0xd9},
+ 22,
+ {/* We shouldn't ever /generate/ such paths. However, we should
+ * cope with them fine.
+ */
+ "8466 3 52737 4096 3456 {7099,8153}",
+ "8466 3 52737 4096 3456 {7099,8153}", 6, 0, NOT_ALL_PRIVATE,
+ 4096, 4, 8466},
+ },
+ {
+ /* 18 */
+ "reconcile_lead_asp",
+ "seq(6435,59408,21665) set(23456,23456,23456), seq(23456,23456,23456)",
+ {0x2, 0x3, 0x19, 0x23, 0xe8, 0x10, 0x54, 0xa1,
+ 0x1, 0x3, 0x5b, 0xa0, 0x5b, 0xa0, 0x5b, 0xa0,
+ 0x2, 0x3, 0x5b, 0xa0, 0x5b, 0xa0, 0x5b, 0xa0},
+ 24,
+ {"6435 59408 21665 {23456} 23456 23456 23456",
+ "6435 59408 21665 {23456} 23456 23456 23456", 7, 0,
+ NOT_ALL_PRIVATE, 23456, 1, 6435},
+ },
+ {
+ /* 19 */
+ "reconcile_new_asp",
+ "set(2457,61697,4369), seq(1842,41591,51793)",
+ {0x1, 0x3, 0x09, 0x99, 0xf1, 0x01, 0x11, 0x11, 0x2, 0x3, 0x07,
+ 0x32, 0xa2, 0x77, 0xca, 0x51},
+ 16,
+ {"{2457,4369,61697} 1842 41591 51793",
+ "{2457,4369,61697} 1842 41591 51793", 4, 0, NOT_ALL_PRIVATE,
+ 51793, 1, 2457},
+ },
+ {
+ /* 20 */
+ "reconcile_confed",
+ "confseq(123,456,789) confset(456,124,788) seq(6435,59408,21665)"
+ " set(23456,23456,23456), seq(23456,23456,23456)",
+ {0x3, 0x3, 0x00, 0x7b, 0x01, 0xc8, 0x03, 0x15, 0x4, 0x3,
+ 0x01, 0xc8, 0x00, 0x7c, 0x03, 0x14, 0x2, 0x3, 0x19, 0x23,
+ 0xe8, 0x10, 0x54, 0xa1, 0x1, 0x3, 0x5b, 0xa0, 0x5b, 0xa0,
+ 0x5b, 0xa0, 0x2, 0x3, 0x5b, 0xa0, 0x5b, 0xa0, 0x5b, 0xa0},
+ 40,
+ {"(123 456 789) [124,456,788] 6435 59408 21665"
+ " {23456} 23456 23456 23456",
+ "6435 59408 21665 {23456} 23456 23456 23456", 7, 4,
+ NOT_ALL_PRIVATE, 23456, 1, 6435},
+ },
+ {
+ /* 21 */
+ "reconcile_start_trans",
+ "seq(23456,23456,23456) seq(6435,59408,21665)",
+ {
+ 0x2, 0x3, 0x5b, 0xa0, 0x5b, 0xa0, 0x5b, 0xa0, 0x2, 0x3,
+ 0x19, 0x23, 0xe8, 0x10, 0x54, 0xa1,
+ },
+ 16,
+ {"23456 23456 23456 6435 59408 21665",
+ "23456 23456 23456 6435 59408 21665", 6, 0, NOT_ALL_PRIVATE,
+ 21665, 1, 23456},
+ },
+ {
+ /* 22 */
+ "reconcile_start_trans4",
+ "seq(1842,41591,51793) seq(6435,59408,21665)",
+ {
+ 0x2, 0x3, 0x07, 0x32, 0xa2, 0x77, 0xca, 0x51, 0x2, 0x3,
+ 0x19, 0x23, 0xe8, 0x10, 0x54, 0xa1,
+ },
+ 16,
+ {"1842 41591 51793 6435 59408 21665",
+ "1842 41591 51793 6435 59408 21665", 6, 0, NOT_ALL_PRIVATE,
+ 41591, 1, 1842},
+ },
+ {
+ /* 23 */
+ "reconcile_start_trans_error",
+ "seq(23456,23456,23456) seq(6435,59408)",
+ {
+ 0x2, 0x3, 0x5b, 0xa0, 0x5b, 0xa0, 0x5b, 0xa0, 0x2, 0x2,
+ 0x19, 0x23, 0xe8, 0x10,
+ },
+ 14,
+ {"23456 23456 23456 6435 59408", "23456 23456 23456 6435 59408",
+ 5, 0, NOT_ALL_PRIVATE, 59408, 1, 23456},
+ },
+ {
+ /* 24 */
+ "redundantset2",
+ "seq(8466,3,52737,4096,3456) set(7099,8153,8153,8153,7099)",
+ {
+ 0x2, 0x5, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01,
+ 0x10, 0x00, 0x0d, 0x80, 0x1, 0x5, 0x1b, 0xbb,
+ 0x1f, 0xd9, 0x1f, 0xd9, 0x1f, 0xd9, 0x1b, 0xbb,
+ },
+ 24,
+ {/* We should weed out duplicate set members. */
+ "8466 3 52737 4096 3456 {7099,8153}",
+ "8466 3 52737 4096 3456 {7099,8153}", 6, 0, NOT_ALL_PRIVATE,
+ 4096, 4, 8466},
+ },
+ {
+ /* 25 */
+ "zero-size overflow",
+ "#ASNs = 0, data = seq(8466 3 52737 4096 3456)",
+ {0x2, 0x0, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x10, 0x00, 0x0d,
+ 0x80},
+ 12,
+ {NULL, NULL, 0, 0, 0, 0, 0, 0},
+ },
+ {
+ /* 26 */
+ "zero-size overflow + valid segment",
+ "seq(#AS=0:8466 3 52737),seq(4096 3456)",
+ {0x2, 0x0, 0x21, 0x12, 0x00, 0x03, 0xce, 0x01, 0x2, 0x2, 0x10,
+ 0x00, 0x0d, 0x80},
+ 14,
+ {NULL, NULL, 0, 0, 0, 0, 0, 0},
+ },
+ {
+ /* 27 */
+ "invalid segment type",
+ "type=8(4096 3456)",
+ {0x8, 0x2, 0x10, 0x00, 0x0d, 0x80},
+ 14,
+ {NULL, NULL, 0, 0, 0, 0, 0, 0},
+ },
+ {NULL, NULL, {0}, 0, {NULL, 0, 0}}};
+
+#define COMMON_ATTRS \
+ BGP_ATTR_FLAG_TRANS, BGP_ATTR_ORIGIN, 1, BGP_ORIGIN_EGP, \
+ BGP_ATTR_FLAG_TRANS, BGP_ATTR_NEXT_HOP, 4, 192, 0, 2, 0
#define COMMON_ATTR_SIZE 11
/* */
static struct aspath_tests {
- const char *desc;
- const struct test_segment *segment;
- const char *shouldbe; /* String it should evaluate to */
- const enum as4 { AS4_DATA, AS2_DATA }
- as4; /* whether data should be as4 or not (ie as2) */
- const int result; /* expected result for bgp_attr_parse */
- const int cap; /* capabilities to set for peer */
- const char attrheader [1024];
- size_t len;
- const struct test_segment *old_segment;
-} aspath_tests [] =
-{
- /* 0 */
- {
- "basic test",
- &test_segments[0],
- "8466 3 52737 4096",
- AS2_DATA, 0,
- 0,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS,
- BGP_ATTR_AS_PATH,
- 10,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 1 */
- {
- "length too short",
- &test_segments[0],
- "8466 3 52737 4096",
- AS2_DATA, -1,
- 0,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS,
- BGP_ATTR_AS_PATH,
- 8,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 2 */
- {
- "length too long",
- &test_segments[0],
- "8466 3 52737 4096",
- AS2_DATA, -1,
- 0,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS,
- BGP_ATTR_AS_PATH,
- 12,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 3 */
- {
- "incorrect flag",
- &test_segments[0],
- "8466 3 52737 4096",
- AS2_DATA, -1,
- 0,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS|BGP_ATTR_FLAG_OPTIONAL,
- BGP_ATTR_AS_PATH,
- 10,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 4 */
- {
- "as4_path, with as2 format data",
- &test_segments[0],
- "8466 3 52737 4096",
- AS2_DATA, -1,
- 0,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS|BGP_ATTR_FLAG_OPTIONAL,
- BGP_ATTR_AS4_PATH,
- 10,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 5 */
- {
- "as4, with incorrect attr length",
- &test_segments[0],
- "8466 3 52737 4096",
- AS4_DATA, -1,
- PEER_CAP_AS4_RCV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS|BGP_ATTR_FLAG_OPTIONAL,
- BGP_ATTR_AS4_PATH,
- 10,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 6 */
- {
- "basic 4-byte as-path",
- &test_segments[0],
- "8466 3 52737 4096",
- AS4_DATA, 0,
- PEER_CAP_AS4_RCV|PEER_CAP_AS4_ADV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS,
- BGP_ATTR_AS_PATH,
- 18,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 7 */
- {
- "4b AS_PATH: too short",
- &test_segments[0],
- "8466 3 52737 4096",
- AS4_DATA, -1,
- PEER_CAP_AS4_RCV|PEER_CAP_AS4_ADV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS,
- BGP_ATTR_AS_PATH,
- 16,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 8 */
- {
- "4b AS_PATH: too long",
- &test_segments[0],
- "8466 3 52737 4096",
- AS4_DATA, -1,
- PEER_CAP_AS4_RCV|PEER_CAP_AS4_ADV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS,
- BGP_ATTR_AS_PATH,
- 20,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 9 */
- {
- "4b AS_PATH: too long2",
- &test_segments[0],
- "8466 3 52737 4096",
- AS4_DATA, -1,
- PEER_CAP_AS4_RCV|PEER_CAP_AS4_ADV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS,
- BGP_ATTR_AS_PATH,
- 22,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 10 */
- {
- "4b AS_PATH: bad flags",
- &test_segments[0],
- "8466 3 52737 4096",
- AS4_DATA, -1,
- PEER_CAP_AS4_RCV|PEER_CAP_AS4_ADV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS|BGP_ATTR_FLAG_OPTIONAL,
- BGP_ATTR_AS_PATH,
- 18,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 11 */
- {
- "4b AS4_PATH w/o AS_PATH",
- &test_segments[6],
- NULL,
- AS4_DATA, -1,
- PEER_CAP_AS4_ADV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS|BGP_ATTR_FLAG_OPTIONAL,
- BGP_ATTR_AS4_PATH,
- 14,
- },
- COMMON_ATTR_SIZE + 3,
- },
- /* 12 */
- {
- "4b AS4_PATH: confed",
- &test_segments[6],
- "8466 3 52737 4096 (123 456 789)",
- AS4_DATA, 0,
- PEER_CAP_AS4_ADV,
- { COMMON_ATTRS,
- BGP_ATTR_FLAG_TRANS|BGP_ATTR_FLAG_OPTIONAL,
- BGP_ATTR_AS4_PATH,
- 14,
- },
- COMMON_ATTR_SIZE + 3,
- &test_segments[0],
- },
- { NULL, NULL, NULL, 0, 0, 0, { 0 }, 0 },
+ const char *desc;
+ const struct test_segment *segment;
+ const char *shouldbe; /* String it should evaluate to */
+ const enum as4 {
+ AS4_DATA,
+ AS2_DATA
+ } as4; /* whether data should be as4 or not (ie as2) */
+ const int result; /* expected result for bgp_attr_parse */
+ const int cap; /* capabilities to set for peer */
+ const char attrheader[1024];
+ size_t len;
+ const struct test_segment *old_segment;
+} aspath_tests[] = {
+ /* 0 */
+ {
+ "basic test",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS2_DATA,
+ 0,
+ 0,
+ {
+ COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 10,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 1 */
+ {
+ "length too short",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS2_DATA,
+ -1,
+ 0,
+ {
+ COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 8,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 2 */
+ {
+ "length too long",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS2_DATA,
+ -1,
+ 0,
+ {
+ COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 12,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 3 */
+ {
+ "incorrect flag",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS2_DATA,
+ -1,
+ 0,
+ {
+ COMMON_ATTRS,
+ BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+ BGP_ATTR_AS_PATH, 10,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 4 */
+ {
+ "as4_path, with as2 format data",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS2_DATA,
+ -1,
+ 0,
+ {
+ COMMON_ATTRS,
+ BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+ BGP_ATTR_AS4_PATH, 10,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 5 */
+ {
+ "as4, with incorrect attr length",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS4_DATA,
+ -1,
+ PEER_CAP_AS4_RCV,
+ {
+ COMMON_ATTRS,
+ BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+ BGP_ATTR_AS4_PATH, 10,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 6 */
+ {
+ "basic 4-byte as-path",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS4_DATA,
+ 0,
+ PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
+ {
+ COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 18,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 7 */
+ {
+ "4b AS_PATH: too short",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS4_DATA,
+ -1,
+ PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
+ {
+ COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 16,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 8 */
+ {
+ "4b AS_PATH: too long",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS4_DATA,
+ -1,
+ PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
+ {
+ COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 20,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 9 */
+ {
+ "4b AS_PATH: too long2",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS4_DATA,
+ -1,
+ PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
+ {
+ COMMON_ATTRS, BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH, 22,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 10 */
+ {
+ "4b AS_PATH: bad flags",
+ &test_segments[0],
+ "8466 3 52737 4096",
+ AS4_DATA,
+ -1,
+ PEER_CAP_AS4_RCV | PEER_CAP_AS4_ADV,
+ {
+ COMMON_ATTRS,
+ BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+ BGP_ATTR_AS_PATH, 18,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 11 */
+ {
+ "4b AS4_PATH w/o AS_PATH",
+ &test_segments[6],
+ NULL,
+ AS4_DATA,
+ -1,
+ PEER_CAP_AS4_ADV,
+ {
+ COMMON_ATTRS,
+ BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+ BGP_ATTR_AS4_PATH, 14,
+ },
+ COMMON_ATTR_SIZE + 3,
+ },
+ /* 12 */
+ {
+ "4b AS4_PATH: confed",
+ &test_segments[6],
+ "8466 3 52737 4096 (123 456 789)",
+ AS4_DATA,
+ 0,
+ PEER_CAP_AS4_ADV,
+ {
+ COMMON_ATTRS,
+ BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
+ BGP_ATTR_AS4_PATH, 14,
+ },
+ COMMON_ATTR_SIZE + 3,
+ &test_segments[0],
+ },
+ {NULL, NULL, NULL, 0, 0, 0, {0}, 0},
};
/* prepending tests */
static struct tests {
- const struct test_segment *test1;
- const struct test_segment *test2;
- struct test_spec sp;
-} prepend_tests[] =
-{
- /* 0 */
- { &test_segments[0], &test_segments[1],
- { "8466 3 52737 4096 8722 4",
- "8466 3 52737 4096 8722 4",
- 6, 0, NOT_ALL_PRIVATE, 4096, 1, 8466 },
- },
- /* 1 */
- { &test_segments[1], &test_segments[3],
- { "8722 4 8482 51457 {5204}",
- "8722 4 8482 51457 {5204}",
- 5, 0, NOT_ALL_PRIVATE, 5204, 1, 8722 }
- },
- /* 2 */
- { &test_segments[3], &test_segments[4],
- { "8482 51457 {5204} 8467 59649 {4196,48658} {17322,30745}",
- "8482 51457 {5204} 8467 59649 {4196,48658} {17322,30745}",
- 7, 0, NOT_ALL_PRIVATE, 5204, 1, 8482 },
- },
- /* 3 */
- { &test_segments[4], &test_segments[5],
- { "8467 59649 {4196,48658} {17322,30745} 6435 59408 21665"
- " {2457,4369,61697} 1842 41590 51793",
- "8467 59649 {4196,48658} {17322,30745} 6435 59408 21665"
- " {2457,4369,61697} 1842 41590 51793",
- 11, 0, NOT_ALL_PRIVATE, 61697, 1, 8467 }
- },
- /* 4 */
- { &test_segments[5], &test_segments[6],
- { "6435 59408 21665 {2457,4369,61697} 1842 41590 51793",
- "6435 59408 21665 {2457,4369,61697} 1842 41590 51793",
- 7, 0, NOT_ALL_PRIVATE, 1842, 1, 6435 },
- },
- /* 5 */
- { &test_segments[6], &test_segments[7],
- { "(123 456 789) (123 456 789) (111 222)",
- "",
- 0, 8, NOT_ALL_PRIVATE, 111, 1, 0 }
- },
- { &test_segments[7], &test_segments[8],
- { "(123 456 789) (111 222) [123,456,789]",
- "",
- 0, 6, NOT_ALL_PRIVATE, 111, 1, 0 }
- },
- { &test_segments[8], &test_segments[9],
- { "[123,456,789] (123 456 789) [111,222] 8722 {4196,48658}",
- "8722 {4196,48658}",
- 2, 5, NOT_ALL_PRIVATE, 456, 1, NULL_ASN },
- },
- { &test_segments[9], &test_segments[8],
- { "(123 456 789) [111,222] 8722 {4196,48658} [123,456,789]",
- "8722 {4196,48658}",
- 2, 5, NOT_ALL_PRIVATE, 48658, 1, NULL_ASN },
- },
- { &test_segments[14], &test_segments[11],
- { "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 2 52737 4096 8722 4 8722",
-
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
- "8466 2 52737 4096 8722 4 8722",
- 257, 0, NOT_ALL_PRIVATE, 4096, 1000, 8466 },
- },
- { NULL, NULL, { NULL, 0, 0, 0, 0, 0, 0, } },
+ const struct test_segment *test1;
+ const struct test_segment *test2;
+ struct test_spec sp;
+} prepend_tests[] = {
+ /* 0 */
+ {
+ &test_segments[0],
+ &test_segments[1],
+ {"8466 3 52737 4096 8722 4", "8466 3 52737 4096 8722 4", 6, 0,
+ NOT_ALL_PRIVATE, 4096, 1, 8466},
+ },
+ /* 1 */
+ {&test_segments[1],
+ &test_segments[3],
+ {"8722 4 8482 51457 {5204}", "8722 4 8482 51457 {5204}", 5, 0,
+ NOT_ALL_PRIVATE, 5204, 1, 8722}},
+ /* 2 */
+ {
+ &test_segments[3],
+ &test_segments[4],
+ {"8482 51457 {5204} 8467 59649 {4196,48658} {17322,30745}",
+ "8482 51457 {5204} 8467 59649 {4196,48658} {17322,30745}", 7,
+ 0, NOT_ALL_PRIVATE, 5204, 1, 8482},
+ },
+ /* 3 */
+ {&test_segments[4],
+ &test_segments[5],
+ {"8467 59649 {4196,48658} {17322,30745} 6435 59408 21665"
+ " {2457,4369,61697} 1842 41590 51793",
+ "8467 59649 {4196,48658} {17322,30745} 6435 59408 21665"
+ " {2457,4369,61697} 1842 41590 51793",
+ 11, 0, NOT_ALL_PRIVATE, 61697, 1, 8467}},
+ /* 4 */
+ {
+ &test_segments[5],
+ &test_segments[6],
+ {"6435 59408 21665 {2457,4369,61697} 1842 41590 51793",
+ "6435 59408 21665 {2457,4369,61697} 1842 41590 51793", 7, 0,
+ NOT_ALL_PRIVATE, 1842, 1, 6435},
+ },
+ /* 5 */
+ {&test_segments[6],
+ &test_segments[7],
+ {"(123 456 789) (123 456 789) (111 222)", "", 0, 8, NOT_ALL_PRIVATE,
+ 111, 1, 0}},
+ {&test_segments[7],
+ &test_segments[8],
+ {"(123 456 789) (111 222) [123,456,789]", "", 0, 6, NOT_ALL_PRIVATE,
+ 111, 1, 0}},
+ {
+ &test_segments[8],
+ &test_segments[9],
+ {"[123,456,789] (123 456 789) [111,222] 8722 {4196,48658}",
+ "8722 {4196,48658}", 2, 5, NOT_ALL_PRIVATE, 456, 1, NULL_ASN},
+ },
+ {
+ &test_segments[9],
+ &test_segments[8],
+ {"(123 456 789) [111,222] 8722 {4196,48658} [123,456,789]",
+ "8722 {4196,48658}", 2, 5, NOT_ALL_PRIVATE, 48658, 1,
+ NULL_ASN},
+ },
+ {
+ &test_segments[14],
+ &test_segments[11],
+ {"8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 2 52737 4096 8722 4 8722",
+
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 3 52737 4096 34285 8466 3 52737 4096 34285 "
+ "8466 2 52737 4096 8722 4 8722",
+ 257, 0, NOT_ALL_PRIVATE, 4096, 1000, 8466},
+ },
+ {NULL,
+ NULL,
+ {
+ NULL, 0, 0, 0, 0, 0, 0,
+ }},
};
-struct tests reconcile_tests[] =
-{
- { &test_segments[18], &test_segments[19],
- { "6435 59408 21665 {2457,4369,61697} 1842 41591 51793",
- "6435 59408 21665 {2457,4369,61697} 1842 41591 51793",
- 7, 0, NOT_ALL_PRIVATE, 51793, 1, 6435 },
- },
- { &test_segments[19], &test_segments[18],
- /* AS_PATH (19) has more hops than NEW_AS_PATH,
- * so just AS_PATH should be used (though, this practice
- * is bad imho).
- */
- { "{2457,4369,61697} 1842 41591 51793 6435 59408 21665 {23456} 23456 23456 23456",
- "{2457,4369,61697} 1842 41591 51793 6435 59408 21665 {23456} 23456 23456 23456",
- 11, 0, NOT_ALL_PRIVATE, 51793, 1, 6435 },
- },
- { &test_segments[20], &test_segments[19],
- { "(123 456 789) [124,456,788] 6435 59408 21665"
- " {2457,4369,61697} 1842 41591 51793",
- "6435 59408 21665 {2457,4369,61697} 1842 41591 51793",
- 7, 4, NOT_ALL_PRIVATE, 51793, 1, 6435 },
- },
- { &test_segments[21], &test_segments[22],
- { "1842 41591 51793 6435 59408 21665",
- "1842 41591 51793 6435 59408 21665",
- 6, 0, NOT_ALL_PRIVATE, 51793, 1, 1842 },
- },
- { &test_segments[23], &test_segments[22],
- { "23456 23456 23456 6435 59408 1842 41591 51793 6435 59408 21665",
- "23456 23456 23456 6435 59408 1842 41591 51793 6435 59408 21665",
- 11, 0, NOT_ALL_PRIVATE, 51793, 1, 1842 },
- },
- { NULL, NULL, { NULL, 0, 0, 0, 0, 0, 0, } },
+struct tests reconcile_tests[] = {
+ {
+ &test_segments[18],
+ &test_segments[19],
+ {"6435 59408 21665 {2457,4369,61697} 1842 41591 51793",
+ "6435 59408 21665 {2457,4369,61697} 1842 41591 51793", 7, 0,
+ NOT_ALL_PRIVATE, 51793, 1, 6435},
+ },
+ {
+ &test_segments[19],
+ &test_segments[18],
+ /* AS_PATH (19) has more hops than NEW_AS_PATH,
+ * so just AS_PATH should be used (though, this practice
+ * is bad imho).
+ */
+ {"{2457,4369,61697} 1842 41591 51793 6435 59408 21665 {23456} 23456 23456 23456",
+ "{2457,4369,61697} 1842 41591 51793 6435 59408 21665 {23456} 23456 23456 23456",
+ 11, 0, NOT_ALL_PRIVATE, 51793, 1, 6435},
+ },
+ {
+ &test_segments[20],
+ &test_segments[19],
+ {"(123 456 789) [124,456,788] 6435 59408 21665"
+ " {2457,4369,61697} 1842 41591 51793",
+ "6435 59408 21665 {2457,4369,61697} 1842 41591 51793", 7, 4,
+ NOT_ALL_PRIVATE, 51793, 1, 6435},
+ },
+ {
+ &test_segments[21],
+ &test_segments[22],
+ {"1842 41591 51793 6435 59408 21665",
+ "1842 41591 51793 6435 59408 21665", 6, 0, NOT_ALL_PRIVATE,
+ 51793, 1, 1842},
+ },
+ {
+ &test_segments[23],
+ &test_segments[22],
+ {"23456 23456 23456 6435 59408 1842 41591 51793 6435 59408 21665",
+ "23456 23456 23456 6435 59408 1842 41591 51793 6435 59408 21665",
+ 11, 0, NOT_ALL_PRIVATE, 51793, 1, 1842},
+ },
+ {NULL,
+ NULL,
+ {
+ NULL, 0, 0, 0, 0, 0, 0,
+ }},
};
-
-struct tests aggregate_tests[] =
-{
- { &test_segments[0], &test_segments[2],
- { "8466 3 52737 4096 {4,8722}",
- "8466 3 52737 4096 {4,8722}",
- 5, 0, NOT_ALL_PRIVATE, 4, 1, 8466 },
- },
- { &test_segments[2], &test_segments[0],
- { "8466 3 52737 4096 {4,8722}",
- "8466 3 52737 4096 {4,8722}",
- 5, 0, NOT_ALL_PRIVATE, 8722, 1, 8466 },
- },
- { &test_segments[2], &test_segments[10],
- { "8466 {2,3,4,4096,8722,52737}",
- "8466 {2,3,4,4096,8722,52737}",
- 2, 0, NOT_ALL_PRIVATE, 8722, 5, 8466 },
- },
- { &test_segments[10], &test_segments[2],
- { "8466 {2,3,4,4096,8722,52737}",
- "8466 {2,3,4,4096,8722,52737}",
- 2, 0, NOT_ALL_PRIVATE, 2, 20000, 8466 },
- },
-
- { &test_segments[5], &test_segments[18],
- { "6435 59408 21665 {1842,2457,4369,23456,41590,51793,61697}",
- "6435 59408 21665 {1842,2457,4369,23456,41590,51793,61697}",
- 4, 0, NOT_ALL_PRIVATE, 41590, 1, 6435 },
- },
-
- { NULL, NULL, { NULL, 0, 0} },
+
+struct tests aggregate_tests[] = {
+ {
+ &test_segments[0],
+ &test_segments[2],
+ {"8466 3 52737 4096 {4,8722}", "8466 3 52737 4096 {4,8722}", 5,
+ 0, NOT_ALL_PRIVATE, 4, 1, 8466},
+ },
+ {
+ &test_segments[2],
+ &test_segments[0],
+ {"8466 3 52737 4096 {4,8722}", "8466 3 52737 4096 {4,8722}", 5,
+ 0, NOT_ALL_PRIVATE, 8722, 1, 8466},
+ },
+ {
+ &test_segments[2],
+ &test_segments[10],
+ {"8466 {2,3,4,4096,8722,52737}", "8466 {2,3,4,4096,8722,52737}",
+ 2, 0, NOT_ALL_PRIVATE, 8722, 5, 8466},
+ },
+ {
+ &test_segments[10],
+ &test_segments[2],
+ {"8466 {2,3,4,4096,8722,52737}", "8466 {2,3,4,4096,8722,52737}",
+ 2, 0, NOT_ALL_PRIVATE, 2, 20000, 8466},
+ },
+
+ {
+ &test_segments[5],
+ &test_segments[18],
+ {"6435 59408 21665 {1842,2457,4369,23456,41590,51793,61697}",
+ "6435 59408 21665 {1842,2457,4369,23456,41590,51793,61697}", 4,
+ 0, NOT_ALL_PRIVATE, 41590, 1, 6435},
+ },
+
+ {NULL, NULL, {NULL, 0, 0}},
};
-struct compare_tests
-{
- int test_index1;
- int test_index2;
+struct compare_tests {
+ int test_index1;
+ int test_index2;
#define CMP_RES_YES 1
#define CMP_RES_NO 0
- char shouldbe_cmp;
- char shouldbe_confed;
-} left_compare [] =
-{
- { 0, 1, CMP_RES_NO, CMP_RES_NO },
- { 0, 2, CMP_RES_YES, CMP_RES_NO },
- { 0, 11, CMP_RES_YES, CMP_RES_NO },
- { 0, 15, CMP_RES_YES, CMP_RES_NO },
- { 0, 16, CMP_RES_NO, CMP_RES_NO },
- { 1, 11, CMP_RES_NO, CMP_RES_NO },
- { 6, 7, CMP_RES_NO, CMP_RES_YES },
- { 6, 8, CMP_RES_NO, CMP_RES_NO },
- { 7, 8, CMP_RES_NO, CMP_RES_NO },
- { 1, 9, CMP_RES_YES, CMP_RES_NO },
- { 0, 9, CMP_RES_NO, CMP_RES_NO },
- { 3, 9, CMP_RES_NO, CMP_RES_NO },
- { 0, 6, CMP_RES_NO, CMP_RES_NO },
- { 1, 6, CMP_RES_NO, CMP_RES_NO },
- { 0, 8, CMP_RES_NO, CMP_RES_NO },
- { 1, 8, CMP_RES_NO, CMP_RES_NO },
- { 11, 6, CMP_RES_NO, CMP_RES_NO },
- { 11, 7, CMP_RES_NO, CMP_RES_NO },
- { 11, 8, CMP_RES_NO, CMP_RES_NO },
- { 9, 6, CMP_RES_NO, CMP_RES_YES },
- { 9, 7, CMP_RES_NO, CMP_RES_YES },
- { 9, 8, CMP_RES_NO, CMP_RES_NO },
+ char shouldbe_cmp;
+ char shouldbe_confed;
+} left_compare[] = {
+ {0, 1, CMP_RES_NO, CMP_RES_NO}, {0, 2, CMP_RES_YES, CMP_RES_NO},
+ {0, 11, CMP_RES_YES, CMP_RES_NO}, {0, 15, CMP_RES_YES, CMP_RES_NO},
+ {0, 16, CMP_RES_NO, CMP_RES_NO}, {1, 11, CMP_RES_NO, CMP_RES_NO},
+ {6, 7, CMP_RES_NO, CMP_RES_YES}, {6, 8, CMP_RES_NO, CMP_RES_NO},
+ {7, 8, CMP_RES_NO, CMP_RES_NO}, {1, 9, CMP_RES_YES, CMP_RES_NO},
+ {0, 9, CMP_RES_NO, CMP_RES_NO}, {3, 9, CMP_RES_NO, CMP_RES_NO},
+ {0, 6, CMP_RES_NO, CMP_RES_NO}, {1, 6, CMP_RES_NO, CMP_RES_NO},
+ {0, 8, CMP_RES_NO, CMP_RES_NO}, {1, 8, CMP_RES_NO, CMP_RES_NO},
+ {11, 6, CMP_RES_NO, CMP_RES_NO}, {11, 7, CMP_RES_NO, CMP_RES_NO},
+ {11, 8, CMP_RES_NO, CMP_RES_NO}, {9, 6, CMP_RES_NO, CMP_RES_YES},
+ {9, 7, CMP_RES_NO, CMP_RES_YES}, {9, 8, CMP_RES_NO, CMP_RES_NO},
};
/* make an aspath from a data stream */
-static struct aspath *
-make_aspath (const u_char *data, size_t len, int use32bit)
+static struct aspath *make_aspath(const u_char *data, size_t len, int use32bit)
{
- struct stream *s = NULL;
- struct aspath *as;
-
- if (len)
- {
- s = stream_new (len);
- stream_put (s, data, len);
- }
- as = aspath_parse (s, len, use32bit);
-
- if (s)
- stream_free (s);
-
- return as;
+ struct stream *s = NULL;
+ struct aspath *as;
+
+ if (len) {
+ s = stream_new(len);
+ stream_put(s, data, len);
+ }
+ as = aspath_parse(s, len, use32bit);
+
+ if (s)
+ stream_free(s);
+
+ return as;
}
-static void
-printbytes (const u_char *bytes, int len)
+static void printbytes(const u_char *bytes, int len)
{
- int i = 0;
- while (i < len)
- {
- if (i % 2)
- printf ("%02hhx%s", bytes[i], " ");
- else
- printf ("0x%02hhx", bytes[i]);
- i++;
- }
- printf ("\n");
-}
+ int i = 0;
+ while (i < len) {
+ if (i % 2)
+ printf("%02hhx%s", bytes[i], " ");
+ else
+ printf("0x%02hhx", bytes[i]);
+ i++;
+ }
+ printf("\n");
+}
/* validate the given aspath */
-static int
-validate (struct aspath *as, const struct test_spec *sp)
+static int validate(struct aspath *as, const struct test_spec *sp)
{
- size_t bytes, bytes4;
- int fails = 0;
- const u_char *out;
- static struct stream *s;
- struct aspath *asinout, *asconfeddel, *asstr, *as4;
-
- if (as == NULL && sp->shouldbe == NULL)
- {
- printf ("Correctly failed to parse\n");
- return fails;
- }
-
- out = aspath_snmp_pathseg (as, &bytes);
- asinout = make_aspath (out, bytes, 0);
-
- /* Excercise AS4 parsing a bit, with a dogfood test */
- if (!s)
- s = stream_new (4096);
- bytes4 = aspath_put (s, as, 1);
- as4 = make_aspath (STREAM_DATA(s), bytes4, 1);
-
- asstr = aspath_str2aspath (sp->shouldbe);
-
- asconfeddel = aspath_delete_confed_seq (aspath_dup (asinout));
-
- printf ("got: %s\n", aspath_print(as));
-
- /* the parsed path should match the specified 'shouldbe' string.
- * We should pass the "eat our own dog food" test, be able to output
- * this path and then input it again. Ie the path resulting from:
- *
- * aspath_parse(aspath_put(as))
- *
- * should:
- *
- * - also match the specified 'shouldbe' value
- * - hash to same value as original path
- * - have same hops and confed counts as original, and as the
- * the specified counts
- *
- * aspath_str2aspath() and shouldbe should match
- *
- * We do the same for:
- *
- * aspath_parse(aspath_put(as,USE32BIT))
- *
- * Confederation related tests:
- * - aspath_delete_confed_seq(aspath) should match shouldbe_confed
- * - aspath_delete_confed_seq should be idempotent.
- */
- if (strcmp(aspath_print (as), sp->shouldbe)
- /* hash validation */
- || (aspath_key_make (as) != aspath_key_make (asinout))
- /* by string */
- || strcmp(aspath_print (asinout), sp->shouldbe)
- /* By 4-byte parsing */
- || strcmp(aspath_print (as4), sp->shouldbe)
- /* by various path counts */
- || (aspath_count_hops (as) != sp->hops)
- || (aspath_count_confeds (as) != sp->confeds)
- || (aspath_count_hops (asinout) != sp->hops)
- || (aspath_count_confeds (asinout) != sp->confeds))
- {
- failed++;
- fails++;
- printf ("shouldbe:\n%s\n", sp->shouldbe);
- printf ("as4:\n%s\n", aspath_print (as4));
- printf ("hash keys: in: %d out->in: %d\n",
- aspath_key_make (as), aspath_key_make (asinout));
- printf ("hops: %d, counted %d %d\n", sp->hops,
- aspath_count_hops (as),
- aspath_count_hops (asinout) );
- printf ("confeds: %d, counted %d %d\n", sp->confeds,
- aspath_count_confeds (as),
- aspath_count_confeds (asinout));
- printf ("out->in:\n%s\nbytes: ", aspath_print(asinout));
- printbytes (out, bytes);
- }
- /* basic confed related tests */
- if ((aspath_print (asconfeddel) == NULL
- && sp->shouldbe_delete_confed != NULL)
- || (aspath_print (asconfeddel) != NULL
- && sp->shouldbe_delete_confed == NULL)
- || strcmp(aspath_print (asconfeddel), sp->shouldbe_delete_confed)
- /* delete_confed_seq should be idempotent */
- || (aspath_key_make (asconfeddel)
- != aspath_key_make (aspath_delete_confed_seq (asconfeddel))))
- {
- failed++;
- fails++;
- printf ("as-path minus confeds is: %s\n", aspath_print (asconfeddel));
- printf ("as-path minus confeds should be: %s\n", sp->shouldbe_delete_confed);
- }
- /* aspath_str2aspath test */
- if ((aspath_print (asstr) == NULL && sp->shouldbe != NULL)
- || (aspath_print (asstr) != NULL && sp->shouldbe == NULL)
- || strcmp(aspath_print (asstr), sp->shouldbe))
- {
- failed++;
- fails++;
- printf ("asstr: %s\n", aspath_print (asstr));
- }
-
- /* loop, private and first as checks */
- if ((sp->does_loop && aspath_loop_check (as, sp->does_loop) == 0)
- || (sp->doesnt_loop && aspath_loop_check (as, sp->doesnt_loop) != 0)
- || (aspath_private_as_check (as) != sp->private_as)
- || (aspath_firstas_check (as,sp->first)
- && sp->first == 0))
- {
- failed++;
- fails++;
- printf ("firstas: %d, got %d\n", sp->first,
- aspath_firstas_check (as,sp->first));
- printf ("loop does: %d %d, doesnt: %d %d\n",
- sp->does_loop, aspath_loop_check (as, sp->does_loop),
- sp->doesnt_loop, aspath_loop_check (as, sp->doesnt_loop));
- printf ("private check: %d %d\n", sp->private_as,
- aspath_private_as_check (as));
- }
- aspath_unintern (&asinout);
- aspath_unintern (&as4);
-
- aspath_free (asconfeddel);
- aspath_free (asstr);
- stream_reset (s);
-
- return fails;
+ size_t bytes, bytes4;
+ int fails = 0;
+ const u_char *out;
+ static struct stream *s;
+ struct aspath *asinout, *asconfeddel, *asstr, *as4;
+
+ if (as == NULL && sp->shouldbe == NULL) {
+ printf("Correctly failed to parse\n");
+ return fails;
+ }
+
+ out = aspath_snmp_pathseg(as, &bytes);
+ asinout = make_aspath(out, bytes, 0);
+
+ /* Excercise AS4 parsing a bit, with a dogfood test */
+ if (!s)
+ s = stream_new(4096);
+ bytes4 = aspath_put(s, as, 1);
+ as4 = make_aspath(STREAM_DATA(s), bytes4, 1);
+
+ asstr = aspath_str2aspath(sp->shouldbe);
+
+ asconfeddel = aspath_delete_confed_seq(aspath_dup(asinout));
+
+ printf("got: %s\n", aspath_print(as));
+
+ /* the parsed path should match the specified 'shouldbe' string.
+ * We should pass the "eat our own dog food" test, be able to output
+ * this path and then input it again. Ie the path resulting from:
+ *
+ * aspath_parse(aspath_put(as))
+ *
+ * should:
+ *
+ * - also match the specified 'shouldbe' value
+ * - hash to same value as original path
+ * - have same hops and confed counts as original, and as the
+ * the specified counts
+ *
+ * aspath_str2aspath() and shouldbe should match
+ *
+ * We do the same for:
+ *
+ * aspath_parse(aspath_put(as,USE32BIT))
+ *
+ * Confederation related tests:
+ * - aspath_delete_confed_seq(aspath) should match shouldbe_confed
+ * - aspath_delete_confed_seq should be idempotent.
+ */
+ if (strcmp(aspath_print(as), sp->shouldbe)
+ /* hash validation */
+ || (aspath_key_make(as) != aspath_key_make(asinout))
+ /* by string */
+ || strcmp(aspath_print(asinout), sp->shouldbe)
+ /* By 4-byte parsing */
+ || strcmp(aspath_print(as4), sp->shouldbe)
+ /* by various path counts */
+ || (aspath_count_hops(as) != sp->hops)
+ || (aspath_count_confeds(as) != sp->confeds)
+ || (aspath_count_hops(asinout) != sp->hops)
+ || (aspath_count_confeds(asinout) != sp->confeds)) {
+ failed++;
+ fails++;
+ printf("shouldbe:\n%s\n", sp->shouldbe);
+ printf("as4:\n%s\n", aspath_print(as4));
+ printf("hash keys: in: %d out->in: %d\n", aspath_key_make(as),
+ aspath_key_make(asinout));
+ printf("hops: %d, counted %d %d\n", sp->hops,
+ aspath_count_hops(as), aspath_count_hops(asinout));
+ printf("confeds: %d, counted %d %d\n", sp->confeds,
+ aspath_count_confeds(as), aspath_count_confeds(asinout));
+ printf("out->in:\n%s\nbytes: ", aspath_print(asinout));
+ printbytes(out, bytes);
+ }
+ /* basic confed related tests */
+ if ((aspath_print(asconfeddel) == NULL
+ && sp->shouldbe_delete_confed != NULL)
+ || (aspath_print(asconfeddel) != NULL
+ && sp->shouldbe_delete_confed == NULL)
+ || strcmp(aspath_print(asconfeddel), sp->shouldbe_delete_confed)
+ /* delete_confed_seq should be idempotent */
+ || (aspath_key_make(asconfeddel)
+ != aspath_key_make(aspath_delete_confed_seq(asconfeddel)))) {
+ failed++;
+ fails++;
+ printf("as-path minus confeds is: %s\n",
+ aspath_print(asconfeddel));
+ printf("as-path minus confeds should be: %s\n",
+ sp->shouldbe_delete_confed);
+ }
+ /* aspath_str2aspath test */
+ if ((aspath_print(asstr) == NULL && sp->shouldbe != NULL)
+ || (aspath_print(asstr) != NULL && sp->shouldbe == NULL)
+ || strcmp(aspath_print(asstr), sp->shouldbe)) {
+ failed++;
+ fails++;
+ printf("asstr: %s\n", aspath_print(asstr));
+ }
+
+ /* loop, private and first as checks */
+ if ((sp->does_loop && aspath_loop_check(as, sp->does_loop) == 0)
+ || (sp->doesnt_loop && aspath_loop_check(as, sp->doesnt_loop) != 0)
+ || (aspath_private_as_check(as) != sp->private_as)
+ || (aspath_firstas_check(as, sp->first) && sp->first == 0)) {
+ failed++;
+ fails++;
+ printf("firstas: %d, got %d\n", sp->first,
+ aspath_firstas_check(as, sp->first));
+ printf("loop does: %d %d, doesnt: %d %d\n", sp->does_loop,
+ aspath_loop_check(as, sp->does_loop), sp->doesnt_loop,
+ aspath_loop_check(as, sp->doesnt_loop));
+ printf("private check: %d %d\n", sp->private_as,
+ aspath_private_as_check(as));
+ }
+ aspath_unintern(&asinout);
+ aspath_unintern(&as4);
+
+ aspath_free(asconfeddel);
+ aspath_free(asstr);
+ stream_reset(s);
+
+ return fails;
}
-static void
-empty_get_test ()
+static void empty_get_test()
{
- struct aspath *as = aspath_empty_get ();
- struct test_spec sp = { "", "", 0, 0, 0, 0, 0, 0 };
-
- printf ("empty_get_test, as: %s\n",aspath_print (as));
- if (!validate (as, &sp))
- printf ("%s\n", OK);
- else
- printf ("%s!\n", FAILED);
-
- printf ("\n");
-
- aspath_free (as);
+ struct aspath *as = aspath_empty_get();
+ struct test_spec sp = {"", "", 0, 0, 0, 0, 0, 0};
+
+ printf("empty_get_test, as: %s\n", aspath_print(as));
+ if (!validate(as, &sp))
+ printf("%s\n", OK);
+ else
+ printf("%s!\n", FAILED);
+
+ printf("\n");
+
+ aspath_free(as);
}
/* basic parsing test */
-static void
-parse_test (struct test_segment *t)
+static void parse_test(struct test_segment *t)
{
- struct aspath *asp;
-
- printf ("%s: %s\n", t->name, t->desc);
-
- asp = make_aspath (t->asdata, t->len, 0);
-
- printf ("aspath: %s\nvalidating...:\n", aspath_print (asp));
-
- if (!validate (asp, &t->sp))
- printf (OK "\n");
- else
- printf (FAILED "\n");
-
- printf ("\n");
-
- if (asp)
- aspath_unintern (&asp);
+ struct aspath *asp;
+
+ printf("%s: %s\n", t->name, t->desc);
+
+ asp = make_aspath(t->asdata, t->len, 0);
+
+ printf("aspath: %s\nvalidating...:\n", aspath_print(asp));
+
+ if (!validate(asp, &t->sp))
+ printf(OK "\n");
+ else
+ printf(FAILED "\n");
+
+ printf("\n");
+
+ if (asp)
+ aspath_unintern(&asp);
}
/* prepend testing */
-static void
-prepend_test (struct tests *t)
+static void prepend_test(struct tests *t)
{
- struct aspath *asp1, *asp2, *ascratch;
-
- printf ("prepend %s: %s\n", t->test1->name, t->test1->desc);
- printf ("to %s: %s\n", t->test2->name, t->test2->desc);
-
- asp1 = make_aspath (t->test1->asdata, t->test1->len, 0);
- asp2 = make_aspath (t->test2->asdata, t->test2->len, 0);
-
- ascratch = aspath_dup (asp2);
- aspath_unintern (&asp2);
-
- asp2 = aspath_prepend (asp1, ascratch);
-
- printf ("aspath: %s\n", aspath_print (asp2));
-
- if (!validate (asp2, &t->sp))
- printf ("%s\n", OK);
- else
- printf ("%s!\n", FAILED);
-
- printf ("\n");
- aspath_unintern (&asp1);
- aspath_free (asp2);
+ struct aspath *asp1, *asp2, *ascratch;
+
+ printf("prepend %s: %s\n", t->test1->name, t->test1->desc);
+ printf("to %s: %s\n", t->test2->name, t->test2->desc);
+
+ asp1 = make_aspath(t->test1->asdata, t->test1->len, 0);
+ asp2 = make_aspath(t->test2->asdata, t->test2->len, 0);
+
+ ascratch = aspath_dup(asp2);
+ aspath_unintern(&asp2);
+
+ asp2 = aspath_prepend(asp1, ascratch);
+
+ printf("aspath: %s\n", aspath_print(asp2));
+
+ if (!validate(asp2, &t->sp))
+ printf("%s\n", OK);
+ else
+ printf("%s!\n", FAILED);
+
+ printf("\n");
+ aspath_unintern(&asp1);
+ aspath_free(asp2);
}
/* empty-prepend testing */
-static void
-empty_prepend_test (struct test_segment *t)
+static void empty_prepend_test(struct test_segment *t)
{
- struct aspath *asp1, *asp2, *ascratch;
-
- printf ("empty prepend %s: %s\n", t->name, t->desc);
-
- asp1 = make_aspath (t->asdata, t->len, 0);
- asp2 = aspath_empty ();
-
- ascratch = aspath_dup (asp2);
- aspath_unintern (&asp2);
-
- asp2 = aspath_prepend (asp1, ascratch);
-
- printf ("aspath: %s\n", aspath_print (asp2));
-
- if (!validate (asp2, &t->sp))
- printf (OK "\n");
- else
- printf (FAILED "!\n");
-
- printf ("\n");
- if (asp1)
- aspath_unintern (&asp1);
- aspath_free (asp2);
+ struct aspath *asp1, *asp2, *ascratch;
+
+ printf("empty prepend %s: %s\n", t->name, t->desc);
+
+ asp1 = make_aspath(t->asdata, t->len, 0);
+ asp2 = aspath_empty();
+
+ ascratch = aspath_dup(asp2);
+ aspath_unintern(&asp2);
+
+ asp2 = aspath_prepend(asp1, ascratch);
+
+ printf("aspath: %s\n", aspath_print(asp2));
+
+ if (!validate(asp2, &t->sp))
+ printf(OK "\n");
+ else
+ printf(FAILED "!\n");
+
+ printf("\n");
+ if (asp1)
+ aspath_unintern(&asp1);
+ aspath_free(asp2);
}
/* as2+as4 reconciliation testing */
-static void
-as4_reconcile_test (struct tests *t)
+static void as4_reconcile_test(struct tests *t)
{
- struct aspath *asp1, *asp2, *ascratch;
-
- printf ("reconciling %s:\n %s\n", t->test1->name, t->test1->desc);
- printf ("with %s:\n %s\n", t->test2->name, t->test2->desc);
-
- asp1 = make_aspath (t->test1->asdata, t->test1->len, 0);
- asp2 = make_aspath (t->test2->asdata, t->test2->len, 0);
-
- ascratch = aspath_reconcile_as4 (asp1, asp2);
-
- if (!validate (ascratch, &t->sp))
- printf (OK "\n");
- else
- printf (FAILED "!\n");
-
- printf ("\n");
- aspath_unintern (&asp1);
- aspath_unintern (&asp2);
- aspath_free (ascratch);
+ struct aspath *asp1, *asp2, *ascratch;
+
+ printf("reconciling %s:\n %s\n", t->test1->name, t->test1->desc);
+ printf("with %s:\n %s\n", t->test2->name, t->test2->desc);
+
+ asp1 = make_aspath(t->test1->asdata, t->test1->len, 0);
+ asp2 = make_aspath(t->test2->asdata, t->test2->len, 0);
+
+ ascratch = aspath_reconcile_as4(asp1, asp2);
+
+ if (!validate(ascratch, &t->sp))
+ printf(OK "\n");
+ else
+ printf(FAILED "!\n");
+
+ printf("\n");
+ aspath_unintern(&asp1);
+ aspath_unintern(&asp2);
+ aspath_free(ascratch);
}
/* aggregation testing */
-static void
-aggregate_test (struct tests *t)
+static void aggregate_test(struct tests *t)
{
- struct aspath *asp1, *asp2, *ascratch;
-
- printf ("aggregate %s: %s\n", t->test1->name, t->test1->desc);
- printf ("with %s: %s\n", t->test2->name, t->test2->desc);
-
- asp1 = make_aspath (t->test1->asdata, t->test1->len, 0);
- asp2 = make_aspath (t->test2->asdata, t->test2->len, 0);
-
- ascratch = aspath_aggregate (asp1, asp2);
-
- if (!validate (ascratch, &t->sp))
- printf (OK "\n");
- else
- printf (FAILED "!\n");
-
- printf ("\n");
- aspath_unintern (&asp1);
- aspath_unintern (&asp2);
- aspath_free (ascratch);
-/* aspath_unintern (ascratch);*/
+ struct aspath *asp1, *asp2, *ascratch;
+
+ printf("aggregate %s: %s\n", t->test1->name, t->test1->desc);
+ printf("with %s: %s\n", t->test2->name, t->test2->desc);
+
+ asp1 = make_aspath(t->test1->asdata, t->test1->len, 0);
+ asp2 = make_aspath(t->test2->asdata, t->test2->len, 0);
+
+ ascratch = aspath_aggregate(asp1, asp2);
+
+ if (!validate(ascratch, &t->sp))
+ printf(OK "\n");
+ else
+ printf(FAILED "!\n");
+
+ printf("\n");
+ aspath_unintern(&asp1);
+ aspath_unintern(&asp2);
+ aspath_free(ascratch);
+ /* aspath_unintern (ascratch);*/
}
/* cmp_left tests */
-static void
-cmp_test ()
+static void cmp_test()
{
- unsigned int i;
-#define CMP_TESTS_MAX \
- (sizeof(left_compare) / sizeof (struct compare_tests))
-
- for (i = 0; i < CMP_TESTS_MAX; i++)
- {
- struct test_segment *t1 = &test_segments[left_compare[i].test_index1];
- struct test_segment *t2 = &test_segments[left_compare[i].test_index2];
- struct aspath *asp1, *asp2;
-
- printf ("left cmp %s: %s\n", t1->name, t1->desc);
- printf ("and %s: %s\n", t2->name, t2->desc);
-
- asp1 = make_aspath (t1->asdata, t1->len, 0);
- asp2 = make_aspath (t2->asdata, t2->len, 0);
-
- if (aspath_cmp_left (asp1, asp2) != left_compare[i].shouldbe_cmp
- || aspath_cmp_left (asp2, asp1) != left_compare[i].shouldbe_cmp
- || aspath_cmp_left_confed (asp1, asp2)
- != left_compare[i].shouldbe_confed
- || aspath_cmp_left_confed (asp2, asp1)
- != left_compare[i].shouldbe_confed)
- {
- failed++;
- printf (FAILED "\n");
- printf ("result should be: cmp: %d, confed: %d\n",
- left_compare[i].shouldbe_cmp,
- left_compare[i].shouldbe_confed);
- printf ("got: cmp %d, cmp_confed: %d\n",
- aspath_cmp_left (asp1, asp2),
- aspath_cmp_left_confed (asp1, asp2));
- printf("path1: %s\npath2: %s\n", aspath_print (asp1),
- aspath_print (asp2));
- }
- else
- printf (OK "\n");
-
- printf ("\n");
- aspath_unintern (&asp1);
- aspath_unintern (&asp2);
- }
+ unsigned int i;
+#define CMP_TESTS_MAX (sizeof(left_compare) / sizeof(struct compare_tests))
+
+ for (i = 0; i < CMP_TESTS_MAX; i++) {
+ struct test_segment *t1 =
+ &test_segments[left_compare[i].test_index1];
+ struct test_segment *t2 =
+ &test_segments[left_compare[i].test_index2];
+ struct aspath *asp1, *asp2;
+
+ printf("left cmp %s: %s\n", t1->name, t1->desc);
+ printf("and %s: %s\n", t2->name, t2->desc);
+
+ asp1 = make_aspath(t1->asdata, t1->len, 0);
+ asp2 = make_aspath(t2->asdata, t2->len, 0);
+
+ if (aspath_cmp_left(asp1, asp2) != left_compare[i].shouldbe_cmp
+ || aspath_cmp_left(asp2, asp1)
+ != left_compare[i].shouldbe_cmp
+ || aspath_cmp_left_confed(asp1, asp2)
+ != left_compare[i].shouldbe_confed
+ || aspath_cmp_left_confed(asp2, asp1)
+ != left_compare[i].shouldbe_confed) {
+ failed++;
+ printf(FAILED "\n");
+ printf("result should be: cmp: %d, confed: %d\n",
+ left_compare[i].shouldbe_cmp,
+ left_compare[i].shouldbe_confed);
+ printf("got: cmp %d, cmp_confed: %d\n",
+ aspath_cmp_left(asp1, asp2),
+ aspath_cmp_left_confed(asp1, asp2));
+ printf("path1: %s\npath2: %s\n", aspath_print(asp1),
+ aspath_print(asp2));
+ } else
+ printf(OK "\n");
+
+ printf("\n");
+ aspath_unintern(&asp1);
+ aspath_unintern(&asp2);
+ }
}
-static int
-handle_attr_test (struct aspath_tests *t)
+static int handle_attr_test(struct aspath_tests *t)
{
- struct bgp bgp = { 0 };
- struct peer peer = { 0 };
- struct attr attr = { 0 };
- int ret;
- int initfail = failed;
- struct aspath *asp;
- size_t datalen;
-
- asp = make_aspath (t->segment->asdata, t->segment->len, 0);
-
- peer.ibuf = stream_new (BGP_MAX_PACKET_SIZE);
- peer.obuf = stream_fifo_new ();
- peer.bgp = &bgp;
- peer.host = (char *)"none";
- peer.fd = -1;
- peer.cap = t->cap;
-
- stream_write (peer.ibuf, t->attrheader, t->len);
- datalen = aspath_put (peer.ibuf, asp, t->as4 == AS4_DATA);
- if (t->old_segment)
- {
- char dummyaspath[] = { BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH,
- t->old_segment->len };
- stream_write (peer.ibuf, dummyaspath, sizeof (dummyaspath));
- stream_write (peer.ibuf, t->old_segment->asdata, t->old_segment->len);
- datalen += sizeof (dummyaspath) + t->old_segment->len;
- }
-
- ret = bgp_attr_parse (&peer, &attr, t->len + datalen, NULL, NULL);
-
- if (ret != t->result)
- {
- printf ("bgp_attr_parse returned %d, expected %d\n", ret, t->result);
- printf ("datalen %zd\n", datalen);
- failed++;
- }
- if (ret != 0)
- goto out;
-
- if (t->shouldbe && attr.aspath == NULL)
- {
- printf ("aspath is NULL, but should be: %s\n", t->shouldbe);
- failed++;
- }
- if (t->shouldbe && attr.aspath && strcmp (attr.aspath->str, t->shouldbe))
- {
- printf ("attr str and 'shouldbe' mismatched!\n"
- "attr str: %s\n"
- "shouldbe: %s\n",
- attr.aspath->str, t->shouldbe);
- failed++;
- }
- if (!t->shouldbe && attr.aspath)
- {
- printf ("aspath should be NULL, but is: %s\n", attr.aspath->str);
- failed++;
- }
+ struct bgp bgp = {0};
+ struct peer peer = {0};
+ struct attr attr = {0};
+ int ret;
+ int initfail = failed;
+ struct aspath *asp;
+ size_t datalen;
+
+ asp = make_aspath(t->segment->asdata, t->segment->len, 0);
+
+ peer.ibuf = stream_new(BGP_MAX_PACKET_SIZE);
+ peer.obuf = stream_fifo_new();
+ peer.bgp = &bgp;
+ peer.host = (char *)"none";
+ peer.fd = -1;
+ peer.cap = t->cap;
+
+ stream_write(peer.ibuf, t->attrheader, t->len);
+ datalen = aspath_put(peer.ibuf, asp, t->as4 == AS4_DATA);
+ if (t->old_segment) {
+ char dummyaspath[] = {BGP_ATTR_FLAG_TRANS, BGP_ATTR_AS_PATH,
+ t->old_segment->len};
+ stream_write(peer.ibuf, dummyaspath, sizeof(dummyaspath));
+ stream_write(peer.ibuf, t->old_segment->asdata,
+ t->old_segment->len);
+ datalen += sizeof(dummyaspath) + t->old_segment->len;
+ }
+
+ ret = bgp_attr_parse(&peer, &attr, t->len + datalen, NULL, NULL);
+
+ if (ret != t->result) {
+ printf("bgp_attr_parse returned %d, expected %d\n", ret,
+ t->result);
+ printf("datalen %zd\n", datalen);
+ failed++;
+ }
+ if (ret != 0)
+ goto out;
+
+ if (t->shouldbe && attr.aspath == NULL) {
+ printf("aspath is NULL, but should be: %s\n", t->shouldbe);
+ failed++;
+ }
+ if (t->shouldbe && attr.aspath
+ && strcmp(attr.aspath->str, t->shouldbe)) {
+ printf("attr str and 'shouldbe' mismatched!\n"
+ "attr str: %s\n"
+ "shouldbe: %s\n",
+ attr.aspath->str, t->shouldbe);
+ failed++;
+ }
+ if (!t->shouldbe && attr.aspath) {
+ printf("aspath should be NULL, but is: %s\n", attr.aspath->str);
+ failed++;
+ }
out:
- if (attr.aspath)
- aspath_unintern (&attr.aspath);
- if (asp)
- aspath_unintern (&asp);
- return failed - initfail;
+ if (attr.aspath)
+ aspath_unintern(&attr.aspath);
+ if (asp)
+ aspath_unintern(&asp);
+ return failed - initfail;
}
-static void
-attr_test (struct aspath_tests *t)
+static void attr_test(struct aspath_tests *t)
{
- printf ("%s\n", t->desc);
- printf ("%s\n\n", handle_attr_test (t) ? FAILED : OK);
+ printf("%s\n", t->desc);
+ printf("%s\n\n", handle_attr_test(t) ? FAILED : OK);
}
-int
-main (void)
+int main(void)
{
- int i = 0;
- qobj_init ();
- bgp_master_init (thread_master_create ());
- master = bm->master;
- bgp_option_set (BGP_OPT_NO_LISTEN);
- bgp_attr_init ();
-
- while (test_segments[i].name)
- {
- printf ("test %u\n", i);
- parse_test (&test_segments[i]);
- empty_prepend_test (&test_segments[i++]);
- }
-
- i = 0;
- while (prepend_tests[i].test1)
- {
- printf ("prepend test %u\n", i);
- prepend_test (&prepend_tests[i++]);
- }
-
- i = 0;
- while (aggregate_tests[i].test1)
- {
- printf ("aggregate test %u\n", i);
- aggregate_test (&aggregate_tests[i++]);
- }
-
- i = 0;
-
- while (reconcile_tests[i].test1)
- {
- printf ("reconcile test %u\n", i);
- as4_reconcile_test (&reconcile_tests[i++]);
- }
-
- i = 0;
-
- cmp_test();
-
- i = 0;
-
- empty_get_test();
-
- i = 0;
-
- while (aspath_tests[i].desc)
- {
- printf ("aspath_attr test %d\n", i);
- attr_test (&aspath_tests[i++]);
- }
-
- printf ("failures: %d\n", failed);
- printf ("aspath count: %ld\n", aspath_count());
-
- return (failed + aspath_count());
+ int i = 0;
+ qobj_init();
+ bgp_master_init(thread_master_create());
+ master = bm->master;
+ bgp_option_set(BGP_OPT_NO_LISTEN);
+ bgp_attr_init();
+
+ while (test_segments[i].name) {
+ printf("test %u\n", i);
+ parse_test(&test_segments[i]);
+ empty_prepend_test(&test_segments[i++]);
+ }
+
+ i = 0;
+ while (prepend_tests[i].test1) {
+ printf("prepend test %u\n", i);
+ prepend_test(&prepend_tests[i++]);
+ }
+
+ i = 0;
+ while (aggregate_tests[i].test1) {
+ printf("aggregate test %u\n", i);
+ aggregate_test(&aggregate_tests[i++]);
+ }
+
+ i = 0;
+
+ while (reconcile_tests[i].test1) {
+ printf("reconcile test %u\n", i);
+ as4_reconcile_test(&reconcile_tests[i++]);
+ }
+
+ i = 0;
+
+ cmp_test();
+
+ i = 0;
+
+ empty_get_test();
+
+ i = 0;
+
+ while (aspath_tests[i].desc) {
+ printf("aspath_attr test %d\n", i);
+ attr_test(&aspath_tests[i++]);
+ }
+
+ printf("failures: %d\n", failed);
+ printf("aspath count: %ld\n", aspath_count());
+
+ return (failed + aspath_count());
}