diff options
Diffstat (limited to 'nest')
-rw-r--r-- | nest/config.Y | 20 | ||||
-rw-r--r-- | nest/rt-dev.c | 20 |
2 files changed, 15 insertions, 25 deletions
diff --git a/nest/config.Y b/nest/config.Y index 8300132..61a12ca 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -16,7 +16,7 @@ void rt_dev_add_iface(char *); CF_DECLS -CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DEVICE) +CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT) CF_KEYWORDS(INTERFACE, INPUT, OUTPUT, FILTER) %type <i> idval @@ -44,7 +44,7 @@ proto_start: PROTOCOL proto_name: /* EMPTY */ { - struct symbol *s = cf_default_name(this_proto->proto->name); + struct symbol *s = cf_default_name(this_proto->proto->name, &this_proto->proto->name_counter); s->class = SYM_PROTO; s->def = this_proto; this_proto->name = s->name; @@ -71,24 +71,30 @@ proto_item: | OUTPUT FILTER filter { this_proto->out_filter = $3; } ; -/* Device protocol */ +/* Direct device route protocol */ CF_ADDTO(proto, dev_proto '}') -dev_proto_start: proto_start DEVICE { - if (!(this_proto = cf_dev_proto)) cf_error("Device protocol already defined"); - cf_dev_proto = NULL; +dev_proto_start: proto_start DIRECT { + struct rt_dev_config *p = proto_config_new(&proto_device, sizeof(struct rt_dev_config)); + struct iface_patt *k = cfg_alloc(sizeof(struct iface_patt)); + this_proto = &p->c; + p->c.preference = DEF_PREF_DIRECT; + init_list(&p->iface_list); + k->pattern = "*"; + add_tail(&p->iface_list, &k->n); } ; dev_proto: - dev_proto_start '{' + dev_proto_start proto_name '{' | dev_proto proto_item ';' | dev_proto dev_iface_list ';' ; dev_iface_list: INTERFACE TEXT { + /* FIXME: Beware of obscure semantics. */ init_list(&((struct rt_dev_config *) this_proto)->iface_list); rt_dev_add_iface($2); } diff --git a/nest/rt-dev.c b/nest/rt-dev.c index fcaabd8..c122b96 100644 --- a/nest/rt-dev.c +++ b/nest/rt-dev.c @@ -18,8 +18,6 @@ #include "conf/conf.h" #include "lib/resource.h" -struct proto_config *cf_dev_proto; - static void dev_if_notify(struct proto *p, unsigned c, struct iface *new, struct iface *old) { @@ -77,22 +75,8 @@ dev_init(struct proto_config *c) return p; } -static void -dev_preconfig(struct protocol *x, struct config *c) -{ - struct rt_dev_config *p = proto_config_new(&proto_device, sizeof(struct rt_dev_config)); - struct iface_patt *k = cfg_alloc(sizeof(struct iface_patt)); - - cf_dev_proto = &p->c; - p->c.preference = DEF_PREF_DIRECT; - init_list(&p->iface_list); - k->pattern = "*"; - add_tail(&p->iface_list, &k->n); -} - struct protocol proto_device = { - name: "Device", - priority: 100, - preconfig: dev_preconfig, + name: "Direct", + priority: 90, init: dev_init, }; |