From b335ff09be1b7920963da8c11337fee469a8113f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Date: Thu, 21 May 2009 10:34:04 +0000 Subject: [PATCH] --- yaml --- r: 150355 b: refs/heads/master c: a7b11d738282337488ae158c975d76271ad43a98 h: refs/heads/master i: 150353: ccb8e920efcf93f5a0acafe9ef177bb47f91fb4a 150351: 95572375ab54915d738fffce1b8819d57a3fb71b v: v3 --- [refs] | 2 +- trunk/include/net/genetlink.h | 2 ++ trunk/net/netlink/genetlink.c | 46 +++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 29cda51c8e08..38c086b6b1a7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4ea7e38696c7e798c47ebbecadfd392f23f814f9 +refs/heads/master: a7b11d738282337488ae158c975d76271ad43a98 diff --git a/trunk/include/net/genetlink.h b/trunk/include/net/genetlink.h index 747c255d1df0..1b0e3ee4ddd8 100644 --- a/trunk/include/net/genetlink.h +++ b/trunk/include/net/genetlink.h @@ -88,6 +88,8 @@ struct genl_ops }; extern int genl_register_family(struct genl_family *family); +extern int genl_register_family_with_ops(struct genl_family *family, + struct genl_ops *ops, size_t n_ops); extern int genl_unregister_family(struct genl_family *family); extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); diff --git a/trunk/net/netlink/genetlink.c b/trunk/net/netlink/genetlink.c index 1d3dd30099df..eed4c6a8afc0 100644 --- a/trunk/net/netlink/genetlink.c +++ b/trunk/net/netlink/genetlink.c @@ -383,6 +383,52 @@ int genl_register_family(struct genl_family *family) return err; } +/** + * genl_register_family_with_ops - register a generic netlink family + * @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. + * + * The family id may equal GENL_ID_GENERATE causing an unique id to + * be automatically generated and assigned. + * + * 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. + * + * This is equivalent to calling genl_register_family() followed by + * genl_register_ops() for every operation entry in the table taking + * care to unregister the family on error path. + * + * Return 0 on success or a negative error code. + */ +int genl_register_family_with_ops(struct genl_family *family, + struct genl_ops *ops, size_t n_ops) +{ + int err, i; + + err = genl_register_family(family); + if (err) + return err; + + for (i = 0; i < n_ops; ++i, ++ops) { + err = genl_register_ops(family, ops); + if (err) + goto err_out; + } + return 0; +err_out: + genl_unregister_family(family); + return err; +} +EXPORT_SYMBOL(genl_register_family_with_ops); + /** * genl_unregister_family - unregister generic netlink family * @family: generic netlink family