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:
committed by
Patrick McHardy
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,
|
extern int nla_parse(struct nlattr *tb[], int maxtype,
|
||||||
struct nlattr *head, int len,
|
struct nlattr *head, int len,
|
||||||
const struct nla_policy *policy);
|
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 struct nlattr * nla_find(struct nlattr *head, int len, int attrtype);
|
||||||
extern size_t nla_strlcpy(char *dst, const struct nlattr *nla,
|
extern size_t nla_strlcpy(char *dst, const struct nlattr *nla,
|
||||||
size_t dstsize);
|
size_t dstsize);
|
||||||
|
@@ -132,6 +132,32 @@ errout:
|
|||||||
return err;
|
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
|
* nla_parse - Parse a stream of attributes into a tb buffer
|
||||||
* @tb: destination array with maxtype+1 elements
|
* @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_validate);
|
||||||
|
EXPORT_SYMBOL(nla_policy_len);
|
||||||
EXPORT_SYMBOL(nla_parse);
|
EXPORT_SYMBOL(nla_parse);
|
||||||
EXPORT_SYMBOL(nla_find);
|
EXPORT_SYMBOL(nla_find);
|
||||||
EXPORT_SYMBOL(nla_strlcpy);
|
EXPORT_SYMBOL(nla_strlcpy);
|
||||||
|
Reference in New Issue
Block a user