1/*
2 * netlink/genl/mngt.h		Generic Netlink Management
3 *
4 *	This library is free software; you can redistribute it and/or
5 *	modify it under the terms of the GNU Lesser General Public
6 *	License as published by the Free Software Foundation version 2.1
7 *	of the License.
8 *
9 * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
10 */
11
12#ifndef NETLINK_GENL_MNGT_H_
13#define NETLINK_GENL_MNGT_H_
14
15#include <netlink/netlink.h>
16#include <netlink/attr.h>
17#include <netlink/list.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23struct nl_cache_ops;
24
25struct genl_info
26{
27	struct sockaddr_nl *    who;
28	struct nlmsghdr *       nlh;
29	struct genlmsghdr *     genlhdr;
30	void *                  userhdr;
31	struct nlattr **        attrs;
32};
33
34/**
35 * @ingroup genl_mngt
36 * Generic Netlink Command
37 */
38struct genl_cmd
39{
40	/** Unique command identifier */
41	int			c_id;
42
43	/** Name/description of command */
44	char *			c_name;
45
46	/**
47	 * Maximum attribute identifier, must be provided if
48	 * a message parser is available.
49	 */
50	int			c_maxattr;
51
52	int		      (*c_msg_parser)(struct nl_cache_ops *,
53					      struct genl_cmd *,
54					      struct genl_info *, void *);
55
56	/**
57	 * Attribute validation policy (optional)
58	 */
59	struct nla_policy *	c_attr_policy;
60};
61
62/**
63 * @ingroup genl_mngt
64 * Generic Netlink Operations
65 */
66struct genl_ops
67{
68	int			o_family;
69	int			o_id;
70	char *			o_name;
71	struct nl_cache_ops *	o_cache_ops;
72	struct genl_cmd	*	o_cmds;
73	int			o_ncmds;
74
75	/* linked list of all genl cache operations */
76	struct nl_list_head	o_list;
77};
78
79
80extern int		genl_register(struct nl_cache_ops *);
81extern void		genl_unregister(struct nl_cache_ops *);
82
83#ifdef __cplusplus
84}
85#endif
86
87#endif
88