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

Rui Paulo rpaulo at FreeBSD.org
Sun Jun 21 16:10:41 UTC 2009


Author: rpaulo
Date: Sun Jun 21 16:10:40 2009
New Revision: 194589
URL: http://svn.freebsd.org/changeset/base/194589

Log:
  Fix a bug in an edge case of peer link establishment and add some
  KASSERTS.
  
  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	Sun Jun 21 15:40:39 2009	(r194588)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun Jun 21 16:10:40 2009	(r194589)
@@ -655,6 +655,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 		    vap->iv_meshflags & IEEE80211_MFLAGS_AP &&
 		    ni->ni_mlstate == IEEE80211_NODE_MESH_IDLE) {
 			union ieee80211_send_action_args vargs;
+
 			ni->ni_mlpid = mesh_generateid(vap);
 			mesh_linkchange(ni, IEEE80211_NODE_MESH_OPENSNT);
 			vargs.fixedarg[0] = ni->ni_mlpid;
@@ -859,8 +860,8 @@ mesh_recv_action(struct ieee80211_node *
 			case IEEE80211_NODE_MESH_OPENSNT:
 			case IEEE80211_NODE_MESH_OPENRCV:
 			case IEEE80211_NODE_MESH_CONFIRMRECV:
-				vargs.fixedarg[0] = ni->ni_mllid;
-				vargs.fixedarg[1] = ni->ni_mlpid;
+				vargs.fixedarg[0] = ni->ni_mlpid;
+				vargs.fixedarg[1] = ni->ni_mllid;
 				vargs.fixedarg[2] =
 				    IEEE80211_REASON_PEER_LINK_CANCELED;
 				ieee80211_send_action(ni,
@@ -936,10 +937,10 @@ mesh_recv_action(struct ieee80211_node *
 				/* NB: don't setup/clear any timeout */
 				break;
 			case IEEE80211_NODE_MESH_CONFIRMRECV:
-				if (ni->ni_mllid != meshpeer->peer_linkid ||
-				    ni->ni_mlpid != meshpeer->peer_llinkid) {
-					vargs.fixedarg[0] = ni->ni_mllid;
-					vargs.fixedarg[1] = ni->ni_mlpid;
+				if (ni->ni_mlpid != meshpeer->peer_linkid ||
+				    ni->ni_mllid != meshpeer->peer_llinkid) {
+					vargs.fixedarg[0] = ni->ni_mlpid;
+					vargs.fixedarg[1] = ni->ni_mllid;
 					vargs.fixedarg[2] =
 					    IEEE80211_REASON_PEER_LINK_CANCELED;
 					ieee80211_send_action(ni,
@@ -1383,6 +1384,7 @@ uint8_t *
 ieee80211_add_meshpeer(uint8_t *frm, uint8_t subtype, uint16_t localid,
     uint16_t peerid, uint16_t reason)
 {
+	KASSERT(localid != 0, ("localid == 0"));
 
 	*frm++ = IEEE80211_ELEMID_MESHPEER;
 	switch (subtype) {
@@ -1392,6 +1394,7 @@ ieee80211_add_meshpeer(uint8_t *frm, uin
 		ADDSHORT(frm, localid);	/* local ID */
 		break;
 	case IEEE80211_MESH_PEER_LINK_CONFIRM:
+		KASSERT(peerid != 0, ("sending peer confirm without peer id"));
 		*frm++ = 5;		/* length */
 		*frm++ = subtype;
 		ADDSHORT(frm, localid);	/* local ID */


More information about the svn-src-projects mailing list