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

Rui Paulo rpaulo at FreeBSD.org
Thu Apr 30 14:21:51 UTC 2009


Author: rpaulo
Date: Thu Apr 30 14:21:50 2009
New Revision: 191691
URL: http://svn.freebsd.org/changeset/base/191691

Log:
  Don't forget to send our rates on mesh peer action frames.
  
  Sponsored by:	The FreeBSD Foundation

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

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Thu Apr 30 13:53:00 2009	(r191690)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Thu Apr 30 14:21:50 2009	(r191691)
@@ -69,6 +69,10 @@ __FBSDID("$FreeBSD$");
 static int ieee80211_fragment(struct ieee80211vap *, struct mbuf *,
 	u_int hdrsize, u_int ciphdrsize, u_int mtu);
 static	void ieee80211_tx_mgt_cb(struct ieee80211_node *, void *, int);
+static	uint8_t *
+	ieee80211_add_rates(uint8_t *, const struct ieee80211_rateset *);
+static	uint8_t *
+	ieee80211_add_xrates(uint8_t *, const struct ieee80211_rateset *);
 
 #ifdef IEEE80211_DEBUG
 /*
@@ -546,6 +550,7 @@ ieee80211_send_action(struct ieee80211_n
 	struct ieee80211vap *vap = ni->ni_vap;
 	struct ieee80211com *ic = ni->ni_ic;
 	struct ieee80211_bpf_params params;
+	const struct ieee80211_rateset *rs;
 	struct mbuf *m;
 	uint8_t *frm;
 	uint16_t baparamset;
@@ -573,13 +578,11 @@ ieee80211_send_action(struct ieee80211_n
 		break;
 	case IEEE80211_ACTION_CAT_MESHPEERING:
 		addsize += sizeof(uint16_t);		/* capabilities */
+		addsize += 2 + IEEE80211_RATE_SIZE;
+		addsize += 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
 		addsize += 2 + vap->iv_meshidlen;	/* Mesh ID */
 		addsize += sizeof(struct ieee80211_meshconf_ie);
-		/* On Open frames, the peer link ID is not sent */
-		if (action == IEEE80211_ACTION_MESHPEERING_OPEN)
-			addsize += sizeof(struct ieee80211_meshpeer_ie) - 2;
-		else
-			addsize += sizeof(struct ieee80211_meshpeer_ie);
+		addsize += sizeof(struct ieee80211_meshpeer_ie);
 		break;
 	}
 	m = ieee80211_getmgtframe(&frm,
@@ -657,7 +660,7 @@ ieee80211_send_action(struct ieee80211_n
 		}
 		break;
 	case IEEE80211_ACTION_CAT_MESHPEERING:
-
+		rs = ieee80211_get_suprates(ic, ic->ic_curchan);
 		switch (action) {
 		case IEEE80211_ACTION_MESHPEERING_OPEN:
 			IEEE80211_NOTE(vap,
@@ -665,6 +668,8 @@ ieee80211_send_action(struct ieee80211_n
 			    "send PEER OPEN action: lid %x", args[0]);
 			*frm++ = 0;	/* capabilites */
 			*frm++ = 0;
+			frm = ieee80211_add_rates(frm, rs);
+			frm = ieee80211_add_xrates(frm, rs);
 			frm = ieee80211_add_meshid(frm, vap);
 			frm = ieee80211_add_meshconf(frm, vap);
 			*frm++ = IEEE80211_ELEMID_MESHPEER;
@@ -683,6 +688,8 @@ ieee80211_send_action(struct ieee80211_n
 			*frm++ = 0;
 			*frm++ = 0;	/* AID */
 			*frm++ = 0;
+			frm = ieee80211_add_rates(frm, rs);
+			frm = ieee80211_add_xrates(frm, rs);
 			frm = ieee80211_add_meshid(frm, vap);
 			frm = ieee80211_add_meshconf(frm, vap);
 			*frm++ = IEEE80211_ELEMID_MESHPEER;


More information about the svn-src-projects mailing list