* [PATCH] iw: add set sar_specs command
@ 2021-10-07 8:56 Ping-Ke Shih
0 siblings, 0 replies; only message in thread
From: Ping-Ke Shih @ 2021-10-07 8:56 UTC (permalink / raw)
To: johannes; +Cc: linux-wireless, cjhuang, kevin_yang
From: Zong-Zhe Yang <kevin_yang@realtek.com>
Add set sar_specs command
usage: iw <phy> set sar_specs <sar type> <range index:sar power>*
e.g.
iw phy0 set sar_specs 0 0:100 1:90 2:80...
where sar type should correspond to wiphy's sar_capa,
and range index should be valid in wiphy's sar_capa.
For now, kernel sar type supports only 0 (NL80211_SAR_TYPE_POWER)
which means that the sar power limitation is specified in 0.25dBm unit.
Cc: Carl Huang <cjhuang@codeaurora.org>
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
sar.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 sar.c
diff --git a/sar.c b/sar.c
new file mode 100644
index 0000000..5ab54ec
--- /dev/null
+++ b/sar.c
@@ -0,0 +1,71 @@
+#include <errno.h>
+#include <string.h>
+
+#include <netlink/genl/genl.h>
+#include <netlink/msg.h>
+#include <netlink/attr.h>
+
+#include "nl80211.h"
+#include "iw.h"
+
+static int set_sar_specs(struct nl80211_state *state,
+ struct nl_msg *msg,
+ int argc, char **argv,
+ enum id_input id)
+{
+ struct nlattr *nl_sar, *nl_specs, *nl_sub;
+ enum nl80211_sar_type type;
+ __u32 idx;
+ __s32 pwr;
+ char *tmp;
+ int count, i;
+
+ if (argc <= 1)
+ return -EINVAL;
+
+ type = atoi(argv[0]);
+
+ nl_sar = nla_nest_start(msg, NL80211_ATTR_SAR_SPEC);
+ if (!nl_sar)
+ goto nla_put_failure;
+
+ NLA_PUT_U32(msg, NL80211_SAR_ATTR_TYPE, type);
+
+ nl_specs = nla_nest_start(msg, NL80211_SAR_ATTR_SPECS);
+ if (!nl_specs)
+ goto nla_put_failure;
+
+ for (i = 1; i < argc; i++) {
+ tmp = strchr(argv[i], ':');
+ if (!tmp)
+ return -EINVAL;
+
+ if (tmp != strrchr(argv[i], ':'))
+ return -EINVAL;
+
+ count = sscanf(argv[i], "%u:%d", &idx, &pwr);
+ if (count != 2)
+ return -EINVAL;
+
+ nl_sub = nla_nest_start(msg, i - 1);
+ if (!nl_sub)
+ goto nla_put_failure;
+
+ NLA_PUT_U32(msg, NL80211_SAR_ATTR_SPECS_RANGE_INDEX, idx);
+ NLA_PUT_S32(msg, NL80211_SAR_ATTR_SPECS_POWER, pwr);
+
+ nla_nest_end(msg, nl_sub);
+ }
+
+ nla_nest_end(msg, nl_specs);
+ nla_nest_end(msg, nl_sar);
+
+ return 0;
+
+ nla_put_failure:
+ return -ENOBUFS;
+}
+
+COMMAND(set, sar_specs, "<sar type> <range index:sar power>*",
+ NL80211_CMD_SET_SAR_SPECS, 0, CIB_PHY, set_sar_specs,
+ "Set SAR specs corresponding to SAR capa of wiphy.");
--
2.25.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2021-10-07 8:56 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-07 8:56 [PATCH] iw: add set sar_specs command Ping-Ke Shih
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).