mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-20 10:51:27 +00:00
118 lines
3.6 KiB
Diff
118 lines
3.6 KiB
Diff
--- a/interface.c
|
|
+++ b/interface.c
|
|
@@ -803,6 +803,71 @@ COMMAND(set, tid_retry_count, "tid <tid>
|
|
NL80211_CMD_SET_TID_CONFIG, 0, CIB_NETDEV, handle_retry_count,
|
|
"Set the retry count for the TIDs ");
|
|
|
|
+static int handle_aggr_conf(struct nl80211_state *state,
|
|
+ struct nl_msg *msg,
|
|
+ int argc, char **argv,
|
|
+ enum id_input id)
|
|
+{
|
|
+ struct nl_msg *tid = NULL;
|
|
+ unsigned char mac_addr[ETH_ALEN];
|
|
+ uint8_t tid_no;
|
|
+ char *end;
|
|
+ int ret = -ENOSPC;
|
|
+
|
|
+ if (argc < 4)
|
|
+ return 1;
|
|
+
|
|
+ tid = nlmsg_alloc();
|
|
+ if (!tid)
|
|
+ return -ENOMEM;
|
|
+
|
|
+ while (argc) {
|
|
+ if (strcmp(argv[0], "tid") == 0) {
|
|
+ if (argc < 2)
|
|
+ return 1;
|
|
+
|
|
+ tid_no = strtoul(argv[1], &end, 8);
|
|
+ if (*end)
|
|
+ return 1;
|
|
+
|
|
+ NLA_PUT_U8(tid, NL80211_ATTR_TID, tid_no);
|
|
+ } else if (strcmp(argv[0], "peer") == 0) {
|
|
+ if (argc < 2)
|
|
+ return 1;
|
|
+
|
|
+ if (mac_addr_a2n(mac_addr, argv[1])) {
|
|
+ fprintf(stderr, "invalid mac address\n");
|
|
+ return 2;
|
|
+ }
|
|
+
|
|
+ NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr);
|
|
+ } else if (strcmp(argv[0], "aggr") == 0) {
|
|
+ if (argc < 2)
|
|
+ return 1;
|
|
+ if (strcmp(argv[1], "on") == 0)
|
|
+ NLA_PUT_U8(tid, NL80211_ATTR_TID_AMPDU_AGGR_CTRL, 1);
|
|
+ else if (strcmp(argv[1], "off") == 0)
|
|
+ NLA_PUT_U8(tid, NL80211_ATTR_TID_AMPDU_AGGR_CTRL, 0);
|
|
+ else
|
|
+ return 1;
|
|
+ } else {
|
|
+ return 1;
|
|
+ }
|
|
+ argc -= 2;
|
|
+ argv += 2;
|
|
+ }
|
|
+
|
|
+ nla_put_nested(msg, NL80211_ATTR_TID_CONFIG, tid);
|
|
+ ret = 0;
|
|
+
|
|
+nla_put_failure:
|
|
+ nlmsg_free(tid);
|
|
+ return ret;
|
|
+}
|
|
+COMMAND(set, tid_aggr_conf, "tid <tid> <[peer <MAC address>] aggr on|off>",
|
|
+ NL80211_CMD_SET_TID_CONFIG, 0, CIB_NETDEV, handle_aggr_conf,
|
|
+ "Enable/disable aggregation for the TIDs ");
|
|
+
|
|
|
|
static int toggle_tid_param(const char *argv0, const char *argv1,
|
|
struct nl_msg *msg, uint32_t attr)
|
|
--- a/nl80211.h
|
|
+++ b/nl80211.h
|
|
@@ -4915,17 +4915,32 @@ enum nl80211_ps_state {
|
|
* the max value should be advertised by the driver through
|
|
* max_data_retry_count. when this attribute is not present, the driver
|
|
* would use the default configuration.
|
|
+ * @NL80211_ATTR_TID_AMPDU_AGGR_CTRL: Enable/Disable aggregation for the TID
|
|
+ * specified in %%NL80211_ATTR_TID. Its type is u8, if the peer MAC address
|
|
+ * is passed in %NL80211_ATTR_MAC, the aggregation configuration is applied
|
|
+ * to the data frame for the tid to that connected station.
|
|
+ * Station specific aggregation configuration is valid only for STA's
|
|
+ * current connection. i.e. the configuration will be reset to default when
|
|
+ * the station connects back after disconnection/roaming.
|
|
+ * when user-space does not include %NL80211_ATTR_MAC, this configuration
|
|
+ * should be treated as per-netdev configuration. This configuration will
|
|
+ * be cleared when the interface goes down and on the disconnection from a
|
|
+ * BSS. Driver supporting this feature should advertise
|
|
+ * NL80211_EXT_FEATURE_PER_STA_AMPDU_AGGR_CTRL and supporting per station
|
|
+ * aggregation configuration should advertise
|
|
+ * NL80211_EXT_FEATURE_PER_STA_AMPDU_AGGR_CTRL.
|
|
*/
|
|
enum nl80211_attr_tid_config {
|
|
- __NL80211_ATTR_TID_INVALID,
|
|
- NL80211_ATTR_TID,
|
|
- NL80211_ATTR_TID_RETRY_CONFIG,
|
|
- NL80211_ATTR_TID_RETRY_SHORT,
|
|
- NL80211_ATTR_TID_RETRY_LONG,
|
|
+ __NL80211_ATTR_TID_INVALID,
|
|
+ NL80211_ATTR_TID,
|
|
+ NL80211_ATTR_TID_RETRY_CONFIG,
|
|
+ NL80211_ATTR_TID_RETRY_SHORT,
|
|
+ NL80211_ATTR_TID_RETRY_LONG,
|
|
+ NL80211_ATTR_TID_AMPDU_AGGR_CTRL,
|
|
|
|
- /* keep last */
|
|
- __NL80211_ATTR_TID_AFTER_LAST,
|
|
- NL80211_ATTR_TID_MAX = __NL80211_ATTR_TID_AFTER_LAST - 1
|
|
+ /* keep last */
|
|
+ __NL80211_ATTR_TID_AFTER_LAST,
|
|
+ NL80211_ATTR_TID_MAX = __NL80211_ATTR_TID_AFTER_LAST - 1
|
|
};
|
|
/**
|
|
* enum nl80211_attr_cqm - connection quality monitor attributes
|