[PATCH] libertas: updated mesh commands for 5.220.9.p11
Updated commands fwt_add and fwt_list, bt_list. New commands: bt_get_invert, bt_set_invert, to invert the blinding table, i.e., receive only frames from nodes listed in the BT. This patch needs/is needed for firmware 5.220.9.p11. Signed-off-by: Luis Carlos Cobo <luisca@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
7db283c914
commit
90e8eafc93
|
@ -861,6 +861,11 @@ static int wlan_cmd_bt_access(wlan_private * priv,
|
||||||
break;
|
break;
|
||||||
case cmd_act_bt_access_reset:
|
case cmd_act_bt_access_reset:
|
||||||
break;
|
break;
|
||||||
|
case cmd_act_bt_access_set_invert:
|
||||||
|
bt_access->id = cpu_to_le32(*(u32 *) pdata_buf);
|
||||||
|
break;
|
||||||
|
case cmd_act_bt_access_get_invert:
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -374,6 +374,8 @@ enum SNMP_MIB_VALUE_e {
|
||||||
/* Default values for fwt commands. */
|
/* Default values for fwt commands. */
|
||||||
#define FWT_DEFAULT_METRIC 0
|
#define FWT_DEFAULT_METRIC 0
|
||||||
#define FWT_DEFAULT_DIR 1
|
#define FWT_DEFAULT_DIR 1
|
||||||
|
/* Default Rate, 11Mbps */
|
||||||
|
#define FWT_DEFAULT_RATE 3
|
||||||
#define FWT_DEFAULT_SSN 0xffffffff
|
#define FWT_DEFAULT_SSN 0xffffffff
|
||||||
#define FWT_DEFAULT_DSN 0
|
#define FWT_DEFAULT_DSN 0
|
||||||
#define FWT_DEFAULT_HOPCOUNT 0
|
#define FWT_DEFAULT_HOPCOUNT 0
|
||||||
|
|
|
@ -287,7 +287,9 @@ enum cmd_bt_access_opts {
|
||||||
cmd_act_bt_access_add = 5,
|
cmd_act_bt_access_add = 5,
|
||||||
cmd_act_bt_access_del,
|
cmd_act_bt_access_del,
|
||||||
cmd_act_bt_access_list,
|
cmd_act_bt_access_list,
|
||||||
cmd_act_bt_access_reset
|
cmd_act_bt_access_reset,
|
||||||
|
cmd_act_bt_access_set_invert,
|
||||||
|
cmd_act_bt_access_get_invert
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Define action or option for cmd_fwt_access */
|
/* Define action or option for cmd_fwt_access */
|
||||||
|
|
|
@ -607,18 +607,21 @@ struct cmd_ds_bt_access {
|
||||||
struct cmd_ds_fwt_access {
|
struct cmd_ds_fwt_access {
|
||||||
u16 action;
|
u16 action;
|
||||||
u32 id;
|
u32 id;
|
||||||
|
u8 valid;
|
||||||
u8 da[ETH_ALEN];
|
u8 da[ETH_ALEN];
|
||||||
u8 dir;
|
u8 dir;
|
||||||
u8 ra[ETH_ALEN];
|
u8 ra[ETH_ALEN];
|
||||||
u32 ssn;
|
u32 ssn;
|
||||||
u32 dsn;
|
u32 dsn;
|
||||||
u32 metric;
|
u32 metric;
|
||||||
|
u8 rate;
|
||||||
u8 hopcount;
|
u8 hopcount;
|
||||||
u8 ttl;
|
u8 ttl;
|
||||||
u32 expiration;
|
u32 expiration;
|
||||||
u8 sleepmode;
|
u8 sleepmode;
|
||||||
u32 snr;
|
u32 snr;
|
||||||
u32 references;
|
u32 references;
|
||||||
|
u8 prec[ETH_ALEN];
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
struct cmd_ds_mesh_access {
|
struct cmd_ds_mesh_access {
|
||||||
|
|
|
@ -241,7 +241,7 @@ static int wlan_bt_list_ioctl(wlan_private * priv, struct ifreq *req)
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
addr1 = param.addr1addr2;
|
addr1 = param.addr1addr2;
|
||||||
|
|
||||||
pos = sprintf(pbuf, "ignoring traffic from ");
|
pos = sprintf(pbuf, "BT includes node ");
|
||||||
pbuf += pos;
|
pbuf += pos;
|
||||||
pos = eth_addr2str(addr1, pbuf);
|
pos = eth_addr2str(addr1, pbuf);
|
||||||
pbuf += pos;
|
pbuf += pos;
|
||||||
|
@ -257,6 +257,64 @@ static int wlan_bt_list_ioctl(wlan_private * priv, struct ifreq *req)
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lbs_deb_leave(LBS_DEB_IOCTL);
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets inverted state of blacklist (non-zero if inverted)
|
||||||
|
* @param priv A pointer to wlan_private structure
|
||||||
|
* @param req A pointer to ifreq structure
|
||||||
|
* @return 0 --success, otherwise fail
|
||||||
|
*/
|
||||||
|
static int wlan_bt_set_invert_ioctl(wlan_private * priv, struct ifreq *req)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct iwreq *wrq = (struct iwreq *)req;
|
||||||
|
union {
|
||||||
|
int id;
|
||||||
|
char addr1addr2[2 * ETH_ALEN];
|
||||||
|
} param;
|
||||||
|
|
||||||
|
lbs_deb_enter(LBS_DEB_IOCTL);
|
||||||
|
|
||||||
|
param.id = SUBCMD_DATA(wrq) ;
|
||||||
|
ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
|
||||||
|
cmd_act_bt_access_set_invert,
|
||||||
|
cmd_option_waitforrsp, 0,
|
||||||
|
(char *)¶m);
|
||||||
|
if (ret != 0)
|
||||||
|
return -EFAULT;
|
||||||
|
lbs_deb_leave(LBS_DEB_IOCTL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets inverted state of blacklist (non-zero if inverted)
|
||||||
|
* @param priv A pointer to wlan_private structure
|
||||||
|
* @param req A pointer to ifreq structure
|
||||||
|
* @return 0 --success, otherwise fail
|
||||||
|
*/
|
||||||
|
static int wlan_bt_get_invert_ioctl(wlan_private * priv, struct ifreq *req)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
union {
|
||||||
|
int id;
|
||||||
|
char addr1addr2[2 * ETH_ALEN];
|
||||||
|
} param;
|
||||||
|
|
||||||
|
lbs_deb_enter(LBS_DEB_IOCTL);
|
||||||
|
|
||||||
|
ret = libertas_prepare_and_send_command(priv, cmd_bt_access,
|
||||||
|
cmd_act_bt_access_get_invert,
|
||||||
|
cmd_option_waitforrsp, 0,
|
||||||
|
(char *)¶m);
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
req->ifr_data = (char *)(le32_to_cpu(param.id));
|
||||||
|
else
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
lbs_deb_leave(LBS_DEB_IOCTL);
|
lbs_deb_leave(LBS_DEB_IOCTL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -313,6 +371,11 @@ static int wlan_fwt_add_ioctl(wlan_private * priv, struct ifreq *req)
|
||||||
else
|
else
|
||||||
fwt_access.dir = FWT_DEFAULT_DIR;
|
fwt_access.dir = FWT_DEFAULT_DIR;
|
||||||
|
|
||||||
|
if ((ptr = next_param(ptr)))
|
||||||
|
fwt_access.rate = (u8) simple_strtoul(ptr, &ptr, 10);
|
||||||
|
else
|
||||||
|
fwt_access.rate = FWT_DEFAULT_RATE;
|
||||||
|
|
||||||
if ((ptr = next_param(ptr)))
|
if ((ptr = next_param(ptr)))
|
||||||
fwt_access.ssn =
|
fwt_access.ssn =
|
||||||
cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
|
cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
|
||||||
|
@ -441,15 +504,18 @@ static void print_route(struct cmd_ds_fwt_access fwt_access, char *buf)
|
||||||
buf += eth_addr2str(fwt_access.da, buf);
|
buf += eth_addr2str(fwt_access.da, buf);
|
||||||
buf += sprintf(buf, " ");
|
buf += sprintf(buf, " ");
|
||||||
buf += eth_addr2str(fwt_access.ra, buf);
|
buf += eth_addr2str(fwt_access.ra, buf);
|
||||||
|
buf += sprintf(buf, " %u", fwt_access.valid);
|
||||||
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.metric));
|
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.metric));
|
||||||
buf += sprintf(buf, " %u", fwt_access.dir);
|
buf += sprintf(buf, " %u", fwt_access.dir);
|
||||||
|
buf += sprintf(buf, " %u", fwt_access.rate);
|
||||||
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.ssn));
|
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.ssn));
|
||||||
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.dsn));
|
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.dsn));
|
||||||
buf += sprintf(buf, " %u", fwt_access.hopcount);
|
buf += sprintf(buf, " %u", fwt_access.hopcount);
|
||||||
buf += sprintf(buf, " %u", fwt_access.ttl);
|
buf += sprintf(buf, " %u", fwt_access.ttl);
|
||||||
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.expiration));
|
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.expiration));
|
||||||
buf += sprintf(buf, " %u", fwt_access.sleepmode);
|
buf += sprintf(buf, " %u", fwt_access.sleepmode);
|
||||||
buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.snr));
|
buf += sprintf(buf, " %u ", le32_to_cpu(fwt_access.snr));
|
||||||
|
buf += eth_addr2str(fwt_access.prec, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -866,6 +932,10 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
|
||||||
ret = wlan_mesh_set_ttl_ioctl(priv, idata);
|
ret = wlan_mesh_set_ttl_ioctl(priv, idata);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WLAN_SUBCMD_BT_SET_INVERT:
|
||||||
|
ret = wlan_bt_set_invert_ioctl(priv, req);
|
||||||
|
break ;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = -EOPNOTSUPP;
|
ret = -EOPNOTSUPP;
|
||||||
break;
|
break;
|
||||||
|
@ -923,6 +993,10 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
|
||||||
ret = wlan_mesh_get_ttl_ioctl(priv, req);
|
ret = wlan_mesh_get_ttl_ioctl(priv, req);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WLAN_SUBCMD_BT_GET_INVERT:
|
||||||
|
ret = wlan_bt_get_invert_ioctl(priv, req);
|
||||||
|
break ;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = -EOPNOTSUPP;
|
ret = -EOPNOTSUPP;
|
||||||
|
|
||||||
|
|
|
@ -1066,6 +1066,16 @@ static const struct iw_priv_args wlan_private_args[] = {
|
||||||
IW_PRIV_TYPE_CHAR | 128,
|
IW_PRIV_TYPE_CHAR | 128,
|
||||||
IW_PRIV_TYPE_CHAR | 128,
|
IW_PRIV_TYPE_CHAR | 128,
|
||||||
"bt_list"},
|
"bt_list"},
|
||||||
|
{
|
||||||
|
WLAN_SUBCMD_BT_SET_INVERT,
|
||||||
|
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||||
|
IW_PRIV_TYPE_NONE,
|
||||||
|
"bt_set_invert"},
|
||||||
|
{
|
||||||
|
WLAN_SUBCMD_BT_GET_INVERT,
|
||||||
|
IW_PRIV_TYPE_NONE,
|
||||||
|
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||||
|
"bt_get_invert"},
|
||||||
/* FWT Management */
|
/* FWT Management */
|
||||||
{
|
{
|
||||||
WLAN_SUBCMD_FWT_ADD,
|
WLAN_SUBCMD_FWT_ADD,
|
||||||
|
|
|
@ -20,21 +20,23 @@
|
||||||
#define WLAN_SUBCMD_FWT_CLEANUP 15
|
#define WLAN_SUBCMD_FWT_CLEANUP 15
|
||||||
#define WLAN_SUBCMD_FWT_TIME 16
|
#define WLAN_SUBCMD_FWT_TIME 16
|
||||||
#define WLAN_SUBCMD_MESH_GET_TTL 17
|
#define WLAN_SUBCMD_MESH_GET_TTL 17
|
||||||
|
#define WLAN_SUBCMD_BT_GET_INVERT 18
|
||||||
|
|
||||||
#define WLAN_SETONEINT_GETNONE (WLANIOCTL + 24)
|
#define WLAN_SETONEINT_GETNONE (WLANIOCTL + 24)
|
||||||
#define WLANSETREGION 8
|
#define WLANSETREGION 8
|
||||||
#define WLAN_SUBCMD_MESH_SET_TTL 18
|
#define WLAN_SUBCMD_MESH_SET_TTL 18
|
||||||
|
#define WLAN_SUBCMD_BT_SET_INVERT 19
|
||||||
|
|
||||||
#define WLAN_SET128CHAR_GET128CHAR (WLANIOCTL + 25)
|
#define WLAN_SET128CHAR_GET128CHAR (WLANIOCTL + 25)
|
||||||
#define WLAN_SUBCMD_BT_ADD 18
|
#define WLAN_SUBCMD_BT_ADD 18
|
||||||
#define WLAN_SUBCMD_BT_DEL 19
|
#define WLAN_SUBCMD_BT_DEL 19
|
||||||
#define WLAN_SUBCMD_BT_LIST 20
|
#define WLAN_SUBCMD_BT_LIST 20
|
||||||
#define WLAN_SUBCMD_FWT_ADD 21
|
#define WLAN_SUBCMD_FWT_ADD 21
|
||||||
#define WLAN_SUBCMD_FWT_DEL 22
|
#define WLAN_SUBCMD_FWT_DEL 22
|
||||||
#define WLAN_SUBCMD_FWT_LOOKUP 23
|
#define WLAN_SUBCMD_FWT_LOOKUP 23
|
||||||
#define WLAN_SUBCMD_FWT_LIST_NEIGHBOR 24
|
#define WLAN_SUBCMD_FWT_LIST_NEIGHBOR 24
|
||||||
#define WLAN_SUBCMD_FWT_LIST 25
|
#define WLAN_SUBCMD_FWT_LIST 25
|
||||||
#define WLAN_SUBCMD_FWT_LIST_ROUTE 26
|
#define WLAN_SUBCMD_FWT_LIST_ROUTE 26
|
||||||
|
|
||||||
#define WLAN_SET_GET_SIXTEEN_INT (WLANIOCTL + 29)
|
#define WLAN_SET_GET_SIXTEEN_INT (WLANIOCTL + 29)
|
||||||
#define WLAN_LED_GPIO_CTRL 5
|
#define WLAN_LED_GPIO_CTRL 5
|
||||||
|
|
Loading…
Reference in New Issue