svn commit: r194864 - in projects/mesh11s: sbin/ifconfig sys/net80211

Rui Paulo rpaulo at FreeBSD.org
Wed Jun 24 17:31:38 UTC 2009


Author: rpaulo
Date: Wed Jun 24 17:31:37 2009
New Revision: 194864
URL: http://svn.freebsd.org/changeset/base/194864

Log:
  Retire the global mesh TTL and introduce a per vap TTL.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sbin/ifconfig/ifieee80211.c
  projects/mesh11s/sys/net80211/ieee80211_hwmp.c
  projects/mesh11s/sys/net80211/ieee80211_hwmp.h
  projects/mesh11s/sys/net80211/ieee80211_ioctl.h
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_output.c
  projects/mesh11s/sys/net80211/ieee80211_var.h

Modified: projects/mesh11s/sbin/ifconfig/ifieee80211.c
==============================================================================
--- projects/mesh11s/sbin/ifconfig/ifieee80211.c	Wed Jun 24 17:23:10 2009	(r194863)
+++ projects/mesh11s/sbin/ifconfig/ifieee80211.c	Wed Jun 24 17:31:37 2009	(r194864)
@@ -1828,6 +1828,12 @@ DECL_CMD_FUNC(set80211tdmabintval, val, 
 }
 
 static
