|
@@ -39,13 +39,14 @@ struct genl_info;
|
|
|
* Note that unbind() will not be called symmetrically if the
|
|
|
* generic netlink family is removed while there are still open
|
|
|
* sockets.
|
|
|
- * @attrbuf: buffer to store parsed attributes
|
|
|
- * @family_list: family list
|
|
|
- * @mcgrps: multicast groups used by this family (private)
|
|
|
- * @n_mcgrps: number of multicast groups (private)
|
|
|
+ * @attrbuf: buffer to store parsed attributes (private)
|
|
|
+ * @family_list: family list (private)
|
|
|
+ * @mcgrps: multicast groups used by this family
|
|
|
+ * @n_mcgrps: number of multicast groups
|
|
|
* @mcgrp_offset: starting number of multicast group IDs in this family
|
|
|
- * @ops: the operations supported by this family (private)
|
|
|
- * @n_ops: number of operations supported by this family (private)
|
|
|
+ * (private)
|
|
|
+ * @ops: the operations supported by this family
|
|
|
+ * @n_ops: number of operations supported by this family
|
|
|
*/
|
|
|
struct genl_family {
|
|
|
unsigned int id; /* private */
|
|
@@ -64,10 +65,10 @@ struct genl_family {
|
|
|
int (*mcast_bind)(struct net *net, int group);
|
|
|
void (*mcast_unbind)(struct net *net, int group);
|
|
|
struct nlattr ** attrbuf; /* private */
|
|
|
- const struct genl_ops * ops; /* private */
|
|
|
- const struct genl_multicast_group *mcgrps; /* private */
|
|
|
- unsigned int n_ops; /* private */
|
|
|
- unsigned int n_mcgrps; /* private */
|
|
|
+ const struct genl_ops * ops;
|
|
|
+ const struct genl_multicast_group *mcgrps;
|
|
|
+ unsigned int n_ops;
|
|
|
+ unsigned int n_mcgrps;
|
|
|
unsigned int mcgrp_offset; /* private */
|
|
|
struct list_head family_list; /* private */
|
|
|
struct module *module;
|
|
@@ -132,55 +133,7 @@ struct genl_ops {
|
|
|
u8 flags;
|
|
|
};
|
|
|
|
|
|
-int __genl_register_family(struct genl_family *family);
|
|
|
-
|
|
|
-static inline int genl_register_family(struct genl_family *family)
|
|
|
-{
|
|
|
- family->module = THIS_MODULE;
|
|
|
- return __genl_register_family(family);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * genl_register_family_with_ops - register a generic netlink family with ops
|
|
|
- * @family: generic netlink family
|
|
|
- * @ops: operations to be registered
|
|
|
- * @n_ops: number of elements to register
|
|
|
- *
|
|
|
- * Registers the specified family and operations from the specified table.
|
|
|
- * Only one family may be registered with the same family name or identifier.
|
|
|
- *
|
|
|
- * Either a doit or dumpit callback must be specified for every registered
|
|
|
- * operation or the function will fail. Only one operation structure per
|
|
|
- * command identifier may be registered.
|
|
|
- *
|
|
|
- * See include/net/genetlink.h for more documenation on the operations
|
|
|
- * structure.
|
|
|
- *
|
|
|
- * Return 0 on success or a negative error code.
|
|
|
- */
|
|
|
-static inline int
|
|
|
-_genl_register_family_with_ops_grps(struct genl_family *family,
|
|
|
- const struct genl_ops *ops, size_t n_ops,
|
|
|
- const struct genl_multicast_group *mcgrps,
|
|
|
- size_t n_mcgrps)
|
|
|
-{
|
|
|
- family->module = THIS_MODULE;
|
|
|
- family->ops = ops;
|
|
|
- family->n_ops = n_ops;
|
|
|
- family->mcgrps = mcgrps;
|
|
|
- family->n_mcgrps = n_mcgrps;
|
|
|
- return __genl_register_family(family);
|
|
|
-}
|
|
|
-
|
|
|
-#define genl_register_family_with_ops(family, ops) \
|
|
|
- _genl_register_family_with_ops_grps((family), \
|
|
|
- (ops), ARRAY_SIZE(ops), \
|
|
|
- NULL, 0)
|
|
|
-#define genl_register_family_with_ops_groups(family, ops, grps) \
|
|
|
- _genl_register_family_with_ops_grps((family), \
|
|
|
- (ops), ARRAY_SIZE(ops), \
|
|
|
- (grps), ARRAY_SIZE(grps))
|
|
|
-
|
|
|
+int genl_register_family(struct genl_family *family);
|
|
|
int genl_unregister_family(struct genl_family *family);
|
|
|
void genl_notify(struct genl_family *family, struct sk_buff *skb,
|
|
|
struct genl_info *info, u32 group, gfp_t flags);
|