2019-12-10 14:23:28

by Markus Theil

[permalink] [raw]
Subject: [PATCH 1/2] iw: event: add new peer candidate command

This patch prints information about mesh peering candidates.

Signed-off-by: Markus Theil <[email protected]>
---
event.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/event.c b/event.c
index 4a932d1..f17e78e 100644
--- a/event.c
+++ b/event.c
@@ -650,6 +650,24 @@ static void parse_nan_match(struct nlattr **attrs)
printf("\n");
}

+static void parse_new_peer_candidate(struct nlattr **attrs)
+{
+ char macbuf[ETH_ALEN * 3];
+ int32_t sig_dbm;
+
+ printf("new peer candidate");
+ if (attrs[NL80211_ATTR_MAC]) {
+ mac_addr_n2a(macbuf, nla_data(attrs[NL80211_ATTR_MAC]));
+ printf(" %s", macbuf);
+ }
+ if (attrs[NL80211_ATTR_RX_SIGNAL_DBM]) {
+ sig_dbm = nla_get_u32(attrs[NL80211_ATTR_RX_SIGNAL_DBM]);
+ printf(" %i dBm", sig_dbm);
+ }
+
+ printf("\n");
+}
+
static int print_event(struct nl_msg *msg, void *arg)
{
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
@@ -989,6 +1007,10 @@ static int print_event(struct nl_msg *msg, void *arg)
parse_nan_match(tb);
break;
}
+ case NL80211_CMD_NEW_PEER_CANDIDATE: {
+ parse_new_peer_candidate(tb);
+ break;
+ }
default:
printf("unknown event %d (%s)\n",
gnlh->cmd, command_name(gnlh->cmd));
--
2.24.0


2019-12-10 14:24:08

by Markus Theil

[permalink] [raw]
Subject: [PATCH 2/2] iw: event: add set interface command

This patch adds support for CMD_SET_INTERFACE which is called
when switching to mesh or ap mode.

Signed-off-by: Markus Theil <[email protected]>
---
event.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)

diff --git a/event.c b/event.c
index f17e78e..0cedeb9 100644
--- a/event.c
+++ b/event.c
@@ -668,6 +668,46 @@ static void parse_new_peer_candidate(struct nlattr **attrs)
printf("\n");
}

+static void parse_set_interface(struct nlattr **attrs)
+{
+ printf("set interface");
+
+ if (attrs[NL80211_ATTR_IFTYPE]) {
+ printf(" type ");
+ switch (nla_get_u32(attrs[NL80211_ATTR_IFTYPE])) {
+ case NL80211_IFTYPE_STATION:
+ printf("station");
+ break;
+ case NL80211_IFTYPE_AP:
+ printf("access point");
+ break;
+ case NL80211_IFTYPE_MESH_POINT:
+ printf("mesh point");
+ break;
+ case NL80211_IFTYPE_ADHOC:
+ printf("ad-hoc");
+ break;
+ case NL80211_IFTYPE_MONITOR:
+ printf("monitor");
+ break;
+ default:
+ printf("unknown");
+ }
+ }
+
+ if (attrs[NL80211_ATTR_MESH_ID]) {
+ printf(" meshid ");
+ print_ssid_escaped(nla_len(attrs[NL80211_ATTR_MESH_ID]),
+ nla_data(attrs[NL80211_ATTR_MESH_ID]));
+ }
+
+ if (attrs[NL80211_ATTR_4ADDR]) {
+ printf(" use 4addr %i", nla_get_u8(attrs[NL80211_ATTR_4ADDR]));
+ }
+
+ printf("\n");
+}
+
static int print_event(struct nl_msg *msg, void *arg)
{
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
@@ -1011,6 +1051,10 @@ static int print_event(struct nl_msg *msg, void *arg)
parse_new_peer_candidate(tb);
break;
}
+ case NL80211_CMD_SET_INTERFACE: {
+ parse_set_interface(tb);
+ break;
+ }
default:
printf("unknown event %d (%s)\n",
gnlh->cmd, command_name(gnlh->cmd));
--
2.24.0