]> git.ipfire.org Git - thirdparty/iw.git/blobdiff - event.c
iw: handle NL80211_ATTR_EXT_FEATURES attribute
[thirdparty/iw.git] / event.c
diff --git a/event.c b/event.c
index 25f809947de2587252b7706220124f323d64fa21..929854bd8354b7d7a80538fe4a6245ab711cbb5d 100644 (file)
--- a/event.c
+++ b/event.c
@@ -200,7 +200,8 @@ static void parse_mic_failure(struct nlattr **attrs)
 
 static void parse_wowlan_wake_event(struct nlattr **attrs)
 {
-       struct nlattr *tb[NUM_NL80211_WOWLAN_TRIG];
+       struct nlattr *tb[NUM_NL80211_WOWLAN_TRIG],
+               *tb_match[NUM_NL80211_ATTR];
 
        printf("WoWLAN wakeup\n");
        if (!attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) {
@@ -227,6 +228,31 @@ static void parse_wowlan_wake_event(struct nlattr **attrs)
                printf("\t* 4-way handshake\n");
        if (tb[NL80211_WOWLAN_TRIG_RFKILL_RELEASE])
                printf("\t* RF-kill released\n");
+       if (tb[NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS]) {
+               struct nlattr *match, *freq;
+               int rem_nst, rem_nst2;
+
+               printf("\t* network detected\n");
+               nla_for_each_nested(match,
+                                   tb[NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS],
+                                   rem_nst) {
+                       nla_parse(tb_match, NUM_NL80211_ATTR, nla_data(match),
+                                 nla_len(match),
+                                 NULL);
+                       printf("\t\tSSID: \"");
+                       print_ssid_escaped(nla_len(tb_match[NL80211_ATTR_SSID]),
+                                          nla_data(tb_match[NL80211_ATTR_SSID]));
+                       printf("\"");
+                       if (tb_match[NL80211_ATTR_SCAN_FREQUENCIES]) {
+                               printf(" freq(s):");
+                               nla_for_each_nested(freq,
+                                                   tb_match[NL80211_ATTR_SCAN_FREQUENCIES],
+                                                   rem_nst2)
+                                       printf(" %d", nla_get_u32(freq));
+                       }
+                       printf("\n");
+               }
+       }
        if (tb[NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211]) {
                uint8_t *d = nla_data(tb[NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211]);
                int l = nla_len(tb[NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211]);
@@ -333,6 +359,15 @@ static int print_event(struct nl_msg *msg, void *arg)
                }
                printf("\n");
                break;
+       case NL80211_CMD_START_SCHED_SCAN:
+               printf("scheduled scan started\n");
+               break;
+       case NL80211_CMD_SCHED_SCAN_STOPPED:
+               printf("sched scan stopped\n");
+               break;
+       case NL80211_CMD_SCHED_SCAN_RESULTS:
+               printf("got scheduled scan results\n");
+               break;
        case NL80211_CMD_REG_CHANGE:
                printf("regulatory domain change: ");
 
@@ -539,6 +574,31 @@ static int print_event(struct nl_msg *msg, void *arg)
                                   nla_data(tb[NL80211_ATTR_VENDOR_DATA]),
                                   nla_len(tb[NL80211_ATTR_VENDOR_DATA]));
                break;
+       case NL80211_CMD_RADAR_DETECT:
+               printf("radar event ");
+               if (tb[NL80211_ATTR_RADAR_EVENT]) {
+                       switch (nla_get_u32(tb[NL80211_ATTR_RADAR_EVENT])) {
+                               case NL80211_RADAR_DETECTED:
+                                       printf("(radar detected)");
+                                       break;
+                               case NL80211_RADAR_CAC_FINISHED:
+                                       printf("(cac finished)");
+                                       break;
+                               case NL80211_RADAR_CAC_ABORTED:
+                                       printf("(cac aborted)");
+                                       break;
+                               case NL80211_RADAR_NOP_FINISHED:
+                                       printf("(nop finished)");
+                                       break;
+                               default:
+                                       printf("(unknown)");
+                                       break;
+                       };
+               } else {
+                       printf("(unknown)");
+               }
+               printf("\n");
+               break;
        default:
                printf("unknown event %d (%s)\n",
                       gnlh->cmd, command_name(gnlh->cmd));