1
0
mirror of https://github.com/bgp/bgpq4.git synced 2024-05-11 05:55:05 +00:00

ok, more or less works for small as-sets, not yet ready to big ones..

This commit is contained in:
snar
2007-03-23 12:47:28 +00:00
parent bbea84badd
commit 5742c3dfae
3 changed files with 40 additions and 6 deletions

View File

@@ -33,5 +33,11 @@ int bgpq_expander_add_asset(struct bgpq_expander* b, char* set);
int bgpq_expander_add_as(struct bgpq_expander* b, char* as); int bgpq_expander_add_as(struct bgpq_expander* b, char* as);
int bgpq_expander_add_prefix(struct bgpq_expander* b, char* prefix); int bgpq_expander_add_prefix(struct bgpq_expander* b, char* prefix);
int bgpq_expand(struct bgpq_expander* b);
int bgpq3_print_prefixlist(FILE* f, struct bgpq_expander* b);
int bgpq3_print_aspath(FILE* f, struct bgpq_expander* b);
#endif #endif

View File

@@ -98,18 +98,41 @@ bgpq3_print_jprefix(struct sx_radix_node* n, void* ff)
{ {
char prefix[128]; char prefix[128];
FILE* f=(FILE*)ff; FILE* f=(FILE*)ff;
if(n->isGlue) return;
if(!f) f=stdout; if(!f) f=stdout;
sx_prefix_snprintf(&n->prefix,prefix,sizeof(prefix)); sx_prefix_snprintf(&n->prefix,prefix,sizeof(prefix));
fprintf(f," %s; (%i)\n",prefix,n->isGlue); fprintf(f," %s;\n",prefix);
};
static char* bname=NULL;
void
bgpq3_print_cprefix(struct sx_radix_node* n, void* ff)
{
char prefix[128];
FILE* f=(FILE*)ff;
if(n->isGlue) return;
if(!f) f=stdout;
sx_prefix_snprintf(&n->prefix,prefix,sizeof(prefix));
fprintf(f,"ip prefix-list %s permit %s\n",bname?bname:"UNKNOWN",prefix);
}; };
int int
bgpq3_print_juniper_prefixlist(FILE* f, struct bgpq_expander* b) bgpq3_print_juniper_prefixlist(FILE* f, struct bgpq_expander* b)
{ {
printf("prefix-printer called\n"); fprintf(f,"policy-options {\nreplace:\n prefix-list %s {\n",
sx_radix_tree_foreach(b->tree,bgpq3_print_jprefix,stdout); b->name?b->name:"UNKNOWN");
sx_radix_tree_foreach(b->tree,bgpq3_print_jprefix,f);
fprintf(f," }\n}\n");
return 0;
};
int
bgpq3_print_cisco_prefixlist(FILE* f, struct bgpq_expander* b)
{
bname=b->name;
fprintf(f,"no ip prefix-list %s\n", bname);
sx_radix_tree_foreach(b->tree,bgpq3_print_cprefix,f);
return 0; return 0;
}; };
@@ -118,6 +141,7 @@ bgpq3_print_prefixlist(FILE* f, struct bgpq_expander* b)
{ {
switch(b->vendor) { switch(b->vendor) {
case V_JUNIPER: return bgpq3_print_juniper_prefixlist(f,b); case V_JUNIPER: return bgpq3_print_juniper_prefixlist(f,b);
case V_CISCO: return bgpq3_print_cisco_prefixlist(f,b);
}; };
return 0; return 0;
}; };

View File

@@ -17,6 +17,8 @@
#include "bgpq3.h" #include "bgpq3.h"
#include "sx_report.h" #include "sx_report.h"
int debug_expander=1;
int int
bgpq_expander_init(struct bgpq_expander* b, int af) bgpq_expander_init(struct bgpq_expander* b, int af)
{ {
@@ -30,6 +32,7 @@ bgpq_expander_init(struct bgpq_expander* b, int af)
b->family=af; b->family=af;
b->sources="ripe,radb,apnic"; b->sources="ripe,radb,apnic";
b->name="UNKNOWN";
b->aswidth=8; b->aswidth=8;
return 1; return 1;
@@ -113,7 +116,6 @@ bgpq_expanded_prefix(char* as, void* udata)
{ {
struct bgpq_expander* ex=(struct bgp_expander*)udata; struct bgpq_expander* ex=(struct bgp_expander*)udata;
if(!ex) return 0; if(!ex) return 0;
printf("expanded prefix %s\n", as);
bgpq_expander_add_prefix(ex,as); bgpq_expander_add_prefix(ex,as);
return 1; return 1;
}; };
@@ -130,6 +132,8 @@ bgpq_expand_radb(int fd, int (*callback)(char*, void*), void* udata,
vsnprintf(request,sizeof(request),fmt,ap); vsnprintf(request,sizeof(request),fmt,ap);
va_end(ap); va_end(ap);
SX_DEBUG(debug_expander,"expander: sending '%s'\n", request);
write(fd,request,strlen(request)); write(fd,request,strlen(request));
memset(request,0,sizeof(request)); memset(request,0,sizeof(request));
ret=read(fd,request,sizeof(request)-1); ret=read(fd,request,sizeof(request)-1);