Author: glebius
Date: Sat Feb 22 19:20:40 2014
New Revision: 262341
URL: http://svnweb.freebsd.org/changeset/base/262341

Log:
  Improve logging of send errors, reporting error code and interface.
  Reduce code duplication between INET and INET6.
  
  Tested by:    Lytochkin Boris <lytboris gmail.com>

Modified:
  head/sys/netinet/ip_carp.c

Modified: head/sys/netinet/ip_carp.c
==============================================================================
--- head/sys/netinet/ip_carp.c  Sat Feb 22 19:10:58 2014        (r262340)
+++ head/sys/netinet/ip_carp.c  Sat Feb 22 19:20:40 2014        (r262341)
@@ -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 *s
 
                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 *s
 
                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 */
 
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to