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>
This commit is contained in:
parent
4ea7e38696
commit
a7b11d7382
|
@ -88,6 +88,8 @@ struct genl_ops
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int genl_register_family(struct genl_family *family);
|
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_unregister_family(struct genl_family *family);
|
||||||
extern int genl_register_ops(struct genl_family *, struct genl_ops *ops);
|
extern int genl_register_ops(struct genl_family *, struct genl_ops *ops);
|
||||||
extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops);
|
extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops);
|
||||||
|
|
|
@ -383,6 +383,52 @@ errout:
|
||||||
return err;
|
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
|
* genl_unregister_family - unregister generic netlink family
|
||||||
* @family: generic netlink family
|
* @family: generic netlink family
|
||||||
|
|
Loading…
Reference in New Issue