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