]> git.ipfire.org Git - thirdparty/iw.git/commitdiff
new wowlan triggers/info
authorJohannes Berg <johannes.berg@intel.com>
Tue, 12 Jul 2011 11:08:37 +0000 (13:08 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 15 Jul 2011 21:08:12 +0000 (23:08 +0200)
info.c
wowlan.c

diff --git a/info.c b/info.c
index 12e5c00c576ac6c63b5009f55cbc2807d644af72..559fd2add9316df3283d78192b9a4966f98e74ea 100644 (file)
--- a/info.c
+++ b/info.c
@@ -315,6 +315,11 @@ broken_combination:
                        [NL80211_WOWLAN_TRIG_PKT_PATTERN] = {
                                .minlen = sizeof(struct nl80211_wowlan_pattern_support),
                        },
+                       [NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED] = { .type = NLA_FLAG },
+                       [NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE] = { .type = NLA_FLAG },
+                       [NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST] = { .type = NLA_FLAG },
+                       [NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE] = { .type = NLA_FLAG },
+                       [NL80211_WOWLAN_TRIG_RFKILL_RELEASE] = { .type = NLA_FLAG },
                };
                struct nl80211_wowlan_pattern_support *pat;
                int err;
@@ -328,16 +333,26 @@ broken_combination:
                } else {
                        printf("\n");
                        if (tb_wowlan[NL80211_WOWLAN_TRIG_ANY])
-                               printf("\t\t * any (device continues operating)\n");
+                               printf("\t\t * wake up on anything (device continues operating normally)\n");
                        if (tb_wowlan[NL80211_WOWLAN_TRIG_DISCONNECT])
-                               printf("\t\t * disconnect\n");
+                               printf("\t\t * wake up on disconnect\n");
                        if (tb_wowlan[NL80211_WOWLAN_TRIG_MAGIC_PKT])
-                               printf("\t\t * magic packet\n");
+                               printf("\t\t * wake up on magic packet\n");
                        if (tb_wowlan[NL80211_WOWLAN_TRIG_PKT_PATTERN]) {
                                pat = nla_data(tb_wowlan[NL80211_WOWLAN_TRIG_PKT_PATTERN]);
-                               printf("\t\t * up to %u patterns of %u-%u bytes\n",
+                               printf("\t\t * wake up on pattern match, up to %u patterns of %u-%u bytes\n",
                                        pat->max_patterns, pat->min_pattern_len, pat->max_pattern_len);
                        }
+                       if (tb_wowlan[NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED])
+                               printf("\t\t * can do GTK rekeying\n");
+                       if (tb_wowlan[NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE])
+                               printf("\t\t * wake up on GTK rekey failure\n");
+                       if (tb_wowlan[NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST])
+                               printf("\t\t * wake up on EAP identity request\n");
+                       if (tb_wowlan[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE])
+                               printf("\t\t * wake up on 4-way handshake\n");
+                       if (tb_wowlan[NL80211_WOWLAN_TRIG_RFKILL_RELEASE])
+                               printf("\t\t * wake up on rfkill release\n");
                }
        }
 
index bdfa6a9bb2834831cc3da33c2b65b2ef33ad8ef6..fa33c1f0b857b7f719a5e3ca4e9bcb895c53da35 100644 (file)
--- a/wowlan.c
+++ b/wowlan.c
@@ -40,6 +40,14 @@ static int handle_wowlan_enable(struct nl80211_state *state, struct nl_cb *cb,
                                NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_DISCONNECT);
                        else if (strcmp(argv[0], "magic-packet") == 0)
                                NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT);
+                       else if (strcmp(argv[0], "gtk-rekey-failure") == 0)
+                               NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE);
+                       else if (strcmp(argv[0], "eap-identity-request") == 0)
+                               NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST);
+                       else if (strcmp(argv[0], "4way-handshake") == 0)
+                               NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE);
+                       else if (strcmp(argv[0], "rfkill-release") == 0)
+                               NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE);
                        else if (strcmp(argv[0], "patterns") == 0) {
                                parse_state = PS_PAT;
                                patterns = nlmsg_alloc();
@@ -81,7 +89,8 @@ static int handle_wowlan_enable(struct nl80211_state *state, struct nl_cb *cb,
        nlmsg_free(patterns);
        return err;
 }
-COMMAND(wowlan, enable, "[any] [disconnect] [magic-packet] [patterns <pattern>*]",
+COMMAND(wowlan, enable, "[any] [disconnect] [magic-packet] [gtk-rekey-failure] [eap-identity-request]"
+       " [4way-handshake] [rfkill-release] [patterns <pattern>*]",
        NL80211_CMD_SET_WOWLAN, 0, CIB_PHY, handle_wowlan_enable,
        "Enable WoWLAN with the given triggers.\n"
        "Each pattern is given as a bytestring with '-' in places where any byte\n"
@@ -128,6 +137,14 @@ static int print_wowlan_handler(struct nl_msg *msg, void *arg)
                printf(" * wake up on disconnect\n");
        if (trig[NL80211_WOWLAN_TRIG_MAGIC_PKT])
                printf(" * wake up on magic packet\n");
+       if (trig[NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE])
+               printf(" * wake up on GTK rekeying failure\n");
+       if (trig[NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST])
+               printf(" * wake up on EAP identity request\n");
+       if (trig[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE])
+               printf(" * wake up on 4-way handshake\n");
+       if (trig[NL80211_WOWLAN_TRIG_RFKILL_RELEASE])
+               printf(" * wake up on RF-kill release\n");
        if (trig[NL80211_WOWLAN_TRIG_PKT_PATTERN]) {
                nla_for_each_nested(pattern,
                                    trig[NL80211_WOWLAN_TRIG_PKT_PATTERN],