summaryrefslogtreecommitdiff
path: root/proto/rip
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2011-11-07 00:31:23 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2011-11-07 00:31:23 +0100
commita7f23f581f5e3efe92ec97dfca7d01c66f31ab04 (patch)
tree3a8f7cffb7abce83b7bce8be87d21be8a2fbff72 /proto/rip
parent74add5df17c386bd109ebea7b1dac04d1651ae51 (diff)
Implements protocol templates.
Based on the patch from Alexander V. Chernikov. Extended to support almost all protocols. Uses 'protocol bgp NAME from TEMPLATE { ... }' syntax.
Diffstat (limited to 'proto/rip')
-rw-r--r--proto/rip/config.Y2
-rw-r--r--proto/rip/rip.c14
2 files changed, 15 insertions, 1 deletions
diff --git a/proto/rip/config.Y b/proto/rip/config.Y
index 2df0c5c8..cd4f30e7 100644
--- a/proto/rip/config.Y
+++ b/proto/rip/config.Y
@@ -37,7 +37,7 @@ CF_GRAMMAR
CF_ADDTO(proto, rip_cfg '}' { RIP_CFG->passwords = get_passwords(); } )
rip_cfg_start: proto_start RIP {
- this_proto = proto_config_new(&proto_rip, sizeof(struct rip_proto_config));
+ this_proto = proto_config_new(&proto_rip, sizeof(struct rip_proto_config), $1);
rip_init_config(RIP_CFG);
}
;
diff --git a/proto/rip/rip.c b/proto/rip/rip.c
index 1266380d..543aa306 100644
--- a/proto/rip/rip.c
+++ b/proto/rip/rip.c
@@ -1015,6 +1015,19 @@ rip_reconfigure(struct proto *p, struct proto_config *c)
sizeof(struct rip_proto_config) - generic);
}
+static void
+rip_copy_config(struct proto_config *dest, struct proto_config *src)
+{
+ /* Shallow copy of everything */
+ proto_copy_rest(dest, src, sizeof(struct rip_proto_config));
+
+ /* We clean up iface_list, ifaces are non-sharable */
+ init_list(&((struct rip_proto_config *) dest)->iface_list);
+
+ /* Copy of passwords is OK, it just will be replaced in dest when used */
+}
+
+
struct protocol proto_rip = {
name: "RIP",
template: "rip%d",
@@ -1026,4 +1039,5 @@ struct protocol proto_rip = {
dump: rip_dump,
start: rip_start,
reconfigure: rip_reconfigure,
+ copy_config: rip_copy_config
};