Home | History | Annotate | Download | only in ti-utils
      1 #ifndef __CALIBRATOR_H
      2 #define __CALIBRATOR_H
      3 
      4 #include <stdbool.h>
      5 #include <netlink/netlink.h>
      6 #include <netlink/genl/genl.h>
      7 #include <netlink/genl/family.h>
      8 #include <netlink/genl/ctrl.h>
      9 
     10 #include "nl80211.h"
     11 
     12 #define ETH_ALEN 6
     13 
     14 #ifndef CONFIG_LIBNL20
     15 #  define nl_sock nl_handle
     16 #endif
     17 
     18 struct nl80211_state {
     19     struct nl_sock *nl_sock;
     20     struct nl_cache *nl_cache;
     21     struct genl_family *nl80211;
     22 };
     23 
     24 enum command_identify_by {
     25     CIB_NONE,
     26     CIB_PHY,
     27     CIB_NETDEV,
     28 };
     29 
     30 enum id_input {
     31     II_NONE,
     32     II_NETDEV,
     33     II_PHY_NAME,
     34     II_PHY_IDX,
     35 };
     36 
     37 struct cmd {
     38     const char *name;
     39     const char *args;
     40     const char *help;
     41     const enum nl80211_commands cmd;
     42     int nl_msg_flags;
     43     int hidden;
     44     const enum command_identify_by idby;
     45     /*
     46      * The handler should return a negative error code,
     47      * zero on success, 1 if the arguments were wrong
     48      * and the usage message should and 2 otherwise.
     49      */
     50     int (*handler)(struct nl80211_state *state,
     51                struct nl_cb *cb,
     52                struct nl_msg *msg,
     53                int argc, char **argv);
     54     const struct cmd *parent;
     55 };
     56 
     57 #define ARRAY_SIZE(ar) (sizeof(ar)/sizeof(ar[0]))
     58 
     59 #define __COMMAND(_section, _symname, _name, _args, _nlcmd, _flags, _hidden, _idby, _handler, _help)\
     60     static struct cmd                        \
     61     __cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden\
     62     __attribute__((used)) __attribute__((section("__cmd")))    = {    \
     63         .name = (_name),                    \
     64         .args = (_args),                    \
     65         .cmd = (_nlcmd),                    \
     66         .nl_msg_flags = (_flags),                \
     67         .hidden = (_hidden),                    \
     68         .idby = (_idby),                    \
     69         .handler = (_handler),                    \
     70         .help = (_help),                    \
     71         .parent = _section,                    \
     72      }
     73 #define COMMAND(section, name, args, cmd, flags, idby, handler, help)    \
     74     __COMMAND(&(__section ## _ ## section), name, #name, args, cmd, flags, 0, idby, handler, help)
     75 #define HIDDEN(section, name, args, cmd, flags, idby, handler)        \
     76     __COMMAND(&(__section ## _ ## section), name, #name, args, cmd, flags, 1, idby, handler, NULL)
     77 
     78 #define TOPLEVEL(_name, _args, _nlcmd, _flags, _idby, _handler, _help)    \
     79     struct cmd                            \
     80     __section ## _ ## _name                        \
     81     __attribute__((used)) __attribute__((section("__cmd")))    = {    \
     82         .name = (#_name),                    \
     83         .args = (_args),                    \
     84         .cmd = (_nlcmd),                    \
     85         .nl_msg_flags = (_flags),                \
     86         .idby = (_idby),                    \
     87         .handler = (_handler),                    \
     88         .help = (_help),                    \
     89      }
     90 #define SECTION(_name)                            \
     91     struct cmd __section ## _ ## _name                \
     92     __attribute__((used)) __attribute__((section("__cmd"))) = {    \
     93         .name = (#_name),                    \
     94         .hidden = 1,                        \
     95     }
     96 
     97 #define DECLARE_SECTION(_name)                        \
     98     extern struct cmd __section ## _ ## _name;
     99 
    100 extern int calibrator_debug;
    101 
    102 int handle_cmd(struct nl80211_state *state, enum id_input idby,
    103            int argc, char **argv);
    104 
    105 struct print_event_args {
    106     bool frame, time;
    107 };
    108 
    109 __u32 listen_events(struct nl80211_state *state,
    110             const int n_waits, const __u32 *waits);
    111 __u32 __listen_events(struct nl80211_state *state,
    112               const int n_waits, const __u32 *waits,
    113               struct print_event_args *args);
    114 
    115 
    116 int mac_addr_a2n(unsigned char *mac_addr, char *arg);
    117 void mac_addr_n2a(char *mac_addr, unsigned char *arg);
    118 
    119 int parse_keys(struct nl_msg *msg, char **argv, int argc);
    120 
    121 void print_ht_mcs(const __u8 *mcs);
    122 void print_ampdu_length(__u8 exponent);
    123 void print_ampdu_spacing(__u8 spacing);
    124 void print_ht_capability(__u16 cap);
    125 
    126 const char *iftype_name(enum nl80211_iftype iftype);
    127 const char *command_name(enum nl80211_commands cmd);
    128 int ieee80211_channel_to_frequency(int chan);
    129 int ieee80211_frequency_to_channel(int freq);
    130 
    131 void print_ssid_escaped(const uint8_t len, const uint8_t *data);
    132 
    133 int nl_get_multicast_id(struct nl_sock *sock, const char *family,
    134     const char *group);
    135 
    136 char *reg_initiator_to_string(__u8 initiator);
    137 
    138 const char *get_reason_str(uint16_t reason);
    139 const char *get_status_str(uint16_t status);
    140 
    141 enum print_ie_type {
    142     PRINT_SCAN,
    143     PRINT_LINK,
    144 };
    145 
    146 #define BIT(x) (1ULL<<(x))
    147 
    148 void print_ies(unsigned char *ie, int ielen, bool unknown,
    149            enum print_ie_type ptype);
    150 
    151 
    152 DECLARE_SECTION(set);
    153 DECLARE_SECTION(get);
    154 DECLARE_SECTION(plt);
    155 
    156 #endif /* __CALIBRATOR_H */
    157