diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-01-31 19:57:28 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-01-31 19:57:28 +0000 |
commit | ca354290ebe11cc52f6d0002d8ef76d51eb147b8 (patch) | |
tree | 2a465c6e1f04f25f207b2d057b49ea638aba1157 /package/libnl-tiny/src/include/unl.h | |
parent | ef8a192e42823cbf87af5bdbe1378eb9e2e71836 (diff) | |
download | mtk-20170518-ca354290ebe11cc52f6d0002d8ef76d51eb147b8.zip mtk-20170518-ca354290ebe11cc52f6d0002d8ef76d51eb147b8.tar.gz mtk-20170518-ca354290ebe11cc52f6d0002d8ef76d51eb147b8.tar.bz2 |
libnl-tiny: add unl a convenience wrapper around the libnl api
SVN-Revision: 25263
Diffstat (limited to 'package/libnl-tiny/src/include/unl.h')
-rw-r--r-- | package/libnl-tiny/src/include/unl.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/package/libnl-tiny/src/include/unl.h b/package/libnl-tiny/src/include/unl.h new file mode 100644 index 0000000..57e348a --- /dev/null +++ b/package/libnl-tiny/src/include/unl.h @@ -0,0 +1,46 @@ +#ifndef __UNL_H +#define __UNL_H + +#include <netlink/netlink.h> +#include <netlink/genl/genl.h> +#include <netlink/genl/family.h> +#include <stdbool.h> + +struct unl { + struct nl_sock *sock; + struct nl_cache *cache; + struct genl_family *family; + char *family_name; + int hdrlen; + bool loop_done; +}; + +int unl_genl_init(struct unl *unl, const char *family); +void unl_free(struct unl *unl); + +typedef int (*unl_cb)(struct nl_msg *, void *); + +struct nl_msg *unl_genl_msg(struct unl *unl, int cmd, bool dump); +int unl_genl_request(struct unl *unl, struct nl_msg *msg, unl_cb handler, void *arg); +int unl_genl_request_single(struct unl *unl, struct nl_msg *msg, struct nl_msg **dest); +void unl_genl_loop(struct unl *unl, unl_cb handler, void *arg); + +int unl_genl_subscribe(struct unl *unl, const char *name); +int unl_genl_unsubscribe(struct unl *unl, const char *name); + +int unl_nl80211_phy_lookup(const char *name); +int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev); +struct nl_msg *unl_nl80211_phy_msg(struct unl *unl, int phy, int cmd, bool dump); +struct nl_msg *unl_nl80211_vif_msg(struct unl *unl, int dev, int cmd, bool dump); + +static inline void unl_loop_done(struct unl *unl) +{ + unl->loop_done = true; +} + +static inline struct nlattr *unl_find_attr(struct unl *unl, struct nl_msg *msg, int attr) +{ + return nlmsg_find_attr(nlmsg_hdr(msg), unl->hdrlen, attr); +} + +#endif |