From owner-svn-src-projects@FreeBSD.ORG Tue Jun 9 23:30:19 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 32197106566B; Tue, 9 Jun 2009 23:30:19 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2070D8FC08; Tue, 9 Jun 2009 23:30:19 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n59NUJxU087313; Tue, 9 Jun 2009 23:30:19 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n59NUIGo087312; Tue, 9 Jun 2009 23:30:18 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200906092330.n59NUIGo087312@svn.freebsd.org> From: Rui Paulo Date: Tue, 9 Jun 2009 23:30:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193872 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2009 23:30:19 -0000 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; } }