svn commit: r191355 - projects/mesh11s/sbin/ifconfig

Rui Paulo rpaulo at FreeBSD.org
Tue Apr 21 11:44:41 UTC 2009


Author: rpaulo
Date: Tue Apr 21 11:44:40 2009
New Revision: 191355
URL: http://svn.freebsd.org/changeset/base/191355

Log:
  Implement meshid command and print the mesh id if the vap is a mesh
  point.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sbin/ifconfig/ifieee80211.c

Modified: projects/mesh11s/sbin/ifconfig/ifieee80211.c
==============================================================================
--- projects/mesh11s/sbin/ifconfig/ifieee80211.c	Tue Apr 21 11:42:28 2009	(r191354)
+++ projects/mesh11s/sbin/ifconfig/ifieee80211.c	Tue Apr 21 11:44:40 2009	(r191355)
@@ -571,6 +571,20 @@ set80211ssid(const char *val, int d, int
 }
 
 static void
+set80211meshid(const char *val, int d, int s, const struct afswtch *rafp)
+{
+	int		len;
+	u_int8_t	data[IEEE80211_NWID_LEN];
+
+	memset(data, 0, sizeof(data));
+	len = sizeof(data);
+	if (get_string(val, NULL, data, &len) == NULL)
+		exit(1);
+
+	set80211(s, IEEE80211_IOC_MESHID, 0, len, data);
+}	
+
+static void
 set80211stationname(const char *val, int d, int s, const struct afswtch *rafp)
 {
 	int			len;
@@ -3954,13 +3968,13 @@ printrate(const char *tag, int v, int de
 }
 
 static int
-getssid(int s, int ix, void *data, size_t len, int *plen)
+getid(int s, int ix, void *data, size_t len, int *plen, int mesh)
 {
 	struct ieee80211req ireq;
 
 	(void) memset(&ireq, 0, sizeof(ireq));
 	(void) strncpy(ireq.i_name, name, sizeof(ireq.i_name));
-	ireq.i_type = IEEE80211_IOC_SSID;
+	ireq.i_type = (!mesh) ? IEEE80211_IOC_SSID : IEEE80211_IOC_MESHID;
 	ireq.i_val = ix;
 	ireq.i_data = data;
 	ireq.i_len = len;
@@ -3981,7 +3995,7 @@ ieee80211_status(int s)
 	const struct ieee80211_roamparam *rp;
 	const struct ieee80211_txparam *tp;
 
-	if (getssid(s, -1, data, sizeof(data), &len) < 0) {
+	if (getid(s, -1, data, sizeof(data), &len, 0) < 0) {
 		/* If we can't get the SSID, this isn't an 802.11 device. */
 		return;
 	}
@@ -3996,18 +4010,24 @@ ieee80211_status(int s)
 	gothtconf = 0;
 	gotregdomain = 0;
 
-	if (get80211val(s, IEEE80211_IOC_NUMSSIDS, &num) < 0)
-		num = 0;
-	printf("\tssid ");
-	if (num > 1) {
-		for (i = 0; i < num; i++) {
-			if (getssid(s, i, data, sizeof(data), &len) >= 0 && len > 0) {
-				printf(" %d:", i + 1);
-				print_string(data, len);
-			}
-		}
-	} else
+	if (opmode == IEEE80211_M_MBSS) {
+		printf("\tmeshid ");
+		getid(s, i, data, sizeof(data), &len, 1);
 		print_string(data, len);
+	} else {
+		if (get80211val(s, IEEE80211_IOC_NUMSSIDS, &num) < 0)
+			num = 0;
+		printf("\tssid ");
+		if (num > 1) {
+			for (i = 0; i < num; i++) {
+				if (getid(s, i, data, sizeof(data), &len, 0) >= 0 && len > 0) {
+					printf(" %d:", i + 1);
+					print_string(data, len);
+				}
+			}
+		} else
+			print_string(data, len);
+	}
 
 	c = getcurchan(s);
 	if (c->ic_freq != IEEE80211_CHAN_ANY) {
@@ -4812,6 +4832,7 @@ set80211clone_wdslegacy(const char *val,
 static struct cmd ieee80211_cmds[] = {
 	DEF_CMD_ARG("ssid",		set80211ssid),
 	DEF_CMD_ARG("nwid",		set80211ssid),
+	DEF_CMD_ARG("meshid",		set80211meshid),
 	DEF_CMD_ARG("stationname",	set80211stationname),
 	DEF_CMD_ARG("station",		set80211stationname),	/* BSD/OS */
 	DEF_CMD_ARG("channel",		set80211channel),


More information about the svn-src-projects mailing list