Home | History | Annotate | Download | only in genl
      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 (at) 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
     20 extern "C" {
     21 #endif
     22 
     23 struct nl_cache_ops;
     24 
     25 struct 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  */
     38 struct 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  */
     66 struct 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 
     80 extern int		genl_register(struct nl_cache_ops *);
     81 extern void		genl_unregister(struct nl_cache_ops *);
     82 
     83 #ifdef __cplusplus
     84 }
     85 #endif
     86 
     87 #endif
     88