]> git.ipfire.org Git - thirdparty/iw.git/blobdiff - iw.h
make commands array easier to handle
[thirdparty/iw.git] / iw.h
diff --git a/iw.h b/iw.h
index 94948ec9646b32a7fdf4129f515513d17bc82be8..305604e5b9c4fb1b55577a74d4de372d69503454 100644 (file)
--- a/iw.h
+++ b/iw.h
@@ -35,7 +35,6 @@ enum id_input {
 };
 
 struct cmd {
-       const char *section;
        const char *name;
        const char *args;
        const char *help;
@@ -52,15 +51,15 @@ struct cmd {
                       struct nl_cb *cb,
                       struct nl_msg *msg,
                       int argc, char **argv);
+       const struct cmd *parent;
 };
 
 #define ARRAY_SIZE(ar) (sizeof(ar)/sizeof(ar[0]))
 
 #define __COMMAND(_section, _symname, _name, _args, _nlcmd, _flags, _hidden, _idby, _handler, _help)\
-       static const struct cmd                                         \
+       static struct cmd                                               \
        __cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden\
        __attribute__((used)) __attribute__((section("__cmd"))) = {     \
-               .section = (_section),                                  \
                .name = (_name),                                        \
                .args = (_args),                                        \
                .cmd = (_nlcmd),                                        \
@@ -69,15 +68,34 @@ struct cmd {
                .idby = (_idby),                                        \
                .handler = (_handler),                                  \
                .help = (_help),                                        \
+               .parent = _section,                                     \
         }
 #define COMMAND(section, name, args, cmd, flags, idby, handler, help)  \
-       __COMMAND(#section, name, #name, args, cmd, flags, 0, idby, handler, help)
+       __COMMAND(&(__section ## _ ## section), name, #name, args, cmd, flags, 0, idby, handler, help)
 #define HIDDEN(section, name, args, cmd, flags, idby, handler)         \
-       __COMMAND(#section, name, #name, args, cmd, flags, 1, idby, handler, NULL)
-#define TOPLEVEL(name, args, cmd, flags, idby, handler, help)          \
-       __COMMAND(NULL, name, #name, args, cmd, flags, 0, idby, handler, help)
-extern struct cmd __start___cmd;
-extern struct cmd __stop___cmd;
+       __COMMAND(&(__section ## _ ## section), name, #name, args, cmd, flags, 1, idby, handler, NULL)
+
+#define TOPLEVEL(_name, _args, _nlcmd, _flags, _idby, _handler, _help) \
+       struct cmd                                                      \
+       __section ## _ ## _name                                         \
+       __attribute__((used)) __attribute__((section("__cmd"))) = {     \
+               .name = (#_name),                                       \
+               .args = (_args),                                        \
+               .cmd = (_nlcmd),                                        \
+               .nl_msg_flags = (_flags),                               \
+               .idby = (_idby),                                        \
+               .handler = (_handler),                                  \
+               .help = (_help),                                        \
+        }
+#define SECTION(_name)                                                 \
+       struct cmd __section ## _ ## _name                              \
+       __attribute__((used)) __attribute__((section("__cmd"))) = {     \
+               .name = (#_name),                                       \
+               .hidden = 1,                                            \
+       }
+
+#define DECLARE_SECTION(_name)                                         \
+       extern struct cmd __section ## _ ## _name;
 
 extern const char iw_version[];
 
@@ -102,7 +120,13 @@ void mac_addr_n2a(char *mac_addr, unsigned char *arg);
 
 int parse_keys(struct nl_msg *msg, char **argv, int argc);
 
+void print_ht_mcs(const __u8 *mcs);
+void print_ampdu_length(__u8 exponent);
+void print_ampdu_spacing(__u8 spacing);
+void print_ht_capability(__u16 cap);
+
 const char *iftype_name(enum nl80211_iftype iftype);
+const char *command_name(enum nl80211_commands cmd);
 int ieee80211_channel_to_frequency(int chan);
 int ieee80211_frequency_to_channel(int freq);
 
@@ -125,4 +149,8 @@ enum print_ie_type {
 void print_ies(unsigned char *ie, int ielen, bool unknown,
               enum print_ie_type ptype);
 
+
+DECLARE_SECTION(set);
+DECLARE_SECTION(get);
+
 #endif /* __IW_H */