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_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

View File

@@ -98,18 +98,41 @@ bgpq3_print_jprefix(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," %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
bgpq3_print_juniper_prefixlist(FILE* f, struct bgpq_expander* b)
{
printf("prefix-printer called\n");
sx_radix_tree_foreach(b->tree,bgpq3_print_jprefix,stdout);
fprintf(f,"policy-options {\nreplace:\n prefix-list %s {\n",
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;
};
@@ -118,6 +141,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);
};
return 0;
};

View File

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