diff options
author | glebius <glebius@FreeBSD.org> | 2014-02-22 19:20:40 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2014-02-22 19:20:40 +0000 |
commit | 0380a02726e6ee78228ba2e9979e0afadbb2097a (patch) | |
tree | 132919f241c3aafb9642cd2249cb2b4605ceb44d | |
parent | f9012da3847fff7a5c4b095adf8899aebb5c0d79 (diff) | |
download | FreeBSD-src-0380a02726e6ee78228ba2e9979e0afadbb2097a.zip FreeBSD-src-0380a02726e6ee78228ba2e9979e0afadbb2097a.tar.gz |
Improve logging of send errors, reporting error code and interface.
Reduce code duplication between INET and INET6.
Tested by: Lytochkin Boris <lytboris gmail.com>
-rw-r--r-- | sys/netinet/ip_carp.c | 71 |
1 files changed, 33 insertions, 38 deletions
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c index b6931a0..c6499bc 100644 --- a/sys/netinet/ip_carp.c +++ b/sys/netinet/ip_carp.c @@ -764,6 +764,35 @@ carp_send_ad(void *v) } static void +carp_send_ad_error(struct carp_softc *sc, int error) +{ + + if (error) { + if (sc->sc_sendad_errors < INT_MAX) + sc->sc_sendad_errors++; + if (sc->sc_sendad_errors == CARP_SENDAD_MAX_ERRORS) { + static const char fmt[] = "send error %d on %s"; + char msg[sizeof(fmt) + IFNAMSIZ]; + + sprintf(msg, fmt, error, sc->sc_carpdev->if_xname); + carp_demote_adj(V_carp_senderr_adj, msg); + } + sc->sc_sendad_success = 0; + } else { + if (sc->sc_sendad_errors >= CARP_SENDAD_MAX_ERRORS && + ++sc->sc_sendad_success >= CARP_SENDAD_MIN_SUCCESS) { + static const char fmt[] = "send ok on %s"; + char msg[sizeof(fmt) + IFNAMSIZ]; + + sprintf(msg, fmt, sc->sc_carpdev->if_xname); + carp_demote_adj(-V_carp_senderr_adj, msg); + sc->sc_sendad_errors = 0; + } else + sc->sc_sendad_errors = 0; + } +} + +static void carp_send_ad_locked(struct carp_softc *sc) { struct carp_header ch; @@ -839,25 +868,8 @@ carp_send_ad_locked(struct carp_softc *sc) CARPSTATS_INC(carps_opackets); - if (ip_output(m, NULL, NULL, IP_RAWOUTPUT, - &sc->sc_carpdev->if_carp->cif_imo, NULL)) { - if (sc->sc_sendad_errors < INT_MAX) - sc->sc_sendad_errors++; - if (sc->sc_sendad_errors == CARP_SENDAD_MAX_ERRORS) - carp_demote_adj(V_carp_senderr_adj, - "send error"); - sc->sc_sendad_success = 0; - } else { - if (sc->sc_sendad_errors >= CARP_SENDAD_MAX_ERRORS) { - if (++sc->sc_sendad_success >= - CARP_SENDAD_MIN_SUCCESS) { - carp_demote_adj(-V_carp_senderr_adj, - "send ok"); - sc->sc_sendad_errors = 0; - } - } else - sc->sc_sendad_errors = 0; - } + carp_send_ad_error(sc, ip_output(m, NULL, NULL, IP_RAWOUTPUT, + &sc->sc_carpdev->if_carp->cif_imo, NULL)); } #endif /* INET */ #ifdef INET6 @@ -913,25 +925,8 @@ carp_send_ad_locked(struct carp_softc *sc) CARPSTATS_INC(carps_opackets6); - if (ip6_output(m, NULL, NULL, 0, - &sc->sc_carpdev->if_carp->cif_im6o, NULL, NULL)) { - if (sc->sc_sendad_errors < INT_MAX) - sc->sc_sendad_errors++; - if (sc->sc_sendad_errors == CARP_SENDAD_MAX_ERRORS) - carp_demote_adj(V_carp_senderr_adj, - "send6 error"); - sc->sc_sendad_success = 0; - } else { - if (sc->sc_sendad_errors >= CARP_SENDAD_MAX_ERRORS) { - if (++sc->sc_sendad_success >= - CARP_SENDAD_MIN_SUCCESS) { - carp_demote_adj(-V_carp_senderr_adj, - "send6 ok"); - sc->sc_sendad_errors = 0; - } - } else - sc->sc_sendad_errors = 0; - } + carp_send_ad_error(sc, ip6_output(m, NULL, NULL, 0, + &sc->sc_carpdev->if_carp->cif_im6o, NULL, NULL)); } #endif /* INET6 */ |