summaryrefslogtreecommitdiffstats
path: root/nest
diff options
context:
space:
mode:
Diffstat (limited to 'nest')
-rw-r--r--nest/config.Y20
-rw-r--r--nest/rt-dev.c20
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,
};