mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
netlink: add nla_policy_len()
It calculates the max. length of a Netlink policy, which is usefull for allocating Netlink buffers roughly the size of the actual message. Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org> Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
parent
d0dba7255b
commit
e487eb99cf
@ -230,6 +230,7 @@ extern int nla_validate(struct nlattr *head, int len, int maxtype,
|
||||
extern int nla_parse(struct nlattr *tb[], int maxtype,
|
||||
struct nlattr *head, int len,
|
||||
const struct nla_policy *policy);
|
||||
extern int nla_policy_len(const struct nla_policy *, int);
|
||||
extern struct nlattr * nla_find(struct nlattr *head, int len, int attrtype);
|
||||
extern size_t nla_strlcpy(char *dst, const struct nlattr *nla,
|
||||
size_t dstsize);
|
||||
|
@ -132,6 +132,32 @@ int nla_validate(struct nlattr *head, int len, int maxtype,
|
||||
return err;
|
||||
}
|
||||
|
||||
/**
|
||||
* nla_policy_len - Determin the max. length of a policy
|
||||
* @policy: policy to use
|
||||
* @n: number of policies
|
||||
*
|
||||
* Determines the max. length of the policy. It is currently used
|
||||
* to allocated Netlink buffers roughly the size of the actual
|
||||
* message.
|
||||
*
|
||||
* Returns 0 on success or a negative error code.
|
||||
*/
|
||||
int
|
||||
nla_policy_len(const struct nla_policy *p, int n)
|
||||
{
|
||||
int i, len = 0;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (p->len)
|
||||
len += nla_total_size(p->len);
|
||||
else if (nla_attr_minlen[p->type])
|
||||
len += nla_total_size(nla_attr_minlen[p->type]);
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
/**
|
||||
* nla_parse - Parse a stream of attributes into a tb buffer
|
||||
* @tb: destination array with maxtype+1 elements
|
||||
@ -456,6 +482,7 @@ int nla_append(struct sk_buff *skb, int attrlen, const void *data)
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(nla_validate);
|
||||
EXPORT_SYMBOL(nla_policy_len);
|
||||
EXPORT_SYMBOL(nla_parse);
|
||||
EXPORT_SYMBOL(nla_find);
|
||||
EXPORT_SYMBOL(nla_strlcpy);
|
||||
|
Loading…
Reference in New Issue
Block a user