summaryrefslogtreecommitdiff
path: root/proto
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2023-01-31 13:07:46 +0100
committerMaria Matejka <mq@ucw.cz>2023-02-02 15:57:21 +0100
commitc354e8f4c199ca7dec441394156d18badac71b81 (patch)
treed5a0c43215603bef858699aa49678e27894893f8 /proto
parent64e08775251960a2b009fc35a084610c9c4c4909 (diff)
Interface updates are asynchronous
Instead of propagating interface updates as they are loaded from kernel, they are enqueued and all the notifications are called from a protocol-specific event. This change allows to break the locking loop between protocols and interfaces. Anyway, this change is based on v2 branch to keep the changes between v2 and v3 smaller.
Diffstat (limited to 'proto')
-rw-r--r--proto/babel/babel.c2
-rw-r--r--proto/bfd/bfd.c2
-rw-r--r--proto/bgp/bgp.c2
-rw-r--r--proto/ospf/ospf.c4
-rw-r--r--proto/perf/perf.c2
-rw-r--r--proto/radv/radv.c4
-rw-r--r--proto/rip/rip.c4
-rw-r--r--proto/static/static.c2
8 files changed, 11 insertions, 11 deletions
diff --git a/proto/babel/babel.c b/proto/babel/babel.c
index e1b31e86..15135922 100644
--- a/proto/babel/babel.c
+++ b/proto/babel/babel.c
@@ -2424,7 +2424,7 @@ babel_init(struct proto_config *CF)
proto_configure_channel(P, &p->ip4_channel, cf->ip4_channel);
proto_configure_channel(P, &p->ip6_channel, cf->ip6_channel);
- P->if_notify = babel_if_notify;
+ P->iface_sub.if_notify = babel_if_notify;
P->rt_notify = babel_rt_notify;
P->preexport = babel_preexport;
P->rte_better = babel_rte_better;
diff --git a/proto/bfd/bfd.c b/proto/bfd/bfd.c
index 69e42f3d..b2655952 100644
--- a/proto/bfd/bfd.c
+++ b/proto/bfd/bfd.c
@@ -1012,7 +1012,7 @@ bfd_init(struct proto_config *c)
{
struct proto *p = proto_new(c);
- p->neigh_notify = bfd_neigh_notify;
+ p->iface_sub.neigh_notify = bfd_neigh_notify;
return p;
}
diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c
index 5b0569ae..3531ce51 100644
--- a/proto/bgp/bgp.c
+++ b/proto/bgp/bgp.c
@@ -1686,7 +1686,7 @@ bgp_init(struct proto_config *CF)
P->rt_notify = bgp_rt_notify;
P->preexport = bgp_preexport;
- P->neigh_notify = bgp_neigh_notify;
+ P->iface_sub.neigh_notify = bgp_neigh_notify;
P->reload_routes = bgp_reload_routes;
P->feed_begin = bgp_feed_begin;
P->feed_end = bgp_feed_end;
diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c
index ad4b2d14..77a14b7a 100644
--- a/proto/ospf/ospf.c
+++ b/proto/ospf/ospf.c
@@ -370,8 +370,8 @@ ospf_init(struct proto_config *CF)
P->main_channel = proto_add_channel(P, proto_cf_main_channel(CF));
P->rt_notify = ospf_rt_notify;
- P->if_notify = ospf_if_notify;
- P->ifa_notify = cf->ospf2 ? ospf_ifa_notify2 : ospf_ifa_notify3;
+ P->iface_sub.if_notify = ospf_if_notify;
+ P->iface_sub.ifa_notify = cf->ospf2 ? ospf_ifa_notify2 : ospf_ifa_notify3;
P->preexport = ospf_preexport;
P->reload_routes = ospf_reload_routes;
P->feed_begin = ospf_feed_begin;
diff --git a/proto/perf/perf.c b/proto/perf/perf.c
index 75e405f0..8941d582 100644
--- a/proto/perf/perf.c
+++ b/proto/perf/perf.c
@@ -266,7 +266,7 @@ perf_init(struct proto_config *CF)
switch (p->mode) {
case PERF_MODE_IMPORT:
- P->ifa_notify = perf_ifa_notify;
+ P->iface_sub.ifa_notify = perf_ifa_notify;
break;
case PERF_MODE_EXPORT:
P->rt_notify = perf_rt_notify;
diff --git a/proto/radv/radv.c b/proto/radv/radv.c
index ee1da36c..8a7440e6 100644
--- a/proto/radv/radv.c
+++ b/proto/radv/radv.c
@@ -579,8 +579,8 @@ radv_init(struct proto_config *CF)
P->preexport = radv_preexport;
P->rt_notify = radv_rt_notify;
- P->if_notify = radv_if_notify;
- P->ifa_notify = radv_ifa_notify;
+ P->iface_sub.if_notify = radv_if_notify;
+ P->iface_sub.ifa_notify = radv_ifa_notify;
return P;
}
diff --git a/proto/rip/rip.c b/proto/rip/rip.c
index 93b0d528..abbd83f2 100644
--- a/proto/rip/rip.c
+++ b/proto/rip/rip.c
@@ -1135,9 +1135,9 @@ rip_init(struct proto_config *CF)
P->main_channel = proto_add_channel(P, proto_cf_main_channel(CF));
- P->if_notify = rip_if_notify;
+ P->iface_sub.if_notify = rip_if_notify;
P->rt_notify = rip_rt_notify;
- P->neigh_notify = rip_neigh_notify;
+ P->iface_sub.neigh_notify = rip_neigh_notify;
P->reload_routes = rip_reload_routes;
P->rte_better = rip_rte_better;
P->rte_igp_metric = rip_rte_igp_metric;
diff --git a/proto/static/static.c b/proto/static/static.c
index bb93305e..ba0984b5 100644
--- a/proto/static/static.c
+++ b/proto/static/static.c
@@ -463,7 +463,7 @@ static_init(struct proto_config *CF)
P->main_channel = proto_add_channel(P, proto_cf_main_channel(CF));
- P->neigh_notify = static_neigh_notify;
+ P->iface_sub.neigh_notify = static_neigh_notify;
P->reload_routes = static_reload_routes;
P->rte_better = static_rte_better;
P->rte_mergable = static_rte_mergable;