git: 5ee92cbd82d0 - main - carp: don't chain call vrrp_send_ad via carp_send_ad
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 08 May 2024 11:19:55 UTC
The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=5ee92cbd82d0afb65bc5feabf29d8417307d38ad commit 5ee92cbd82d0afb65bc5feabf29d8417307d38ad Author: Gleb Smirnoff <glebius@FreeBSD.org> AuthorDate: 2024-04-29 22:33:51 +0000 Commit: Kristof Provost <kp@FreeBSD.org> CommitDate: 2024-05-08 11:19:04 +0000 carp: don't chain call vrrp_send_ad via carp_send_ad Provide inline send_ad_locked() that switches between protocol specific sending function. Rename carp_send_ad() to carp_callout() to avoid getting lost in all these multiple foo_send_ad. No functional change intended. Reviewed by: kp Differential Revision: https://reviews.freebsd.org/D45036 --- sys/netinet/ip_carp.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c index cf7c8d03ca73..332e76b492fa 100644 --- a/sys/netinet/ip_carp.c +++ b/sys/netinet/ip_carp.c @@ -350,7 +350,6 @@ static void carp_setrun(struct carp_softc *, sa_family_t); static void carp_master_down(void *); static void carp_master_down_locked(struct carp_softc *, const char* reason); -static void carp_send_ad(void *); static void carp_send_ad_locked(struct carp_softc *); static void vrrp_send_ad_locked(struct carp_softc *); static void carp_addroute(struct carp_softc *); @@ -1087,6 +1086,19 @@ carp_prepare_ad(struct mbuf *m, struct carp_softc *sc, struct carp_header *ch) return (carp_tag(sc, m)); } +static inline void +send_ad_locked(struct carp_softc *sc) +{ + switch (sc->sc_version) { + case CARP_VERSION_CARP: + carp_send_ad_locked(sc); + break; + case CARP_VERSION_VRRPv3: + vrrp_send_ad_locked(sc); + break; + } +} + /* * To avoid LORs and possible recursions this function shouldn't * be called directly, but scheduled via taskqueue. @@ -1103,7 +1115,7 @@ carp_send_ad_all(void *ctx __unused, int pending __unused) if (sc->sc_state == MASTER) { CARP_LOCK(sc); CURVNET_SET(sc->sc_carpdev->if_vnet); - carp_send_ad_locked(sc); + send_ad_locked(sc); CURVNET_RESTORE(); CARP_UNLOCK(sc); } @@ -1113,7 +1125,7 @@ carp_send_ad_all(void *ctx __unused, int pending __unused) /* Send a periodic advertisement, executed in callout context. */ static void -carp_send_ad(void *v) +carp_callout(void *v) { struct carp_softc *sc = v; struct epoch_tracker et; @@ -1121,7 +1133,7 @@ carp_send_ad(void *v) NET_EPOCH_ENTER(et); CARP_LOCK_ASSERT(sc); CURVNET_SET(sc->sc_carpdev->if_vnet); - carp_send_ad_locked(sc); + send_ad_locked(sc); CURVNET_RESTORE(); CARP_UNLOCK(sc); NET_EPOCH_EXIT(et); @@ -1205,11 +1217,7 @@ carp_send_ad_locked(struct carp_softc *sc) NET_EPOCH_ASSERT(); CARP_LOCK_ASSERT(sc); - - if (sc->sc_version == CARP_VERSION_VRRPv3) { - vrrp_send_ad_locked(sc); - return; - } + MPASS(sc->sc_version == CARP_VERSION_CARP); advskew = DEMOTE_ADVSKEW(sc); tv.tv_sec = sc->sc_advbase; @@ -1339,7 +1347,7 @@ carp_send_ad_locked(struct carp_softc *sc) #endif /* INET6 */ resched: - callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), carp_send_ad, sc); + callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), carp_callout, sc); } static void @@ -1520,7 +1528,7 @@ vrrp_send_ad_locked(struct carp_softc *sc) resched: callout_reset(&sc->sc_ad_tmo, sc->sc_vrrp_adv_inter * hz / 100, - carp_send_ad, sc); + carp_callout, sc); } static void @@ -1760,7 +1768,7 @@ carp_master_down_locked(struct carp_softc *sc, const char *reason) switch (sc->sc_state) { case BACKUP: carp_set_state(sc, MASTER, reason); - carp_send_ad_locked(sc); + send_ad_locked(sc); #ifdef INET carp_send_arp(sc); #endif @@ -1852,11 +1860,11 @@ carp_setrun(struct carp_softc *sc, sa_family_t af) tv.tv_sec = sc->sc_advbase; tv.tv_usec = sc->sc_advskew * 1000000 / 256; callout_reset(&sc->sc_ad_tmo, tvtohz(&tv), - carp_send_ad, sc); + carp_callout, sc); } else { callout_reset(&sc->sc_ad_tmo, sc->sc_vrrp_adv_inter * hz / 100, - carp_send_ad, sc); + carp_callout, sc); } break; }