diff --git a/sta.c b/sta.c
index 704c046..e0ae341 100644
--- a/sta.c
+++ b/sta.c
@@ -3619,6 +3619,7 @@
 
 
 #ifdef NL80211_SUPPORT
+
 static int sta_set_he_fragmentation(struct sigma_dut *dut, const char *intf,
 				    enum he_fragmentation_val frag)
 {
@@ -3661,6 +3662,78 @@
 	}
 	return ret;
 }
+
+
+static int nlvendor_sta_set_noack(struct sigma_dut *dut, const char *intf,
+				  int noack, enum qca_wlan_ac_type ac)
+{
+	struct nl_msg *msg;
+	int ret = 0;
+	struct nlattr *params;
+	int ifindex;
+
+	ifindex = if_nametoindex(intf);
+	if (ifindex == 0) {
+		sigma_dut_print(dut, DUT_MSG_ERROR,
+				"%s: Index for interface %s failed",
+				__func__, intf);
+		return -1;
+	}
+
+	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_ENABLE_NO_ACK,
+		       noack) ||
+	    nla_put_u8(msg, QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_NO_ACK_AC,
+		       ac)) {
+		sigma_dut_print(dut, DUT_MSG_ERROR,
+				"%s: err in adding vendor_cmd and vendor_data",
+				__func__);
+		nlmsg_free(msg);
+		return -1;
+	}
+	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);
+	}
+	return ret;
+}
+
+
+static void wcn_sta_set_noack(struct sigma_dut *dut, const char *intf,
+			      const char *val)
+{
+	int noack, ret;
+	char token[100];
+	char *result;
+	char *saveptr;
+	enum qca_wlan_ac_type ac = QCA_WLAN_AC_BE;
+
+	strlcpy(token, val, sizeof(token));
+	token[sizeof(token) - 1] = '\0';
+	result = strtok_r(token, ":", &saveptr);
+	while (result) {
+		noack = strcasecmp(result, "Disable") != 0;
+		ret = nlvendor_sta_set_noack(dut, intf, noack, ac);
+		if (ret) {
+			sigma_dut_print(dut, DUT_MSG_ERROR,
+					"nlvendor_sta_set_noack failed for ac:%d, ret:%d",
+					ac, ret);
+		}
+		result = strtok_r(NULL, ":", &saveptr);
+		ac++;
+	}
+}
+
 #endif /* NL80211_SUPPORT */
 
 
@@ -3879,6 +3952,11 @@
 		case DRIVER_ATHEROS:
 			ath_sta_set_noack(dut, intf, val);
 			break;
+#ifdef NL80211_SUPPORT
+		case DRIVER_WCN:
+			wcn_sta_set_noack(dut, intf, val);
+			break;
+#endif /* NL80211_SUPPORT */
 		default:
 			send_resp(dut, conn, SIGMA_ERROR,
 				  "ErrorCode,Setting NoAck not supported");
