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 | * |
