svn commit: r277530 - head/sys/netinet

Will Andrews will at FreeBSD.org
Thu Jan 22 17:09:55 UTC 2015


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");


More information about the svn-src-all mailing list