From c354e8f4c199ca7dec441394156d18badac71b81 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Tue, 31 Jan 2023 13:07:46 +0100 Subject: 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. --- proto/babel/babel.c | 2 +- proto/bfd/bfd.c | 2 +- proto/bgp/bgp.c | 2 +- proto/ospf/ospf.c | 4 ++-- proto/perf/perf.c | 2 +- proto/radv/radv.c | 4 ++-- proto/rip/rip.c | 4 ++-- proto/static/static.c | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) (limited to 'proto') 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; -- cgit v1.2.3