[GENL]: Add genlmsg_put_reply() to simplify building reply headers
By modyfing genlmsg_put() to take a genl_family and by adding genlmsg_put_reply() the process of constructing the netlink and generic netlink headers is simplified. Signed-off-by: Thomas Graf <tgraf@suug.ch> Acked-by: Paul Moore <paul.moore@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
81878d27fd
commit
17c157c889
@@ -457,12 +457,8 @@ list_start:
|
||||
ret_val = -ENOMEM;
|
||||
goto list_failure;
|
||||
}
|
||||
data = netlbl_netlink_hdr_put(ans_skb,
|
||||
info->snd_pid,
|
||||
info->snd_seq,
|
||||
netlbl_cipsov4_gnl_family.id,
|
||||
0,
|
||||
NLBL_CIPSOV4_C_LIST);
|
||||
data = genlmsg_put_reply(ans_skb, info, &netlbl_cipsov4_gnl_family,
|
||||
0, NLBL_CIPSOV4_C_LIST);
|
||||
if (data == NULL) {
|
||||
ret_val = -ENOMEM;
|
||||
goto list_failure;
|
||||
@@ -607,12 +603,9 @@ static int netlbl_cipsov4_listall_cb(struct cipso_v4_doi *doi_def, void *arg)
|
||||
struct netlbl_cipsov4_doiwalk_arg *cb_arg = arg;
|
||||
void *data;
|
||||
|
||||
data = netlbl_netlink_hdr_put(cb_arg->skb,
|
||||
NETLINK_CB(cb_arg->nl_cb->skb).pid,
|
||||
cb_arg->seq,
|
||||
netlbl_cipsov4_gnl_family.id,
|
||||
NLM_F_MULTI,
|
||||
NLBL_CIPSOV4_C_LISTALL);
|
||||
data = genlmsg_put(cb_arg->skb, NETLINK_CB(cb_arg->nl_cb->skb).pid,
|
||||
cb_arg->seq, &netlbl_cipsov4_gnl_family,
|
||||
NLM_F_MULTI, NLBL_CIPSOV4_C_LISTALL);
|
||||
if (data == NULL)
|
||||
goto listall_cb_failure;
|
||||
|
||||
|
@@ -188,12 +188,9 @@ static int netlbl_mgmt_listall_cb(struct netlbl_dom_map *entry, void *arg)
|
||||
struct netlbl_domhsh_walk_arg *cb_arg = arg;
|
||||
void *data;
|
||||
|
||||
data = netlbl_netlink_hdr_put(cb_arg->skb,
|
||||
NETLINK_CB(cb_arg->nl_cb->skb).pid,
|
||||
cb_arg->seq,
|
||||
netlbl_mgmt_gnl_family.id,
|
||||
NLM_F_MULTI,
|
||||
NLBL_MGMT_C_LISTALL);
|
||||
data = genlmsg_put(cb_arg->skb, NETLINK_CB(cb_arg->nl_cb->skb).pid,
|
||||
cb_arg->seq, &netlbl_mgmt_gnl_family,
|
||||
NLM_F_MULTI, NLBL_MGMT_C_LISTALL);
|
||||
if (data == NULL)
|
||||
goto listall_cb_failure;
|
||||
|
||||
@@ -359,12 +356,8 @@ static int netlbl_mgmt_listdef(struct sk_buff *skb, struct genl_info *info)
|
||||
ans_skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||
if (ans_skb == NULL)
|
||||
return -ENOMEM;
|
||||
data = netlbl_netlink_hdr_put(ans_skb,
|
||||
info->snd_pid,
|
||||
info->snd_seq,
|
||||
netlbl_mgmt_gnl_family.id,
|
||||
0,
|
||||
NLBL_MGMT_C_LISTDEF);
|
||||
data = genlmsg_put_reply(ans_skb, info, &netlbl_mgmt_gnl_family,
|
||||
0, NLBL_MGMT_C_LISTDEF);
|
||||
if (data == NULL)
|
||||
goto listdef_failure;
|
||||
|
||||
@@ -422,12 +415,9 @@ static int netlbl_mgmt_protocols_cb(struct sk_buff *skb,
|
||||
int ret_val = -ENOMEM;
|
||||
void *data;
|
||||
|
||||
data = netlbl_netlink_hdr_put(skb,
|
||||
NETLINK_CB(cb->skb).pid,
|
||||
cb->nlh->nlmsg_seq,
|
||||
netlbl_mgmt_gnl_family.id,
|
||||
NLM_F_MULTI,
|
||||
NLBL_MGMT_C_PROTOCOLS);
|
||||
data = genlmsg_put(skb, NETLINK_CB(cb->skb).pid, cb->nlh->nlmsg_seq,
|
||||
&netlbl_mgmt_gnl_family, NLM_F_MULTI,
|
||||
NLBL_MGMT_C_PROTOCOLS);
|
||||
if (data == NULL)
|
||||
goto protocols_cb_failure;
|
||||
|
||||
@@ -495,12 +485,8 @@ static int netlbl_mgmt_version(struct sk_buff *skb, struct genl_info *info)
|
||||
ans_skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||
if (ans_skb == NULL)
|
||||
return -ENOMEM;
|
||||
data = netlbl_netlink_hdr_put(ans_skb,
|
||||
info->snd_pid,
|
||||
info->snd_seq,
|
||||
netlbl_mgmt_gnl_family.id,
|
||||
0,
|
||||
NLBL_MGMT_C_VERSION);
|
||||
data = genlmsg_put_reply(ans_skb, info, &netlbl_mgmt_gnl_family,
|
||||
0, NLBL_MGMT_C_VERSION);
|
||||
if (data == NULL)
|
||||
goto version_failure;
|
||||
|
||||
|
@@ -141,12 +141,8 @@ static int netlbl_unlabel_list(struct sk_buff *skb, struct genl_info *info)
|
||||
ans_skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||
if (ans_skb == NULL)
|
||||
goto list_failure;
|
||||
data = netlbl_netlink_hdr_put(ans_skb,
|
||||
info->snd_pid,
|
||||
info->snd_seq,
|
||||
netlbl_unlabel_gnl_family.id,
|
||||
0,
|
||||
NLBL_UNLABEL_C_LIST);
|
||||
data = genlmsg_put_reply(ans_skb, info, &netlbl_unlabel_gnl_family,
|
||||
0, NLBL_UNLABEL_C_LIST);
|
||||
if (data == NULL) {
|
||||
ret_val = -ENOMEM;
|
||||
goto list_failure;
|
||||
|
@@ -41,37 +41,6 @@
|
||||
|
||||
/* NetLabel NETLINK helper functions */
|
||||
|
||||
/**
|
||||
* netlbl_netlink_hdr_put - Write the NETLINK buffers into a sk_buff
|
||||
* @skb: the packet
|
||||
* @pid: the PID of the receipient
|
||||
* @seq: the sequence number
|
||||
* @type: the generic NETLINK message family type
|
||||
* @cmd: command
|
||||
*
|
||||
* Description:
|
||||
* Write both a NETLINK nlmsghdr structure and a Generic NETLINK genlmsghdr
|
||||
* struct to the packet. Returns a pointer to the start of the payload buffer
|
||||
* on success or NULL on failure.
|
||||
*
|
||||
*/
|
||||
static inline void *netlbl_netlink_hdr_put(struct sk_buff *skb,
|
||||
u32 pid,
|
||||
u32 seq,
|
||||
int type,
|
||||
int flags,
|
||||
u8 cmd)
|
||||
{
|
||||
return genlmsg_put(skb,
|
||||
pid,
|
||||
seq,
|
||||
type,
|
||||
0,
|
||||
flags,
|
||||
cmd,
|
||||
NETLBL_PROTO_VERSION);
|
||||
}
|
||||
|
||||
/**
|
||||
* netlbl_netlink_auditinfo - Fetch the audit information from a NETLINK msg
|
||||
* @skb: the packet
|
||||
|
Reference in New Issue
Block a user