diff options
author | Maria Matejka <mq@ucw.cz> | 2023-01-31 13:07:46 +0100 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2023-02-02 15:57:21 +0100 |
commit | c354e8f4c199ca7dec441394156d18badac71b81 (patch) | |
tree | d5a0c43215603bef858699aa49678e27894893f8 /proto | |
parent | 64e08775251960a2b009fc35a084610c9c4c4909 (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.c | 2 | ||||
-rw-r--r-- | proto/bfd/bfd.c | 2 | ||||
-rw-r--r-- | proto/bgp/bgp.c | 2 | ||||
-rw-r--r-- | proto/ospf/ospf.c | 4 | ||||
-rw-r--r-- | proto/perf/perf.c | 2 | ||||
-rw-r--r-- | proto/radv/radv.c | 4 | ||||
-rw-r--r-- | proto/rip/rip.c | 4 | ||||
-rw-r--r-- | proto/static/static.c | 2 |
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; |