aboutsummaryrefslogtreecommitdiff
path: root/datapath/brcompat.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-01-12 13:05:35 -0800
committerBen Pfaff <blp@nicira.com>2011-01-27 21:08:41 -0800
commite2c779b3c277c085fc0e1a3f5b00f0119430af74 (patch)
tree0d0f5330bc4256a29493b9915d24ebec7d2604b4 /datapath/brcompat.c
parent9f2e8c9ef975181317ded7d71c8b5bec172ccb8f (diff)
datapath: Backport genl_register_family_with_ops().
Besides the user introduced in this commit, the new Netlink-based datapath communication code will use this function. Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Jesse Gross <jesse@nicira.com> Reported-by: Justin Pettit <jpettit@nicira.com>
Diffstat (limited to 'datapath/brcompat.c')
-rw-r--r--datapath/brcompat.c53
1 files changed, 18 insertions, 35 deletions
diff --git a/datapath/brcompat.c b/datapath/brcompat.c
index 43cbfb0d..3e91dc5d 100644
--- a/datapath/brcompat.c
+++ b/datapath/brcompat.c
@@ -396,14 +396,6 @@ nla_put_failure:
return err;
}
-static struct genl_ops brc_genl_ops_query_dp = {
- .cmd = BRC_GENL_C_QUERY_MC,
- .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN privelege. */
- .policy = NULL,
- .doit = brc_genl_query,
- .dumpit = NULL
-};
-
/* Attribute policy: what each attribute may contain. */
static struct nla_policy brc_genl_policy[BRC_GENL_A_MAX + 1] = {
[BRC_GENL_A_ERR_CODE] = { .type = NLA_U32 },
@@ -449,20 +441,22 @@ static int brc_genl_dp_result(struct sk_buff *skb, struct genl_info *info)
return err;
}
-static struct genl_ops brc_genl_ops_dp_result = {
- .cmd = BRC_GENL_C_DP_RESULT,
- .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN privelege. */
- .policy = brc_genl_policy,
- .doit = brc_genl_dp_result,
- .dumpit = NULL
-};
-
-static struct genl_ops brc_genl_ops_set_proc = {
- .cmd = BRC_GENL_C_SET_PROC,
- .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN privelege. */
- .policy = brc_genl_policy,
- .doit = brc_genl_set_proc,
- .dumpit = NULL
+static struct genl_ops brc_genl_ops[] = {
+ { .cmd = BRC_GENL_C_QUERY_MC,
+ .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN privelege. */
+ .policy = NULL,
+ .doit = brc_genl_query,
+ },
+ { .cmd = BRC_GENL_C_DP_RESULT,
+ .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN privelege. */
+ .policy = brc_genl_policy,
+ .doit = brc_genl_dp_result,
+ },
+ { .cmd = BRC_GENL_C_SET_PROC,
+ .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN privelege. */
+ .policy = brc_genl_policy,
+ .doit = brc_genl_set_proc,
+ },
};
static struct sk_buff *brc_send_command(struct sk_buff *request,
@@ -535,22 +529,11 @@ static int __init brc_init(void)
/* Register generic netlink family to communicate changes to
* userspace. */
- err = genl_register_family(&brc_genl_family);
+ err = genl_register_family_with_ops(&brc_genl_family,
+ brc_genl_ops, ARRAY_SIZE(brc_genl_ops));
if (err)
goto error;
- err = genl_register_ops(&brc_genl_family, &brc_genl_ops_query_dp);
- if (err != 0)
- goto err_unregister;
-
- err = genl_register_ops(&brc_genl_family, &brc_genl_ops_dp_result);
- if (err != 0)
- goto err_unregister;
-
- err = genl_register_ops(&brc_genl_family, &brc_genl_ops_set_proc);
- if (err != 0)
- goto err_unregister;
-
strcpy(brc_mc_group.name, "brcompat");
err = genl_register_mc_group(&brc_genl_family, &brc_mc_group);
if (err < 0)