+DECL_CMD_FUNC(set80211meshttl, val, d)
+{
+	set80211(s, IEEE80211_IOC_MESH_TTL, atoi(val), 0, NULL);
+}
+
+static
 DECL_CMD_FUNC(set80211meshforward, val, d)
 {
 	set80211(s, IEEE80211_IOC_MESH_FWRD, atoi(val), 0, NULL);
@@ -4772,6 +4778,9 @@ end:
 	}
 
 	if (opmode == IEEE80211_M_MBSS) {
+		if (get80211val(s, IEEE80211_IOC_MESH_TTL, &val) != -1) {
+			LINE_CHECK("meshttl %u", val);
+		}
 		if (get80211val(s, IEEE80211_IOC_MESH_AP, &val) != -1) {
 			if (val)
 				LINE_CHECK("meshpeering");
@@ -5185,6 +5194,7 @@ static struct cmd ieee80211_cmds[] = {
 	DEF_CMD_ARG("tdmaslotlen",	set80211tdmaslotlen),
 	DEF_CMD_ARG("tdmabintval",	set80211tdmabintval),
 
+	DEF_CMD_ARG("meshttl",		set80211meshttl),
 	DEF_CMD("meshforward",	1,	set80211meshforward),
 	DEF_CMD("-meshforward",	0,	set80211meshforward),
 	DEF_CMD("meshpeering",	1,	set80211meshpeering),

Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Wed Jun 24 17:23:10 2009	(r194863)
+++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Wed Jun 24 17:31:37 2009	(r194864)
@@ -150,8 +150,6 @@ SYSCTL_INT(_net_wlan_hwmp, OID_AUTO, roo
 
 MALLOC_DEFINE(M_80211_HWMP, "80211hwmp", "802.11 HWMP routing table");
 
-extern int	ieee80211_mesh_ttl;
-
 /*
  * Helper functions to manipulate the HWMP routing table.
  */
@@ -614,7 +612,7 @@ hwmp_recv_preq(struct ieee80211vap *vap,
 		 */
 		prep.prep_flags = 0;
 		prep.prep_hopcount = 0;
-		prep.prep_ttl = ieee80211_mesh_ttl;
+		prep.prep_ttl = vap->iv_meshttl;
 		IEEE80211_ADDR_COPY(prep.prep_targetaddr, preq->preq_origaddr);
 		prep.prep_targetseq = preq->preq_origseq;
 		prep.prep_lifetime = preq->preq_lifetime;
@@ -680,7 +678,7 @@ hwmp_recv_preq(struct ieee80211vap *vap,
 				    ether_sprintf(preq->preq_origaddr));
 				prep.prep_flags = 0;
 				prep.prep_hopcount = 0;
-				prep.prep_ttl = ieee80211_mesh_ttl;
+				prep.prep_ttl = vap->iv_meshttl;
 				IEEE80211_ADDR_COPY(&prep.prep_targetaddr,
 				    preq->preq_origaddr);
 				prep.prep_targetseq = fi->fi_seq;
@@ -940,7 +938,7 @@ hwmp_recv_rann(struct ieee80211vap *vap,
 		 */
 		preq.preq_flags = 0;
 		preq.preq_hopcount = 0;
-		preq.preq_ttl = ieee80211_mesh_ttl;
+		preq.preq_ttl = vap->iv_meshttl;
 		IEEE80211_ADDR_COPY(&preq.preq_origaddr,
 		    vap->iv_myaddr);
 		preq.preq_origseq = hs->hs_seq++;
@@ -1030,7 +1028,7 @@ ieee80211_hwmp_discover(struct ieee80211
 		 */
 		preq.preq_flags = 0;
 		preq.preq_hopcount = 0;
-		preq.preq_ttl = ieee80211_mesh_ttl;
+		preq.preq_ttl = vap->iv_meshttl;
 		preq.preq_id = fi->fi_preqid;
 		IEEE80211_ADDR_COPY(preq.preq_origaddr, vap->iv_myaddr);
 		preq.preq_origseq = fi->fi_seq;

Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_hwmp.h	Wed Jun 24 17:23:10 2009	(r194863)
+++ projects/mesh11s/sys/net80211/ieee80211_hwmp.h	Wed Jun 24 17:31:37 2009	(r194864)
@@ -62,6 +62,7 @@ struct ieee80211_hwmp_state {
 	struct timeval		hs_lastprep;	/* last time we sent a PREP */
 	struct timeval		hs_lastperr;	/* last time we sent a PERR */
 	struct mtx		hs_lock;	/* lock for the fi table */
+	int			hs_rootmode;	/* proactive HWMP */
 };
 
 void	ieee80211_hwmp_vattach(struct ieee80211vap *);

Modified: projects/mesh11s/sys/net80211/ieee80211_ioctl.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_ioctl.h	Wed Jun 24 17:23:10 2009	(r194863)
+++ projects/mesh11s/sys/net80211/ieee80211_ioctl.h	Wed Jun 24 17:31:37 2009	(r194864)
@@ -652,10 +652,11 @@ struct ieee80211req {
 #define	IEEE80211_IOC_GREENFIELD	112	/* Greenfield (on, off) */
 #define	IEEE80211_IOC_STBC		113	/* STBC Tx/RX (on, off) */
 
-#define	IEEE80211_IOC_MESH_ID		190	/* Mesh identifier */
+#define	IEEE80211_IOC_MESH_ID		190	/* mesh identifier */
 #define	IEEE80211_IOC_MESH_AP		191	/* accepting peerings */
 #define	IEEE80211_IOC_MESH_FWRD		192	/* forward frames */
 #define	IEEE80211_IOC_MESH_PROTO	193	/* mesh protocols */
+#define	IEEE80211_IOC_MESH_TTL		194	/* mesh TTL */
 #define	IEEE80211_IOC_HWMP_CMD		195	/* HWMP table commands */
 
 #define	IEEE80211_IOC_TDMA_SLOT		201	/* TDMA: assigned slot */

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Wed Jun 24 17:23:10 2009	(r194863)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Wed Jun 24 17:31:37 2009	(r194864)
@@ -90,12 +90,9 @@ static const int ieee80211_mesh_holdingt
 static const int ieee80211_mesh_confirmtimeout = 4000;
 #define	CONFIRM_TIMEOUT	msecs_to_ticks(ieee80211_mesh_confirmtimeout)
 static const int ieee80211_mesh_maxretries = 2;
-int		ieee80211_mesh_ttl = 31;
 
 SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, CTLFLAG_RD, 0,
     "IEEE 802.11s parameters");
-SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLTYPE_INT | CTLFLAG_RW,
-    &ieee80211_mesh_ttl, 0, "TTL for mesh packets");
 
 void
 ieee80211_mesh_attach(struct ieee80211com *ic)
@@ -109,7 +106,7 @@ ieee80211_mesh_detach(struct ieee80211co
 }
 
 static void
-mesh_detach_stoptimers(void *arg, struct ieee80211_node *ni)
+mesh_vdetach_stoptimers(void *arg, struct ieee80211_node *ni)
 {
 	callout_stop(&ni->ni_mltimer);
 }
@@ -118,7 +115,7 @@ mesh_detach_stoptimers(void *arg, struct
 static void
 mesh_vdetach(struct ieee80211vap *vap)
 {
-	ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_detach_stoptimers,
+	ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_vdetach_stoptimers,
 	    NULL);
 	ieee80211_hwmp_vdetach(vap);
 }
@@ -132,6 +129,7 @@ mesh_vattach(struct ieee80211vap *vap)
 	vap->iv_recv_mgmt = mesh_recv_mgmt;
 	vap->iv_meshseq = 0;
 	vap->iv_meshflags = (IEEE80211_MFLAGS_AP | IEEE80211_MFLAGS_FWRD);
+	vap->iv_meshttl = 31;	/* default TTL */
 	ieee80211_hwmp_vattach(vap);
 }
 
@@ -1571,6 +1569,9 @@ mesh_ioctl_get80211(struct ieee80211vap 
 	case IEEE80211_IOC_MESH_FWRD:
 		ireq->i_val = (vap->iv_meshflags & IEEE80211_MFLAGS_FWRD) != 0;
 		break;
+	case IEEE80211_IOC_MESH_TTL:
+		ireq->i_val = vap->iv_meshttl;
+		break;
 	default:
 		return ENOSYS;
 	}
@@ -1612,6 +1613,9 @@ mesh_ioctl_set80211(struct ieee80211vap 
 		else
 			vap->iv_meshflags &= ~IEEE80211_MFLAGS_FWRD;
 		break;
+	case IEEE80211_IOC_MESH_TTL:
+		vap->iv_meshttl = (uint8_t) ireq->i_val;
+		break;
 	default:
 		return ENOSYS;
 	}

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Wed Jun 24 17:23:10 2009	(r194863)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Wed Jun 24 17:31:37 2009	(r194864)
@@ -73,8 +73,6 @@ __FBSDID("$FreeBSD$");
 #define	ETHER_HEADER_COPY(dst, src) \
 	memcpy(dst, src, sizeof(struct ether_header))
 
-extern uint32_t ieee80211_mesh_ttl;
-
 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);
@@ -1470,7 +1468,7 @@ ieee80211_encap(struct ieee80211vap *vap
 			KASSERT(0, ("meshae %d", meshae));
 			break;
 		}
-		mc->mc_ttl = ieee80211_mesh_ttl;
+		mc->mc_ttl = vap->iv_meshttl;
 		seq = vap->iv_meshseq++;
 		mc->mc_seq[0] = seq & 0xff;
 		mc->mc_seq[1] = (seq >> 8) & 0xff;

Modified: projects/mesh11s/sys/net80211/ieee80211_var.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_var.h	Wed Jun 24 17:23:10 2009	(r194863)
+++ projects/mesh11s/sys/net80211/ieee80211_var.h	Wed Jun 24 17:31:37 2009	(r194864)
@@ -397,6 +397,7 @@ struct ieee80211vap {
 	int			iv_meshidlen;
 	uint8_t			iv_meshid[IEEE80211_MESHID_LEN];
 	uint32_t		iv_meshseq;	/* seq no for meshcntl */
+	uint8_t			iv_meshttl;	/* mesh ttl set in packets */
 #define	IEEE80211_MFLAGS_AP	0x01	/* accept peers */
 #define	IEEE80211_MFLAGS_MP	0x02	/* mesh portal role */
 #define	IEEE80211_MFLAGS_FWRD	0x04	/* forward packets */


More information about the svn-src-projects mailing list