make broadcom-wl robust against implicit kernel config changes (e.g. netfilter), upgrade it from minor version .2 to .3 (adds fixed bssid support for ad-hoc)
SVN-Revision: 13912
This commit is contained in:
		@@ -10,13 +10,13 @@ include $(TOPDIR)/rules.mk
 | 
			
		||||
include $(INCLUDE_DIR)/kernel.mk
 | 
			
		||||
 | 
			
		||||
PKG_NAME:=broadcom-wl
 | 
			
		||||
PKG_VERSION:=4.150.10.5.2
 | 
			
		||||
PKG_VERSION:=4.150.10.5.3
 | 
			
		||||
PKG_RELEASE:=1
 | 
			
		||||
WLC_VERSION:=0.1
 | 
			
		||||
 | 
			
		||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 | 
			
		||||
PKG_SOURCE_URL:=http://downloads.openwrt.org/sources
 | 
			
		||||
PKG_MD5SUM:=904a808dd98da076814fb7cb4b66a695
 | 
			
		||||
PKG_MD5SUM:=cc615fd49719eea8bce5b2a8813783f3
 | 
			
		||||
 | 
			
		||||
WL_WEXT=1
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -232,6 +232,14 @@ enable_broadcom() {
 | 
			
		||||
			append vif_post_up "monitor $monitor" "$N"
 | 
			
		||||
			append vif_post_up "passive $passive" "$N"
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[ "$mode" = "adhoc" ] && {
 | 
			
		||||
			config_get bssid "$vif" bssid
 | 
			
		||||
			[ -n "$bssid" ] && {
 | 
			
		||||
				append vif_pre_up "des_bssid $bssid" "$N"
 | 
			
		||||
				append vif_pre_up "allow_mode 1" "$N"
 | 
			
		||||
			}
 | 
			
		||||
		} || append vif_pre_up "allow_mode 0" "$N"
 | 
			
		||||
		
 | 
			
		||||
		append vif_post_up "enabled 1" "$N"
 | 
			
		||||
		
 | 
			
		||||
 
 | 
			
		||||
@@ -762,7 +762,11 @@ typedef struct wl_instance_info {
 | 
			
		||||
#define WLC_NVOTPW				274
 | 
			
		||||
#define WLC_OTPW				275
 | 
			
		||||
#define WLC_SET_LOCALE				278
 | 
			
		||||
#define WLC_LAST				279	/* do not change - use get_var/set_var */
 | 
			
		||||
#define WLC_GET_ALLOW_MODE			279
 | 
			
		||||
#define WLC_SET_ALLOW_MODE			280
 | 
			
		||||
#define WLC_GET_DESIRED_BSSID			281
 | 
			
		||||
#define WLC_SET_DESIRED_BSSID			282
 | 
			
		||||
#define WLC_LAST				283	/* do not change - use get_var/set_var */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Minor kludge alert:
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,7 @@ typedef enum {
 | 
			
		||||
	PARAM_TYPE =    0x00f,
 | 
			
		||||
	INT =    0x001,
 | 
			
		||||
	STRING = 0x002,
 | 
			
		||||
	MAC =    0x003,
 | 
			
		||||
 | 
			
		||||
	/* options */
 | 
			
		||||
	PARAM_OPTIONS = 0x0f0,
 | 
			
		||||
@@ -106,11 +107,13 @@ static int wlc_ioctl(wlc_param param, void *data, void *value)
 | 
			
		||||
		return wl_ioctl(interface, ioc, NULL, 0);
 | 
			
		||||
	}
 | 
			
		||||
	switch(param & PARAM_TYPE) {
 | 
			
		||||
		case MAC:
 | 
			
		||||
			return wl_ioctl(interface, ((param & SET) ? (ioc) : (ioc >> 16)) & 0xffff, value, 6);
 | 
			
		||||
		case INT:
 | 
			
		||||
			return wl_ioctl(interface, ((param & SET) ? (ioc) : (ioc >> 16)) & 0xffff, value, sizeof(int));
 | 
			
		||||
		case STRING:
 | 
			
		||||
			return wl_ioctl(interface, ((param & SET) ? (ioc) : (ioc >> 16)) & 0xffff, value, BUFSIZE);
 | 
			
		||||
	}	
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -124,12 +127,20 @@ static int wlc_iovar(wlc_param param, void *data, void *value)
 | 
			
		||||
		switch(param & PARAM_TYPE) {
 | 
			
		||||
			case INT:
 | 
			
		||||
				ret = wl_iovar_setint(interface, iov, *val);
 | 
			
		||||
				break;
 | 
			
		||||
			case MAC:
 | 
			
		||||
				ret = wl_iovar_set(interface, iov, value, 6);
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (param & GET) {
 | 
			
		||||
		switch(param & PARAM_TYPE) {
 | 
			
		||||
			case INT:
 | 
			
		||||
				ret = wl_iovar_getint(interface, iov, val);
 | 
			
		||||
				break;
 | 
			
		||||
			case MAC:
 | 
			
		||||
				ret = wl_iovar_get(interface, iov, value, 6);
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -859,6 +870,41 @@ static const struct wlc_call wlc_calls[] = {
 | 
			
		||||
		.handler = wlc_afterburner,
 | 
			
		||||
		.desc = "Broadcom Afterburner"
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		.name = "join_once",
 | 
			
		||||
		.param = INT,
 | 
			
		||||
		.handler = wlc_iovar,
 | 
			
		||||
		.data.str = "IBSS_join_once",
 | 
			
		||||
		.desc = "Prevent unwanted IBSS merges"
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		.name = "bssid",
 | 
			
		||||
		.param = MAC,
 | 
			
		||||
		.handler = wlc_iovar,
 | 
			
		||||
		.data.str = "cur_etheraddr",
 | 
			
		||||
		.desc = "BSSID"
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		.name = "default_bssid",
 | 
			
		||||
		.param = MAC,
 | 
			
		||||
		.handler = wlc_iovar,
 | 
			
		||||
		.data.str = "perm_etheraddr",
 | 
			
		||||
		.desc = "Default BSSID (read-only)"
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		.name = "allow_mode",
 | 
			
		||||
		.param = INT,
 | 
			
		||||
		.data.num = ((WLC_GET_ALLOW_MODE << 16) | WLC_SET_ALLOW_MODE),
 | 
			
		||||
		.handler = wlc_ioctl,
 | 
			
		||||
		.desc = "STA/IBSS assoc mode"
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		.name = "des_bssid",
 | 
			
		||||
		.param = MAC,
 | 
			
		||||
		.data.num = ((WLC_GET_DESIRED_BSSID << 16) | WLC_SET_DESIRED_BSSID),
 | 
			
		||||
		.handler = wlc_ioctl,
 | 
			
		||||
		.desc = "Desired BSSID"
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
#define wlc_calls_size (sizeof(wlc_calls) / sizeof(struct wlc_call))
 | 
			
		||||
 | 
			
		||||
@@ -882,6 +928,7 @@ static int do_command(const struct wlc_call *cmd, char *arg)
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	char *format, *end;
 | 
			
		||||
	int intval;
 | 
			
		||||
	void *ptr = (void *) buf;
 | 
			
		||||
 | 
			
		||||
	if (debug >= 10) {
 | 
			
		||||
		fprintf(stderr, "do_command %-16s\t'%s'\n", cmd->name, arg);
 | 
			
		||||
@@ -906,6 +953,11 @@ static int do_command(const struct wlc_call *cmd, char *arg)
 | 
			
		||||
					break;
 | 
			
		||||
				case STRING:
 | 
			
		||||
					fprintf(stdout, "%s\n", buf);
 | 
			
		||||
					break;
 | 
			
		||||
				case MAC:
 | 
			
		||||
					my_ether_ntoa(buf, buf + 6);
 | 
			
		||||
					fprintf(stdout, "%s\n", buf + 6);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} else { /* SET */
 | 
			
		||||
@@ -923,9 +975,17 @@ static int do_command(const struct wlc_call *cmd, char *arg)
 | 
			
		||||
			case STRING:
 | 
			
		||||
				strncpy(buf, arg, BUFSIZE);
 | 
			
		||||
				buf[BUFSIZE - 1] = 0;
 | 
			
		||||
				break;
 | 
			
		||||
			case MAC:
 | 
			
		||||
				ptr = ether_aton(arg);
 | 
			
		||||
				if (!ptr) {
 | 
			
		||||
					fprintf(stderr, "%s: Invalid mac address '%s'\n", cmd->name, arg);
 | 
			
		||||
					return -1;
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ret = cmd->handler(cmd->param | SET, (void *) &cmd->data, (void *) buf);
 | 
			
		||||
		ret = cmd->handler(cmd->param | SET, (void *) &cmd->data, ptr);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if ((debug > 0) && (ret != 0)) 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user