svn commit: r193872 - projects/mesh11s/sys/net80211

Rui Paulo rpaulo at FreeBSD.org
Tue Jun 9 23:30:19 UTC 2009


Author: rpaulo
Date: Tue Jun  9 23:30:18 2009
New Revision: 193872
URL: http://svn.freebsd.org/changeset/base/193872

Log:
  Factorize common link change code into a common function
  mesh_linkchange(). Should remove some KB from debug kernels and makes
  the code cleaner.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Tue Jun  9 23:24:04 2009	(r193871)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Tue Jun  9 23:30:18 2009	(r193872)
@@ -65,6 +65,8 @@ __FBSDID("$FreeBSD$");
 
 static void	mesh_vattach(struct ieee80211vap *);
 static int	mesh_newstate(struct ieee80211vap *, enum ieee80211_state, int);
+static inline void	mesh_linkchange(struct ieee80211_node *,
+    enum ieee80211_mesh_mlstate);
 static int	mesh_input(struct ieee80211_node *, struct mbuf *, int, int);
 static void	mesh_recv_mgmt(struct ieee80211_node *, struct mbuf *, int,
 		    int, int);
@@ -93,15 +95,6 @@ SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, C
 SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLTYPE_INT | CTLFLAG_RW,
     &ieee80211_mesh_ttl, 0, "TTL for mesh packets");
 
