summaryrefslogtreecommitdiff
path: root/proto/radv
diff options
context:
space:
mode:
Diffstat (limited to 'proto/radv')
-rw-r--r--proto/radv/radv.c16
-rw-r--r--proto/radv/radv.h8
2 files changed, 19 insertions, 5 deletions
diff --git a/proto/radv/radv.c b/proto/radv/radv.c
index 01cb6899..42d4bff9 100644
--- a/proto/radv/radv.c
+++ b/proto/radv/radv.c
@@ -318,6 +318,19 @@ radv_reconfigure(struct proto *p, struct proto_config *c)
return 1;
}
+static void
+radv_copy_config(struct proto_config *dest, struct proto_config *src)
+{
+ struct radv_config *d = (struct radv_config *) dest;
+ struct radv_config *s = (struct radv_config *) src;
+
+ /* We clean up patt_list, ifaces are non-sharable */
+ init_list(&d->patt_list);
+
+ /* We copy pref_list, shallow copy suffices */
+ cfg_copy_list(&d->iface_list, &s->iface_list, sizeof(struct iface_patt));
+}
+
struct protocol proto_radv = {
.name = "RAdv",
@@ -325,5 +338,6 @@ struct protocol proto_radv = {
.init = radv_init,
.start = radv_start,
.shutdown = radv_shutdown,
- .reconfigure = radv_reconfigure
+ .reconfigure = radv_reconfigure,
+ .copy_config = radv_copy_config
};
diff --git a/proto/radv/radv.h b/proto/radv/radv.h
index fe121f26..12bfe42e 100644
--- a/proto/radv/radv.h
+++ b/proto/radv/radv.h
@@ -46,14 +46,14 @@
struct radv_config
{
struct proto_config c;
- list patt_list; /* List of iface configs */
- list pref_list; /* Global list of prefix configs */
+ list patt_list; /* List of iface configs (struct radv_iface_config) */
+ list pref_list; /* Global list of prefix configs (struct radv_prefix_config) */
};
struct radv_iface_config
{
struct iface_patt i;
- list pref_list; /* Local list of prefix configs */
+ list pref_list; /* Local list of prefix configs (struct radv_prefix_config) */
u32 min_ra_int; /* Standard options from RFC 4261 */
u32 max_ra_int;
@@ -64,7 +64,7 @@ struct radv_iface_config
u32 link_mtu;
u32 reachable_time;
u32 retrans_timer;
- u32 current_hop_limit;
+ u32 current_hop_limit;
u32 default_lifetime;
};