libnl
3.2.3
|
Data Structures | |
struct | genl_cmd |
Generic Netlink Command. More... | |
struct | genl_ops |
Generic Netlink Operations. More... | |
Modules | |
Controller | |
Functions | |
char * | genl_op2name (int family, int op, char *buf, size_t len) |
Register/Unregister | |
int | genl_register (struct nl_cache_ops *ops) |
Register generic netlink operations. | |
void | genl_unregister (struct nl_cache_ops *ops) |
Unregister generic netlink operations. | |
Resolving ID/Name | |
int | genl_ops_resolve (struct nl_sock *sk, struct genl_ops *ops) |
int | genl_mngt_resolve (struct nl_sock *sk) |
#include <netlink/genl/mngt.h> // First step is to define all the commands being used in // particular generic netlink family. The ID and name are // mandatory to be filled out. A callback function and // most the attribute policy that comes with it must be // defined for commands expected to be issued towards // userspace. static struct genl_cmd foo_cmds[] = { { .c_id = FOO_CMD_NEW, .c_name = "NEWFOO" , .c_maxattr = FOO_ATTR_MAX, .c_attr_policy = foo_policy, .c_msg_parser = foo_msg_parser, }, { .c_id = FOO_CMD_DEL, .c_name = "DELFOO" , }, }; // The list of commands must then be integrated into a // struct genl_ops serving as handle for this particular // family. static struct genl_ops my_genl_ops = { .o_cmds = foo_cmds, .o_ncmds = ARRAY_SIZE(foo_cmds), }; // Using the above struct genl_ops an arbitary number of // cache handles can be associated to it. // // The macro GENL_HDRSIZE() must be used to specify the // length of the header to automatically take headers on // generic layers into account. // // The macro GENL_FAMILY() is used to represent the generic // netlink family id. static struct nl_cache_ops genl_foo_ops = { .co_name = "genl/foo", .co_hdrsize = GENL_HDRSIZE(sizeof(struct my_hdr)), .co_msgtypes = GENL_FAMILY(GENL_ID_GENERATE, "foo"), .co_genl = &my_genl_ops, .co_protocol = NETLINK_GENERIC, .co_request_update = foo_request_update, .co_obj_ops = &genl_foo_ops, }; // Finally each cache handle for a generic netlink family // must be registered using genl_register(). static void __init foo_init(void) { genl_register(&genl_foo_ops); } // ... respectively unregsted again. static void __exit foo_exit(void) { genl_unregister(&genl_foo_ops); }
int genl_register | ( | struct nl_cache_ops * | ops | ) |
Register generic netlink operations.
ops | cache operations |
Definition at line 172 of file mngt.c.
References nl_cache_ops::co_hdrsize, nl_cache_ops::co_msg_parser, nl_cache_ops::co_protocol, nl_msgtype::mt_id, nl_msgtype::mt_name, and nl_cache_mngt_register().
void genl_unregister | ( | struct nl_cache_ops * | ops | ) |
Unregister generic netlink operations.
ops | cache operations |
Definition at line 209 of file mngt.c.
References nl_cache_mngt_unregister().