X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=lib%2Fnlattr.c;h=c4706eb98d3dfc922ec19fdbb0c23a36fab47a58;hb=29e2035bddecce3eb584a8304528b50da8370a24;hp=80009a24e21dd553a6204310b083ccd5e8bf6cf3;hpb=61a091827e273650b39eb87c799a6d260913fa0b;p=~andy%2Flinux diff --git a/lib/nlattr.c b/lib/nlattr.c index 80009a24e21..c4706eb98d3 100644 --- a/lib/nlattr.c +++ b/lib/nlattr.c @@ -132,6 +132,32 @@ errout: 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 @@ -467,6 +493,7 @@ EXPORT_SYMBOL(nla_append); #endif EXPORT_SYMBOL(nla_validate); +EXPORT_SYMBOL(nla_policy_len); EXPORT_SYMBOL(nla_parse); EXPORT_SYMBOL(nla_find); EXPORT_SYMBOL(nla_strlcpy);