Commit 01480e1c authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller

[NETLINK]: Add nla_append()

Used to append data to a message without a header or padding.
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2eb9d75c
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
* nla_reserve_nohdr(skb, len) reserve room for an attribute w/o hdr * nla_reserve_nohdr(skb, len) reserve room for an attribute w/o hdr
* nla_put(skb, type, len, data) add attribute to skb * nla_put(skb, type, len, data) add attribute to skb
* nla_put_nohdr(skb, len, data) add attribute w/o hdr * nla_put_nohdr(skb, len, data) add attribute w/o hdr
* nla_append(skb, len, data) append data to skb
* *
* Attribute Construction for Basic Types: * Attribute Construction for Basic Types:
* nla_put_u8(skb, type, value) add u8 attribute to skb * nla_put_u8(skb, type, value) add u8 attribute to skb
...@@ -254,6 +255,8 @@ extern int nla_put(struct sk_buff *skb, int attrtype, ...@@ -254,6 +255,8 @@ extern int nla_put(struct sk_buff *skb, int attrtype,
int attrlen, const void *data); int attrlen, const void *data);
extern int nla_put_nohdr(struct sk_buff *skb, int attrlen, extern int nla_put_nohdr(struct sk_buff *skb, int attrlen,
const void *data); const void *data);
extern int nla_append(struct sk_buff *skb, int attrlen,
const void *data);
/************************************************************************** /**************************************************************************
* Netlink Messages * Netlink Messages
......
...@@ -430,6 +430,24 @@ int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data) ...@@ -430,6 +430,24 @@ int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data)
return 0; return 0;
} }
/**
* nla_append - Add a netlink attribute without header or padding
* @skb: socket buffer to add attribute to
* @attrlen: length of attribute payload
* @data: head of attribute payload
*
* Returns -1 if the tailroom of the skb is insufficient to store
* the attribute payload.
*/
int nla_append(struct sk_buff *skb, int attrlen, const void *data)
{
if (unlikely(skb_tailroom(skb) < NLA_ALIGN(attrlen)))
return -1;
memcpy(skb_put(skb, attrlen), data, attrlen);
return 0;
}
EXPORT_SYMBOL(nla_validate); EXPORT_SYMBOL(nla_validate);
EXPORT_SYMBOL(nla_parse); EXPORT_SYMBOL(nla_parse);
EXPORT_SYMBOL(nla_find); EXPORT_SYMBOL(nla_find);
...@@ -445,3 +463,4 @@ EXPORT_SYMBOL(nla_put_nohdr); ...@@ -445,3 +463,4 @@ EXPORT_SYMBOL(nla_put_nohdr);
EXPORT_SYMBOL(nla_memcpy); EXPORT_SYMBOL(nla_memcpy);
EXPORT_SYMBOL(nla_memcmp); EXPORT_SYMBOL(nla_memcmp);
EXPORT_SYMBOL(nla_strcmp); EXPORT_SYMBOL(nla_strcmp);
EXPORT_SYMBOL(nla_append);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment