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:
6
bgpq3.h
6
bgpq3.h
@@ -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
|
||||
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user