/* * netlink/genl/mngt.h Generic Netlink Management * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation version 2.1 * of the License. * * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch> */ #ifndef NETLINK_GENL_MNGT_H_ #define NETLINK_GENL_MNGT_H_ #include <netlink/netlink.h> #include <netlink/attr.h> #include <netlink/list.h> #ifdef __cplusplus extern "C" { #endif struct nl_cache_ops; struct genl_info { struct sockaddr_nl * who; struct nlmsghdr * nlh; struct genlmsghdr * genlhdr; void * userhdr; struct nlattr ** attrs; }; /** * @ingroup genl_mngt * Generic Netlink Command */ struct genl_cmd { /** Unique command identifier */ int c_id; /** Name/description of command */ char * c_name; /** * Maximum attribute identifier, must be provided if * a message parser is available. */ int c_maxattr; int (*c_msg_parser)(struct nl_cache_ops *, struct genl_cmd *, struct genl_info *, void *); /** * Attribute validation policy (optional) */ struct nla_policy * c_attr_policy; }; /** * @ingroup genl_mngt * Generic Netlink Operations */ struct genl_ops { int o_family; int o_id; char * o_name; struct nl_cache_ops * o_cache_ops; struct genl_cmd * o_cmds; int o_ncmds; /* linked list of all genl cache operations */ struct nl_list_head o_list; }; extern int genl_register(struct nl_cache_ops *); extern void genl_unregister(struct nl_cache_ops *); #ifdef __cplusplus } #endif #endif