From patchwork Mon Mar 16 22:07:01 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: holger@eitzenberger.org X-Patchwork-Id: 24531 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 97DE7DDF09 for ; Tue, 17 Mar 2009 09:12:19 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759688AbZCPWLs (ORCPT ); Mon, 16 Mar 2009 18:11:48 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1757468AbZCPWLq (ORCPT ); Mon, 16 Mar 2009 18:11:46 -0400 Received: from moutng.kundenserver.de ([212.227.126.186]:65409 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756424AbZCPWLo (ORCPT ); Mon, 16 Mar 2009 18:11:44 -0400 Received: from kruemel.eitzenberger.org (p54AD0B1E.dip0.t-ipconnect.de [84.173.11.30]) by mrelayeu.kundenserver.de (node=mrelayeu6) with ESMTP (Nemesis) id 0ML29c-1LjL2320ae-0001rB; Mon, 16 Mar 2009 23:11:39 +0100 Received: from [192.168.11.10] (helo=jonathan.eitzenberger.org ident=holger) by kruemel.eitzenberger.org with smtp (Exim 4.50) id 1LjL21-0000HX-PG; Mon, 16 Mar 2009 23:11:38 +0100 Received: by jonathan.eitzenberger.org (sSMTP sendmail emulation); Mon, 16 Mar 2009 23:11:37 +0100 Message-Id: <20090316221137.034320718@jonathan.eitzenberger.org> References: <20090316220659.756862181@jonathan.eitzenberger.org> User-Agent: quilt/0.46-1 Date: Mon, 16 Mar 2009 23:07:01 +0100 From: Holger Eitzenberger To: Patrick McHardy , David Miller Cc: netfilter-devel@vger.kernel.org, netdev@vger.kernel.org Subject: [patch 2/6] netlink: add nla_policy_len() Content-Disposition: inline; filename=netlink-add-nla_policy_len.diff X-Provags-ID: V01U2FsdGVkX19GAPM9FyDj+DaUhTFXuwHZsuYAis1MyeozoHW SSTp1LDko0NAl4yWX0PMWWLNetad7tMtb7i2XB74xGKKZvMXWt i5SZL2OAG8QL14AF+KdUJR+8h/wx5kUXTDlbBNKKLU= Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 Index: net-next-2.6/include/net/netlink.h =================================================================== --- net-next-2.6.orig/include/net/netlink.h +++ net-next-2.6/include/net/netlink.h @@ -230,6 +230,7 @@ extern int nla_validate(struct nlattr * 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); Index: net-next-2.6/net/netlink/attr.c =================================================================== --- net-next-2.6.orig/net/netlink/attr.c +++ net-next-2.6/net/netlink/attr.c @@ -133,6 +133,32 @@ errout: } /** + * 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 * @maxtype: maximum attribute type to be expected @@ -456,6 +482,7 @@ int nla_append(struct sk_buff *skb, int } EXPORT_SYMBOL(nla_validate); +EXPORT_SYMBOL(nla_policy_len); EXPORT_SYMBOL(nla_parse); EXPORT_SYMBOL(nla_find); EXPORT_SYMBOL(nla_strlcpy);