From ae070708333cb4a08fde17590523d2adff401852 Mon Sep 17 00:00:00 2001 From: Aaradhana Sahu Date: Tue, 17 Jan 2023 11:44:47 +0530 Subject: [PATCH] iw: add support set txpower command for each link Add support for set tx power by link id in multi-link operation. Command: iw wlan0 set txpower -l [] Signed-off-by: Aaradhana Sahu --- phy.c | 43 +++++++++++++++++++++++++++++++++---------- 1 files changed, 34 insertions(+), 10 deletions(-) --- a/phy.c +++ b/phy.c @@ -666,20 +666,43 @@ static int handle_txpower(struct nl80211 enum id_input id) { enum nl80211_tx_power_setting type; - int mbm; + int mbm, i, max_argc; /* get the required args */ - if (argc != 1 && argc != 2) - return 1; + if (argc == 3 || argc == 4) { + max_argc = 4; - if (!strcmp(argv[0], "auto")) + if (!strcmp(argv[0], "-l")) { + unsigned int link_id; + char *endptr; + + link_id = strtol(argv[1], &endptr, 10); + if (*endptr) + return 1; + if (link_id <= MAX_MLD_LINK) { + NLA_PUT_U8(msg, NL80211_ATTR_MLO_LINK_ID, + link_id); + i = 2; + } + } else { + printf("Invalid parameter: %s\n", argv[0]); + return 1; + } + } else { + if (argc != 1 && argc != 2) + return 1; + max_argc = 2; + i = 0; + } + + if (!strcmp(argv[i], "auto")) type = NL80211_TX_POWER_AUTOMATIC; - else if (!strcmp(argv[0], "fixed")) + else if (!strcmp(argv[i], "fixed")) type = NL80211_TX_POWER_FIXED; - else if (!strcmp(argv[0], "limit")) + else if (!strcmp(argv[i], "limit")) type = NL80211_TX_POWER_LIMITED; else { - printf("Invalid parameter: %s\n", argv[0]); + printf("Invalid parameter: %s\n", argv[i]); return 2; } @@ -687,16 +710,16 @@ static int handle_txpower(struct nl80211 if (type != NL80211_TX_POWER_AUTOMATIC) { char *endptr; - if (argc != 2) { + if (argc != max_argc) { printf("Missing TX power level argument.\n"); return 2; } - mbm = strtol(argv[1], &endptr, 10); + mbm = strtol(argv[++i], &endptr, 10); if (*endptr) return 2; NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_TX_POWER_LEVEL, mbm); - } else if (argc != 1) + } else if (argc != max_argc-1) return 1; return 0; @@ -707,7 +730,7 @@ static int handle_txpower(struct nl80211 COMMAND(set, txpower, " []", NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_txpower, "Specify transmit power level and setting type."); -COMMAND(set, txpower, " []", +COMMAND(set, txpower, "[-l] []", NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_txpower, "Specify transmit power level and setting type.");