summaryrefslogtreecommitdiffstats
path: root/nest
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1999-04-05 22:15:31 +0200
committerMartin Mares <mj@ucw.cz>1999-04-05 22:15:31 +0200
commit5056c559c4eb253a4eee10cf35b694faec5265eb (patch)
tree404a26d748f50a40514f0d0ed448034b7dfa396b /nest
parent63a381dbf5e37c2740982d07988cea983c699816 (diff)
downloadbird-5056c559c4eb253a4eee10cf35b694faec5265eb.tar
bird-5056c559c4eb253a4eee10cf35b694faec5265eb.zip
Changed syntax of attaching filters to protocols to hopefully the final
version: EXPORT <filter-spec> for outbound routes (i.e., those announced by BIRD to the rest of the world). IMPORT <filter-spec> for inbound routes (i.e., those imported by BIRD from the rest of the world). where <filter-spec> is one of: ALL pass all routes NONE drop all routes FILTER <name> use named filter FILTER { <filter> } use explicitly defined filter For all protocols, the default is IMPORT ALL, EXPORT NONE. This includes the kernel protocol, so that you need to add EXPORT ALL to get the previous configuration of kernel syncer (as usually, see doc/bird.conf.example for a bird.conf example :)).
Diffstat (limited to 'nest')
-rw-r--r--nest/config.Y13
-rw-r--r--nest/proto.c7
2 files changed, 14 insertions, 6 deletions
diff --git a/nest/config.Y b/nest/config.Y
index c855f09..c535e9e 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 <i> idval
+%type <f> 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 f230c8e..ad4aa11 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)