HE: Add support for sta_send_addba in WCN driver
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
diff --git a/sta.c b/sta.c
index 9a4c742..704c046 100644
--- a/sta.c
+++ b/sta.c
@@ -6642,12 +6642,94 @@
#endif /* __linux__ */
+static int wcn_sta_send_addba(struct sigma_dut *dut, struct sigma_conn *conn,
+ struct sigma_cmd *cmd)
+{
+#ifdef NL80211_SUPPORT
+ const char *intf = get_param(cmd, "Interface");
+ const char *val;
+ int tid = -1;
+ int bufsize = 64;
+ struct nl_msg *msg;
+ int ret = 0;
+ struct nlattr *params;
+ int ifindex;
+
+ val = get_param(cmd, "TID");
+ if (val)
+ tid = atoi(val);
+
+ if (tid == -1) {
+ send_resp(dut, conn, SIGMA_ERROR,
+ "ErrorCode,sta_send_addba tid invalid");
+ return 0;
+ }
+
+ /* UNSUPPORTED: val = get_param(cmd, "Dest_mac"); */
+
+ ifindex = if_nametoindex(intf);
+ if (ifindex == 0) {
+ sigma_dut_print(dut, DUT_MSG_ERROR,
+ "%s: Index for interface %s failed",
+ __func__, intf);
+ send_resp(dut, conn, SIGMA_ERROR,
+ "ErrorCode,sta_send_addba interface invalid");
+ return 0;
+ }
+
+ if (!(msg = nl80211_drv_msg(dut, dut->nl_ctx, ifindex, 0,
+ NL80211_CMD_VENDOR)) ||
+ nla_put_u32(msg, NL80211_ATTR_IFINDEX, ifindex) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_QCA) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD,
+ QCA_NL80211_VENDOR_SUBCMD_WIFI_TEST_CONFIGURATION) ||
+ !(params = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA)) ||
+ nla_put_u8(msg,
+ QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ADD_DEL_BA_SESSION,
+ QCA_WLAN_ADD_BA) ||
+ nla_put_u8(msg, QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_BA_TID,
+ tid) ||
+ nla_put_u8(msg,
+ QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_ADDBA_BUFF_SIZE,
+ bufsize)) {
+ sigma_dut_print(dut, DUT_MSG_ERROR,
+ "%s: err in adding vendor_cmd and vendor_data",
+ __func__);
+ nlmsg_free(msg);
+ send_resp(dut, conn, SIGMA_ERROR,
+ "ErrorCode,sta_send_addba err in adding vendor_cmd and vendor_data");
+ return 0;
+ }
+ nla_nest_end(msg, params);
+
+ ret = send_and_recv_msgs(dut, dut->nl_ctx, msg, NULL, NULL);
+ if (ret) {
+ sigma_dut_print(dut, DUT_MSG_ERROR,
+ "%s: err in send_and_recv_msgs, ret=%d",
+ __func__, ret);
+ send_resp(dut, conn, SIGMA_ERROR,
+ "ErrorCode,sta_send_addba err in send_and_recv_msgs");
+ return 0;
+ }
+ return 1;
+#else /* NL80211_SUPPORT */
+ sigma_dut_print(dut, DUT_MSG_ERROR,
+ "sta_send_addba not supported without NL80211_SUPPORT defined");
+ send_resp(dut, conn, SIGMA_ERROR,
+ "ErrorCode,sta_send_addba not supported, NL80211_SUPPORT not enabled");
+ return 0;
+#endif /* NL80211_SUPPORT */
+}
+
+
static int cmd_sta_send_addba(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
switch (get_driver_type()) {
case DRIVER_ATHEROS:
return ath_sta_send_addba(dut, conn, cmd);
+ case DRIVER_WCN:
+ return wcn_sta_send_addba(dut, conn, cmd);
#ifdef __linux__
case DRIVER_WIL6210:
return send_addba_60g(dut, conn, cmd);