diff options
author | Michał Mirosław <mirq-linux@rere.qmqm.pl> | 2009-05-21 06:34:04 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-05-21 19:50:22 -0400 |
commit | a7b11d738282337488ae158c975d76271ad43a98 (patch) | |
tree | 82c27ba3224309e442fffbaa7e5d9ae6453a20a1 /net/netlink | |
parent | 4ea7e38696c7e798c47ebbecadfd392f23f814f9 (diff) |
genetlink: Introduce genl_register_family_with_ops()
This introduces genl_register_family_with_ops() that registers a genetlink
family along with operations from a table. This is used to kill copy'n'paste
occurrences in following patches.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlink')
-rw-r--r-- | net/netlink/genetlink.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index 1d3dd30099df..eed4c6a8afc0 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c | |||
@@ -384,6 +384,52 @@ errout: | |||
384 | } | 384 | } |
385 | 385 | ||
386 | /** | 386 | /** |
387 | * genl_register_family_with_ops - register a generic netlink family | ||
388 | * @family: generic netlink family | ||
389 | * @ops: operations to be registered | ||
390 | * @n_ops: number of elements to register | ||
391 | * | ||
392 | * Registers the specified family and operations from the specified table. | ||
393 | * Only one family may be registered with the same family name or identifier. | ||
394 | * | ||
395 | * The family id may equal GENL_ID_GENERATE causing an unique id to | ||
396 | * be automatically generated and assigned. | ||
397 | * | ||
398 | * Either a doit or dumpit callback must be specified for every registered | ||
399 | * operation or the function will fail. Only one operation structure per | ||
400 | * command identifier may be registered. | ||
401 | * | ||
402 | * See include/net/genetlink.h for more documenation on the operations | ||
403 | * structure. | ||
404 | * | ||
405 | * This is equivalent to calling genl_register_family() followed by | ||
406 | * genl_register_ops() for every operation entry in the table taking | ||
407 | * care to unregister the family on error path. | ||
408 | * | ||
409 | * Return 0 on success or a negative error code. | ||
410 | */ | ||
411 | int genl_register_family_with_ops(struct genl_family *family, | ||
412 | struct genl_ops *ops, size_t n_ops) | ||
413 | { | ||
414 | int err, i; | ||
415 | |||
416 | err = genl_register_family(family); | ||
417 | if (err) | ||
418 | return err; | ||
419 | |||
420 | for (i = 0; i < n_ops; ++i, ++ops) { | ||
421 | err = genl_register_ops(family, ops); | ||
422 | if (err) | ||
423 | goto err_out; | ||
424 | } | ||
425 | return 0; | ||
426 | err_out: | ||
427 | genl_unregister_family(family); | ||
428 | return err; | ||
429 | } | ||
430 | EXPORT_SYMBOL(genl_register_family_with_ops); | ||
431 | |||
432 | /** | ||
387 | * genl_unregister_family - unregister generic netlink family | 433 | * genl_unregister_family - unregister generic netlink family |
388 | * @family: generic netlink family | 434 | * @family: generic netlink family |
389 | * | 435 | * |