summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/bird.conf.example4
-rw-r--r--nest/config.Y13
-rw-r--r--nest/proto.c7
3 files changed, 16 insertions, 8 deletions
diff --git a/doc/bird.conf.example b/doc/bird.conf.example
index f700f2f..c1bce78 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 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)