]> git.ipfire.org Git - thirdparty/iw.git/blobdiff - wowlan.c
add P2P Device handling primitives
[thirdparty/iw.git] / wowlan.c
index bdfa6a9bb2834831cc3da33c2b65b2ef33ad8ef6..6d324efc51d94e607be0b69c58683e6738b52b04 100644 (file)
--- a/wowlan.c
+++ b/wowlan.c
@@ -14,7 +14,8 @@
 SECTION(wowlan);
 
 static int handle_wowlan_enable(struct nl80211_state *state, struct nl_cb *cb,
-                               struct nl_msg *msg, int argc, char **argv)
+                               struct nl_msg *msg, int argc, char **argv,
+                               enum id_input id)
 {
        struct nlattr *wowlan, *pattern;
        struct nl_msg *patterns = NULL;
@@ -40,6 +41,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 +90,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"
@@ -90,7 +100,8 @@ COMMAND(wowlan, enable, "[any] [disconnect] [magic-packet] [patterns <pattern>*]
 
 
 static int handle_wowlan_disable(struct nl80211_state *state, struct nl_cb *cb,
-                                struct nl_msg *msg, int argc, char **argv)
+                                struct nl_msg *msg, int argc, char **argv,
+                                enum id_input id)
 {
        /* just a set w/o wowlan attribute */
        return 0;
@@ -128,6 +139,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],
@@ -168,7 +187,8 @@ static int print_wowlan_handler(struct nl_msg *msg, void *arg)
 }
 
 static int handle_wowlan_show(struct nl80211_state *state, struct nl_cb *cb,
-                             struct nl_msg *msg, int argc, char **argv)
+                             struct nl_msg *msg, int argc, char **argv,
+                             enum id_input id)
 {
        nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM,
                  print_wowlan_handler, NULL);