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 @@ 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 | ||||
| @ -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