From 2dc67ae2bfd8b757d9aef5b4bcfc7a6239e0fc9e Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 9 Aug 2010 23:10:58 +0200 Subject: [PATCH] carp: add carp_group_demote_adj() --- sys/netinet/ip_carp.c | 23 +++++++++++++++++++++++ sys/netinet/ip_carp.h | 1 + 2 files changed, 24 insertions(+) diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c index 46a55bebc5..dc933ea430 100644 --- a/sys/netinet/ip_carp.c +++ b/sys/netinet/ip_carp.c @@ -2058,6 +2058,29 @@ carp_set_state(struct carp_softc *sc, int state) rt_ifmsg(cifp); } +void +carp_group_demote_adj(struct ifnet *ifp, int adj) +{ + struct ifg_list *ifgl; + int *dm; + + TAILQ_FOREACH(ifgl, &ifp->if_groups, ifgl_next) { + if (!strcmp(ifgl->ifgl_group->ifg_group, IFG_ALL)) + continue; + dm = &ifgl->ifgl_group->ifg_carp_demoted; + + if (*dm + adj >= 0) + *dm += adj; + else + *dm = 0; + + if (adj > 0 && *dm == 1) + carp_send_ad_all(); + CARP_LOG("%s demoted group %s to %d", ifp->if_xname, + ifgl->ifgl_group->ifg_group, *dm); + } +} + void carp_carpdev_state(void *v) { diff --git a/sys/netinet/ip_carp.h b/sys/netinet/ip_carp.h index 4b5517b72b..656eb05888 100644 --- a/sys/netinet/ip_carp.h +++ b/sys/netinet/ip_carp.h @@ -170,6 +170,7 @@ struct ifcarpvhaddr { #ifdef _KERNEL void carp_carpdev_state(void *); +void carp_group_demote_adj(struct ifnet *, int); void carp_input(struct mbuf *, ...); int carp6_input(struct mbuf **, int *, int); int carp_output(struct ifnet *, struct mbuf *, struct sockaddr *, -- 2.41.0