diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2011-11-07 00:31:23 +0100 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2011-11-07 00:31:23 +0100 |
commit | a7f23f581f5e3efe92ec97dfca7d01c66f31ab04 (patch) | |
tree | 3a8f7cffb7abce83b7bce8be87d21be8a2fbff72 /proto/rip | |
parent | 74add5df17c386bd109ebea7b1dac04d1651ae51 (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.Y | 2 | ||||
-rw-r--r-- | proto/rip/rip.c | 14 |
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 }; |