diff --git a/doc/bird.conf.example b/doc/bird.conf.example index f700f2fb..c1bce781 100644 --- a/doc/bird.conf.example +++ b/doc/bird.conf.example @@ -27,8 +27,8 @@ protocol kernel { persist; # Don't remove routes on bird shutdown scan time 20; # Scan kernel routing table every 20 seconds # async off; # Netlink: Disable asynchronous events -# input filter sink; -# output filter okay; +# import none; # Default is import all + export all; # Default is export none } protocol device { diff --git a/nest/config.Y b/nest/config.Y index c855f093..c535e9ec 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -17,9 +17,10 @@ void rt_dev_add_iface(char *); CF_DECLS CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT) -CF_KEYWORDS(INTERFACE, INPUT, OUTPUT, FILTER) +CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE) %type idval +%type imexport CF_GRAMMAR @@ -67,8 +68,14 @@ proto_item: | DEBUG expr { this_proto->debug = $2; } | DEBUG ALL { this_proto->debug = ~0; } | DEBUG OFF { this_proto->debug = 0; } - | INPUT FILTER filter { this_proto->in_filter = $3; } - | OUTPUT FILTER filter { this_proto->out_filter = $3; } + | IMPORT imexport { this_proto->in_filter = $2; } + | EXPORT imexport { this_proto->out_filter = $2; } + ; + +imexport: + FILTER filter { $$ = $2; } + | ALL { $$ = FILTER_ACCEPT; } + | NONE { $$ = FILTER_REJECT; } ; /* Direct device route protocol */ diff --git a/nest/proto.c b/nest/proto.c index f230c8ef..ad4aa11d 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -111,6 +111,7 @@ proto_config_new(struct protocol *pr, unsigned size) c->proto = pr; c->debug = pr->debug; c->name = pr->name; + c->out_filter = FILTER_REJECT; return c; } @@ -247,9 +248,9 @@ protos_dump_all(void) debug(" protocol %s (pri=%d): state %s/%s\n", p->name, p->proto->priority, p_states[p->proto_state], c_states[p->core_state]); if (p->in_filter) - debug("\tInput filter: %s\n", p->in_filter->name); - if (p->out_filter) - debug("\tOutput filter: %s\n", p->out_filter->name); + debug("\tInput filter: %s\n", filter_name(p->in_filter)); + if (p->out_filter != FILTER_REJECT) + debug("\tOutput filter: %s\n", filter_name(p->out_filter)); if (p->disabled) debug("\tDISABLED\n"); else if (p->proto->dump)