Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90e8eafc authored by Luis Carlos Cobo's avatar Luis Carlos Cobo Committed by John W. Linville
Browse files

[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: default avatarLuis Carlos Cobo <luisca@cozybit.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 7db283c9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -861,6 +861,11 @@ static int wlan_cmd_bt_access(wlan_private * priv,
		break;
	case cmd_act_bt_access_reset:
		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:
		break;
	}
+2 −0
Original line number Diff line number Diff line
@@ -374,6 +374,8 @@ enum SNMP_MIB_VALUE_e {
/* Default values for fwt commands. */
#define FWT_DEFAULT_METRIC 0
#define FWT_DEFAULT_DIR 1
/* Default Rate, 11Mbps */
#define FWT_DEFAULT_RATE 3
#define FWT_DEFAULT_SSN 0xffffffff
#define FWT_DEFAULT_DSN 0
#define FWT_DEFAULT_HOPCOUNT 0
+3 −1
Original line number Diff line number Diff line
@@ -287,7 +287,9 @@ enum cmd_bt_access_opts {
	cmd_act_bt_access_add = 5,
	cmd_act_bt_access_del,
	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 */
+3 −0
Original line number Diff line number Diff line
@@ -607,18 +607,21 @@ struct cmd_ds_bt_access {
struct cmd_ds_fwt_access {
	u16 action;
	u32 id;
	u8 valid;
	u8 da[ETH_ALEN];
	u8 dir;
	u8 ra[ETH_ALEN];
	u32 ssn;
	u32 dsn;
	u32 metric;
	u8 rate;
	u8 hopcount;
	u8 ttl;
	u32 expiration;
	u8 sleepmode;
	u32 snr;
	u32 references;
	u8 prec[ETH_ALEN];
} __attribute__ ((packed));

struct cmd_ds_mesh_access {
+76 −2
Original line number Diff line number Diff line
@@ -241,7 +241,7 @@ static int wlan_bt_list_ioctl(wlan_private * priv, struct ifreq *req)
	if (ret == 0) {
		addr1 = param.addr1addr2;

		pos = sprintf(pbuf, "ignoring traffic from ");
		pos = sprintf(pbuf, "BT includes node ");
		pbuf += pos;
		pos = eth_addr2str(addr1, pbuf);
		pbuf += pos;
@@ -261,6 +261,64 @@ static int wlan_bt_list_ioctl(wlan_private * priv, struct ifreq *req)
	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 *)&param);
	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 *)&param);

	if (ret == 0)
		req->ifr_data = (char *)(le32_to_cpu(param.id));
	else
		return -EFAULT;

	lbs_deb_leave(LBS_DEB_IOCTL);
	return 0;
}

/**
 *  @brief          Find the next parameter in an input string
 *  @param ptr      A pointer to the input parameter string
@@ -313,6 +371,11 @@ static int wlan_fwt_add_ioctl(wlan_private * priv, struct ifreq *req)
	else
		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)))
		fwt_access.ssn =
			cpu_to_le32(simple_strtoul(ptr, &ptr, 10));
@@ -441,8 +504,10 @@ static void print_route(struct cmd_ds_fwt_access fwt_access, char *buf)
	buf += eth_addr2str(fwt_access.da, buf);
	buf += sprintf(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", 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.dsn));
	buf += sprintf(buf, " %u", fwt_access.hopcount);
@@ -450,6 +515,7 @@ static void print_route(struct cmd_ds_fwt_access fwt_access, char *buf)
	buf += sprintf(buf, " %u", le32_to_cpu(fwt_access.expiration));
	buf += sprintf(buf, " %u", fwt_access.sleepmode);
	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);
			break;

		case WLAN_SUBCMD_BT_SET_INVERT:
			ret = wlan_bt_set_invert_ioctl(priv, req);
			break ;

		default:
			ret = -EOPNOTSUPP;
			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);
			break;

		case WLAN_SUBCMD_BT_GET_INVERT:
			ret = wlan_bt_get_invert_ioctl(priv, req);
			break ;

		default:
			ret = -EOPNOTSUPP;

Loading