Commit aa85ee5f authored by Johannes Berg's avatar Johannes Berg Committed by David S. Miller
Browse files

genetlink: factor skb preparation out of ctrl_dumppolicy()



We'll need this later for the per-op policy index dump.

Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 04a351a6
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -1154,21 +1154,34 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb)
					      rt->maxattr);
}

static int ctrl_dumppolicy(struct sk_buff *skb, struct netlink_callback *cb)
static void *ctrl_dumppolicy_prep(struct sk_buff *skb,
				  struct netlink_callback *cb)
{
	struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx;

	while (netlink_policy_dump_loop(ctx->state)) {
	void *hdr;
		struct nlattr *nest;

	hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid,
			  cb->nlh->nlmsg_seq, &genl_ctrl,
			  NLM_F_MULTI, CTRL_CMD_GETPOLICY);
	if (!hdr)
			goto nla_put_failure;
		return NULL;

	if (nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, ctx->fam_id))
		return NULL;

	return hdr;
}

static int ctrl_dumppolicy(struct sk_buff *skb, struct netlink_callback *cb)
{
	struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx;

	while (netlink_policy_dump_loop(ctx->state)) {
		void *hdr;
		struct nlattr *nest;

		hdr = ctrl_dumppolicy_prep(skb, cb);
		if (!hdr)
			goto nla_put_failure;

		nest = nla_nest_start(skb, CTRL_ATTR_POLICY);