From 8492a3907dfe69b6f5c06d21558b37944b6a2b0a Mon Sep 17 00:00:00 2001 From: Igor Putovny Date: Mon, 14 Jul 2025 13:25:07 +0200 Subject: [PATCH] Add evpn_if_notify() and refactor starting procedures --- proto/evpn/evpn.c | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/proto/evpn/evpn.c b/proto/evpn/evpn.c index 04df39c07..921b370b2 100644 --- a/proto/evpn/evpn.c +++ b/proto/evpn/evpn.c @@ -424,6 +424,26 @@ evpn_rt_notify(struct proto *P, struct channel *c0 UNUSED, net *net, rte *new, r } } +static void +evpn_if_notify(struct proto *P, unsigned flags, struct iface *iface) +{ + struct evpn_proto *p = SKIP_BACK(struct evpn_proto, p, P); + struct evpn_encap *encap = evpn_get_encap(p); + + if (flags & IF_IGNORE) + return; + + if (!(flags & (IF_CHANGE_UP | IF_CHANGE_DOWN))) + return; + + if (iface != encap->tunnel_dev) + return; + + if (flags & IF_CHANGE_UP) + proto_notify_state(&p->p, PS_UP); + else if (flags & IF_CHANGE_DOWN) + proto_notify_state(&p->p, PS_STOP); +} static int evpn_preexport(struct channel *C, rte *e) @@ -858,6 +878,7 @@ evpn_init(struct proto_config *CF) proto_configure_channel(P, &P->mpls_channel, proto_cf_find_channel(CF, NET_MPLS)); P->rt_notify = evpn_rt_notify; + P->if_notify = evpn_if_notify; P->preexport = evpn_preexport; P->reload_routes = evpn_reload_routes; P->feed_end = evpn_feed_end; @@ -866,6 +887,17 @@ evpn_init(struct proto_config *CF) return P; } +static void +evpn_started(struct evpn_proto *p) +{ + proto_notify_state(&p->p, PS_START); + + evpn_announce_imet(p, EVPN_ROOT_VLAN(p), 1); + + WALK_LIST_(struct evpn_vlan, v, p->vlans) + evpn_announce_imet(p, v, 1); +} + static int evpn_start(struct proto *P) { @@ -904,15 +936,9 @@ evpn_start(struct proto *P) if (P->vrf_set) P->mpls_map->vrf_iface = P->vrf; - proto_notify_state(P, PS_UP); - - evpn_announce_imet(p, EVPN_ROOT_VLAN(p), 1); - - struct evpn_vlan *v; - WALK_LIST(v, p->vlans) - evpn_announce_imet(p, v, 1); + evpn_started(p); - return PS_UP; + return PS_START; } static int -- 2.47.2