-static const char *nodemeshstates[] = {
-	"IDLE",
-	"OPEN SENT",
-	"OPEN RECEIVED",
-	"CONFIRM RECEIVED",
-	"ESTABLISHED",
-	"HOLDING"
-};
-
 void
 ieee80211_mesh_attach(struct ieee80211com *ic)
 {
@@ -225,6 +218,30 @@ doprint(struct ieee80211vap *vap, int su
 	return 1;
 }
 
+/*
+ * Helper function to nore the Mesh Peer Link FSM change.
+ */
+static inline void
+mesh_linkchange(struct ieee80211_node *ni, enum ieee80211_mesh_mlstate state)
+{
+	struct ieee80211vap *vap = ni->ni_vap;
+#ifdef IEEE80211_DEBUG
+	static const char *meshlinkstates[] = {
+		[IEEE80211_NODE_MESH_IDLE]		= "IDLE",
+		[IEEE80211_NODE_MESH_OPENSNT]		= "OPEN SENT",
+		[IEEE80211_NODE_MESH_OPENRCV]		= "OPEN RECEIVED",
+		[IEEE80211_NODE_MESH_CONFIRMRECV]	= "CONFIRM RECEIVED",
+		[IEEE80211_NODE_MESH_ESTABLISHED]	= "ESTABLISHED",
+		[IEEE80211_NODE_MESH_HOLDING]		= "HOLDING"
+	};
+#endif
+	ni->ni_mlstate = state;
+	IEEE80211_NOTE(vap, IEEE80211_MSG_MESH,
+	    ni, "peer link: switching to state %s",
+	    meshlinkstates[ni->ni_mlstate]);
+
+}
+
 static int
 mesh_input(struct ieee80211_node *ni, struct mbuf *m, int rssi, int noise)
 {
@@ -280,8 +297,8 @@ mesh_input(struct ieee80211_node *ni, st
 		if (ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED) {
 			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
 			    ni->ni_macaddr, NULL,
-			    "peer link not yet established (%s)",
-			    nodemeshstates[ni->ni_mlstate]);
+			    "peer link not yet established (%d)",
+			    ni->ni_mlstate);
 		}	
 		if (dir != IEEE80211_FC1_DIR_FROMDS &&
 		    dir != IEEE80211_FC1_DIR_DSTODS) {
@@ -523,11 +540,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 		    ni->ni_mlstate == IEEE80211_NODE_MESH_IDLE) {
 			union ieee80211_send_action_args vargs;
 			get_random_bytes(&ni->ni_mlpid, 2);
-			ni->ni_mlstate = IEEE80211_NODE_MESH_OPENSNT;
-			IEEE80211_NOTE(vap,
-			    IEEE80211_MSG_MESH,
-			    ni, "peer link: switching to state %s",
-			    nodemeshstates[ni->ni_mlstate]);
+			mesh_linkchange(ni, IEEE80211_NODE_MESH_OPENSNT);
 			vargs.fixedarg[0] = ni->ni_mlpid;
 			ieee80211_send_action(ni,
 			    IEEE80211_ACTION_CAT_MESHPEERING,
@@ -733,11 +746,8 @@ mesh_recv_action(struct ieee80211_node *
 				    IEEE80211_ACTION_CAT_MESHPEERING,
 				    IEEE80211_ACTION_MESHPEERING_CLOSE,
 				    vargs);
-				ni->ni_mlstate = IEEE80211_NODE_MESH_HOLDING;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
+				mesh_linkchange(ni,
+				    IEEE80211_NODE_MESH_HOLDING);
 				mesh_peer_timeout_setup(ni);
 				break;
 			}
@@ -750,11 +760,8 @@ mesh_recv_action(struct ieee80211_node *
 			    "recv PEER OPEN, lid 0x%x", meshpeer->peer_llinkid);
 			switch (ni->ni_mlstate) {
 			case IEEE80211_NODE_MESH_IDLE:
-				ni->ni_mlstate = IEEE80211_NODE_MESH_OPENRCV;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
+				mesh_linkchange(ni,
+				    IEEE80211_NODE_MESH_OPENRCV);
 				ni->ni_mllid = meshpeer->peer_llinkid;
 				get_random_bytes(&ni->ni_mlpid, 2);
 				vargs.fixedarg[0] = ni->ni_mlpid;
@@ -782,12 +789,9 @@ mesh_recv_action(struct ieee80211_node *
 				    vargs);
 				break;
 			case IEEE80211_NODE_MESH_OPENSNT:
-				ni->ni_mlstate = IEEE80211_NODE_MESH_OPENRCV;
+				mesh_linkchange(ni,
+				    IEEE80211_NODE_MESH_OPENRCV);
 				ni->ni_mllid = meshpeer->peer_llinkid;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
 				vargs.fixedarg[0] = ni->ni_mlpid;
 				vargs.fixedarg[1] = ni->ni_mllid;
 				ieee80211_send_action(ni,
@@ -797,12 +801,8 @@ mesh_recv_action(struct ieee80211_node *
 				/* NB: don't setup/clear any timeout */
 				break;
 			case IEEE80211_NODE_MESH_CONFIRMRECV:
-				ni->ni_mlstate =
-				    IEEE80211_NODE_MESH_ESTABLISHED;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
+				mesh_linkchange(ni,
+				    IEEE80211_NODE_MESH_ESTABLISHED);
 				ni->ni_mllid = meshpeer->peer_llinkid;
 				vargs.fixedarg[0] = ni->ni_mlpid;
 				vargs.fixedarg[1] = ni->ni_mllid;
@@ -839,21 +839,13 @@ mesh_recv_action(struct ieee80211_node *
 			    meshpeer->peer_llinkid, meshpeer->peer_linkid);
 			switch (ni->ni_mlstate) {
 			case IEEE80211_NODE_MESH_OPENRCV:
-				ni->ni_mlstate =
-				    IEEE80211_NODE_MESH_ESTABLISHED;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
+				mesh_linkchange(ni, 
+				    IEEE80211_NODE_MESH_ESTABLISHED);
 				mesh_peer_timeout_stop(ni);
 				break;
 			case IEEE80211_NODE_MESH_OPENSNT:
-				ni->ni_mlstate =
-				    IEEE80211_NODE_MESH_CONFIRMRECV;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
+				mesh_linkchange(ni,
+				    IEEE80211_NODE_MESH_CONFIRMRECV);
 				break;
 			case IEEE80211_NODE_MESH_HOLDING:
 				vargs.fixedarg[0] = ni->ni_mllid;
@@ -893,19 +885,12 @@ mesh_recv_action(struct ieee80211_node *
 				    IEEE80211_ACTION_CAT_MESHPEERING,
 				    IEEE80211_ACTION_MESHPEERING_CLOSE,
 				    vargs);
-				ni->ni_mlstate = IEEE80211_NODE_MESH_HOLDING;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
+				mesh_linkchange(ni,
+				    IEEE80211_NODE_MESH_HOLDING);
 				mesh_peer_timeout_setup(ni);
 				break;
 			case IEEE80211_NODE_MESH_HOLDING:
-				ni->ni_mlstate = IEEE80211_NODE_MESH_IDLE;
-				IEEE80211_NOTE(vap,
-				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %s",
-				    nodemeshstates[ni->ni_mlstate]);
+				mesh_linkchange(ni, IEEE80211_NODE_MESH_IDLE);
 				mesh_peer_timeout_setup(ni);
 				break;
 			}
@@ -1008,8 +993,8 @@ mesh_peer_timeout_cb(void *arg)
 
 	IEEE80211_NOTE(vap,
 	    IEEE80211_MSG_MESH,
-	    ni, "mesh link timeout, state %s, retry counter %d",
-	    nodemeshstates[ni->ni_mlstate], ni->ni_mlrcnt);
+	    ni, "mesh link timeout, state %d, retry counter %d",
+	    ni->ni_mlstate, ni->ni_mlrcnt);
 	
 	switch (ni->ni_mlstate) {
 	case IEEE80211_NODE_MESH_IDLE:
@@ -1024,11 +1009,7 @@ mesh_peer_timeout_cb(void *arg)
 			    IEEE80211_ACTION_CAT_MESHPEERING,
 			    IEEE80211_ACTION_MESHPEERING_CLOSE, vargs);
 			ni->ni_mlrcnt = 0;
-			ni->ni_mlstate = IEEE80211_NODE_MESH_HOLDING;
-			IEEE80211_NOTE(vap,
-			    IEEE80211_MSG_MESH,
-			    ni, "peer link: switching to state %s",
-			    nodemeshstates[ni->ni_mlstate]);
+			mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
 			mesh_peer_timeout_setup(ni);
 		} else {
 			vargs.fixedarg[0] = ni->ni_mlpid;
@@ -1048,11 +1029,7 @@ mesh_peer_timeout_cb(void *arg)
 			    IEEE80211_ACTION_CAT_MESHPEERING,
 			    IEEE80211_ACTION_MESHPEERING_CLOSE, vargs);
 			ni->ni_mlrcnt = 0;
-			ni->ni_mlstate = IEEE80211_NODE_MESH_HOLDING;
-			IEEE80211_NOTE(vap,
-			    IEEE80211_MSG_MESH,
-			    ni, "peer link: switching to state %s",
-			    nodemeshstates[ni->ni_mlstate]);
+			mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
 			mesh_peer_timeout_setup(ni);
 		} else {
 			ni->ni_mlrcnt++;
@@ -1060,11 +1037,7 @@ mesh_peer_timeout_cb(void *arg)
 		}
 		break;
 	case IEEE80211_NODE_MESH_HOLDING:
-		ni->ni_mlstate = IEEE80211_NODE_MESH_IDLE;
-		IEEE80211_NOTE(vap,
-		    IEEE80211_MSG_MESH,
-		    ni, "peer link: switching to state %s",
-		    nodemeshstates[ni->ni_mlstate]);
+		mesh_linkchange(ni, IEEE80211_NODE_MESH_IDLE);
 		break;
 	}
 }


More information about the svn-src-projects mailing list