IOS XR prefix-sets now supported too

This commit is contained in:
snar
2011-07-15 11:48:34 +00:00
parent 10d26c6b26
commit 078b680d57
4 changed files with 62 additions and 4 deletions

View File

@@ -264,6 +264,7 @@ checkSon:
static char* bname=NULL;
static int needscomma=0;
void
bgpq3_print_cprefix(struct sx_radix_node* n, void* ff)
@@ -292,6 +293,31 @@ checkSon:
bgpq3_print_cprefix(n->son,ff);
};
void
bgpq3_print_cprefixxr(struct sx_radix_node* n, void* ff)
{
char prefix[128];
FILE* f=(FILE*)ff;
if(!f) f=stdout;
if(n->isGlue) goto checkSon;
sx_prefix_snprintf(&n->prefix,prefix,sizeof(prefix));
if(n->isAggregate) {
if(n->aggregateLow>n->prefix.masklen) {
fprintf(f,"%s%s ge %u le %u",
needscomma?",\n ":" ", prefix, n->aggregateLow,n->aggregateHi);
} else {
fprintf(f,"%s%s le %u", needscomma?",\n ":" ", prefix,
n->aggregateHi);
};
} else {
fprintf(f,"%s%s", needscomma?",\n ":" ", prefix);
};
needscomma=1;
checkSon:
if(n->son)
bgpq3_print_cprefixxr(n->son,ff);
};
void
bgpq3_print_ceacl(struct sx_radix_node* n, void* ff)
{
@@ -402,6 +428,16 @@ bgpq3_print_cisco_prefixlist(FILE* f, struct bgpq_expander* b)
return 0;
};
int
bgpq3_print_ciscoxr_prefixlist(FILE* f, struct bgpq_expander* b)
{
bname=b->name;
fprintf(f,"prefix-set %s\n", bname?bname:"NN");
sx_radix_tree_foreach(b->tree,bgpq3_print_cprefixxr,f);
fprintf(f, "\nend-set\n");
return 0;
};
int
bgpq3_print_cisco_eacl(FILE* f, struct bgpq_expander* b)
{
@@ -418,6 +454,7 @@ bgpq3_print_prefixlist(FILE* f, struct bgpq_expander* b)
switch(b->vendor) {
case V_JUNIPER: return bgpq3_print_juniper_prefixlist(f,b);
case V_CISCO: return bgpq3_print_cisco_prefixlist(f,b);
case V_CISCO_XR: return bgpq3_print_ciscoxr_prefixlist(f,b);
};
return 0;
};
@@ -428,6 +465,7 @@ bgpq3_print_eacl(FILE* f, struct bgpq_expander* b)
switch(b->vendor) {
case V_JUNIPER: return bgpq3_print_juniper_routefilter(f,b);
case V_CISCO: return bgpq3_print_cisco_eacl(f,b);
case V_CISCO_XR: sx_report(SX_FATAL, "unreachable point\n");
};
return 0;
};