Author: will
Date: Thu Jan 22 17:09:54 2015
New Revision: 277530
URL: https://svnweb.freebsd.org/changeset/base/277530

Log:
  Improve CARP logging so that all state transitions are logged.
  
  sys/netinet/ip_carp.c:
        Add a "reason" string parameter to carp_set_state() and
        carp_master_down_locked() allowing more specific logging
        information to be passed into these apis.
  
        Refactor existing state transition logging into a single
        log call in carp_set_state().
  
        Update all calls to carp_set_state() and
        carp_master_down_locked() to pass an appropriate reason
        string.  For state transitions that were previously logged,
        the output should be unchanged.
  
  Submitted by: gibbs (original), asomers (updated)
  MFC after:    1 week
  Sponsored by: Spectra Logic
  MFSpectraBSD: 1039697 on 2014/02/11 (original)
                1049992 on 2014/03/21 (updated)

Modified:
  head/sys/netinet/ip_carp.c

Modified: head/sys/netinet/ip_carp.c
==============================================================================
--- head/sys/netinet/ip_carp.c  Thu Jan 22 14:49:36 2015        (r277529)
+++ head/sys/netinet/ip_carp.c  Thu Jan 22 17:09:54 2015        (r277530)
@@ -304,11 +304,12 @@ static void       carp_destroy(struct carp_sof
 static struct carp_if
                *carp_alloc_if(struct ifnet *);
 static void    carp_free_if(struct carp_if *);
-static void    carp_set_state(struct carp_softc *, int);
+static void    carp_set_state(struct carp_softc *, int, const char* reason);
 static void    carp_sc_state(struct carp_softc *);
 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 *);
+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    carp_addroute(struct carp_softc *);
@@ -654,11 +655,8 @@ carp_input_c(struct mbuf *m, struct carp
                if (timevalcmp(&sc_tv, &ch_tv, >) ||
                    timevalcmp(&sc_tv, &ch_tv, ==)) {
                        callout_stop(&sc->sc_ad_tmo);
-                       CARP_LOG("VHID %u@%s: MASTER -> BACKUP "
-                           "(more frequent advertisement received)\n",
-                           sc->sc_vhid,
-                           sc->sc_carpdev->if_xname);
-                       carp_set_state(sc, BACKUP);
+                       carp_set_state(sc, BACKUP,
+                           "more frequent advertisement received");
                        carp_setrun(sc, 0);
                        carp_delroute(sc);
                }
@@ -669,11 +667,8 @@ carp_input_c(struct mbuf *m, struct carp
                 * and this one claims to be slower, treat him as down.
                 */
                if (V_carp_preempt && timevalcmp(&sc_tv, &ch_tv, <)) {
-                       CARP_LOG("VHID %u@%s: BACKUP -> MASTER "
-                           "(preempting a slower master)\n",
-                           sc->sc_vhid,
-                           sc->sc_carpdev->if_xname);
-                       carp_master_down_locked(sc);
+                       carp_master_down_locked(sc,
+                           "preempting a slower master");
                        break;
                }
 
@@ -684,11 +679,7 @@ carp_input_c(struct mbuf *m, struct carp
                 */
                sc_tv.tv_sec = sc->sc_advbase * 3;
                if (timevalcmp(&sc_tv, &ch_tv, <)) {
-                       CARP_LOG("VHID %u@%s: BACKUP -> MASTER "
-                           "(master timed out)\n",
-                           sc->sc_vhid,
-                           sc->sc_carpdev->if_xname);
-                       carp_master_down_locked(sc);
+                       carp_master_down_locked(sc, "master will time out");
                        break;
                }
 
@@ -1153,10 +1144,7 @@ carp_master_down(void *v)
 
        CURVNET_SET(sc->sc_carpdev->if_vnet);
        if (sc->sc_state == BACKUP) {
-               CARP_LOG("VHID %u@%s: BACKUP -> MASTER (master down)\n",
-                   sc->sc_vhid,
-                   sc->sc_carpdev->if_xname);
-               carp_master_down_locked(sc);
+               carp_master_down_locked(sc, "master timed out");
        }
        CURVNET_RESTORE();
 
@@ -1164,14 +1152,14 @@ carp_master_down(void *v)
 }
 
 static void
-carp_master_down_locked(struct carp_softc *sc)
+carp_master_down_locked(struct carp_softc *sc, const char *reason)
 {
 
        CARP_LOCK_ASSERT(sc);
 
        switch (sc->sc_state) {
        case BACKUP:
-               carp_set_state(sc, MASTER);
+               carp_set_state(sc, MASTER, reason);
                carp_send_ad_locked(sc);
 #ifdef INET
                carp_send_arp(sc);
@@ -1212,10 +1200,7 @@ carp_setrun(struct carp_softc *sc, sa_fa
 
        switch (sc->sc_state) {
        case INIT:
-               CARP_LOG("VHID %u@%s: INIT -> BACKUP\n",
-                   sc->sc_vhid,
-                   sc->sc_carpdev->if_xname);
-               carp_set_state(sc, BACKUP);
+               carp_set_state(sc, BACKUP, "initialization complete");
                carp_setrun(sc, 0);
                break;
        case BACKUP:
@@ -1717,12 +1702,12 @@ carp_ioctl(struct ifreq *ifr, u_long cmd
                        switch (carpr.carpr_state) {
                        case BACKUP:
                                callout_stop(&sc->sc_ad_tmo);
-                               carp_set_state(sc, BACKUP);
+                               carp_set_state(sc, BACKUP, "SIOCSVH");
                                carp_setrun(sc, 0);
                                carp_delroute(sc);
                                break;
                        case MASTER:
-                               carp_master_down_locked(sc);
+                               carp_master_down_locked(sc, "SIOCSVH");
                                break;
                        default:
                                break;
@@ -1964,7 +1949,7 @@ carp_detach_locked(struct ifaddr *ifa)
 }
 
 static void
-carp_set_state(struct carp_softc *sc, int state)
+carp_set_state(struct carp_softc *sc, int state, const char *reason)
 {
 
        CARP_LOCK_ASSERT(sc);
@@ -1973,10 +1958,14 @@ carp_set_state(struct carp_softc *sc, in
                const char *carp_states[] = { CARP_STATES };
                char subsys[IFNAMSIZ+5];
 
-               sc->sc_state = state;
-
                snprintf(subsys, IFNAMSIZ+5, "%u@%s", sc->sc_vhid,
                    sc->sc_carpdev->if_xname);
+
+               CARP_LOG("%s: %s -> %s (%s)\n", subsys,
+                   carp_states[sc->sc_state], carp_states[state], reason);
+
+               sc->sc_state = state;
+
                devctl_notify("CARP", subsys, carp_states[state], NULL);
        }
 }
@@ -2010,13 +1999,13 @@ carp_sc_state(struct carp_softc *sc)
 #ifdef INET6
                callout_stop(&sc->sc_md6_tmo);
 #endif
-               carp_set_state(sc, INIT);
+               carp_set_state(sc, INIT, "hw interface down");
                carp_setrun(sc, 0);
                if (!sc->sc_suppress)
                        carp_demote_adj(V_carp_ifdown_adj, "interface down");
                sc->sc_suppress = 1;
        } else {
-               carp_set_state(sc, INIT);
+               carp_set_state(sc, INIT, "hw interface up");
                carp_setrun(sc, 0);
                if (sc->sc_suppress)
                        carp_demote_adj(-V_carp_ifdown_adj, "interface up");
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to