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(+), 0 deletions(-) diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c index 46a55be..dc933ea 100644 --- a/sys/netinet/ip_carp.c +++ b/sys/netinet/ip_carp.c @@ -2059,6 +2059,29 @@ carp_set_state(struct carp_softc *sc, int state) } 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) { struct carp_if *cif = v; diff --git a/sys/netinet/ip_carp.h b/sys/netinet/ip_carp.h index 4b5517b..656eb05 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 *, -- 1.7.7.2