From patchwork Sun Jul 19 18:23:37 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerrit Renker X-Patchwork-Id: 29984 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 5DEE5B6F35 for ; Mon, 20 Jul 2009 04:36:34 +1000 (EST) Received: by ozlabs.org (Postfix) id 48C81DDD0C; Mon, 20 Jul 2009 04:36:34 +1000 (EST) 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 CFF9FDDD04 for ; Mon, 20 Jul 2009 04:36:33 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750986AbZGSSg0 (ORCPT ); Sun, 19 Jul 2009 14:36:26 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750979AbZGSSgZ (ORCPT ); Sun, 19 Jul 2009 14:36:25 -0400 Received: from dee.erg.abdn.ac.uk ([139.133.204.82]:54919 "EHLO erg.abdn.ac.uk" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750879AbZGSSgY (ORCPT ); Sun, 19 Jul 2009 14:36:24 -0400 Received: from laptev.erg.abdn.ac.uk (Debian-exim@ra-gerrit.erg.abdn.ac.uk [139.133.204.38]) by erg.abdn.ac.uk (8.13.4/8.13.4) with ESMTP id n6JINd9q025643 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Sun, 19 Jul 2009 19:23:39 +0100 (BST) Received: from root by laptev.erg.abdn.ac.uk with local (Exim 4.69) (envelope-from ) id 1MSb2x-0006Ex-Qq; Sun, 19 Jul 2009 20:23:39 +0200 From: Gerrit Renker To: davem@davemloft.net Cc: netdev@vger.kernel.org, Gerrit Renker Subject: [PATCH 2/4] inet6: Consolidate common code for IPv6 Hop Limit / Traffic Class Date: Sun, 19 Jul 2009 20:23:37 +0200 Message-Id: <1248027819-23959-3-git-send-email-gerrit@erg.abdn.ac.uk> X-Mailer: git-send-email 1.6.0.rc2 In-Reply-To: <1248027819-23959-2-git-send-email-gerrit@erg.abdn.ac.uk> References: <1248027819-23959-1-git-send-email-gerrit@erg.abdn.ac.uk> <1248027819-23959-2-git-send-email-gerrit@erg.abdn.ac.uk> X-ERG-MailScanner: Found to be clean X-ERG-MailScanner-From: root@erg.abdn.ac.uk X-Spam-Status: No Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The RFC 3542 definitions for Hop Limit (6.3) and Traffic Class (6.5) cmsg values differ only in the names of the cmsg type. So does the code. The patch combines these commonalities. Further changes: ---------------- Replaced other use of temporary 'int' variable with 'val' variable. Signed-off-by: Gerrit Renker --- net/ipv6/datagram.c | 34 ++++++++++++---------------------- 1 files changed, 12 insertions(+), 22 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c @@ -504,10 +504,10 @@ int datagram_send_ctl(struct net *net, struct cmsghdr *cmsg; struct ipv6_rt_hdr *rthdr; struct ipv6_opt_hdr *hdr; + int val; int len; for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) { - int addr_type; if (!CMSG_OK(msg, cmsg)) return -EINVAL; @@ -532,17 +532,17 @@ int datagram_send_ctl(struct net *net, fl->oif = src_info->ipi6_ifindex; } - addr_type = __ipv6_addr_type(&src_info->ipi6_addr); + val = __ipv6_addr_type(&src_info->ipi6_addr); if (fl->oif) { dev = dev_get_by_index(net, fl->oif); if (!dev) return -ENODEV; - } else if (addr_type & IPV6_ADDR_LINKLOCAL) + } else if (val & IPV6_ADDR_LINKLOCAL) return -EINVAL; - if (addr_type != IPV6_ADDR_ANY) { - int strict = __ipv6_addr_src_scope(addr_type) <= IPV6_ADDR_SCOPE_LINKLOCAL; + if (val != IPV6_ADDR_ANY) { + int strict = __ipv6_addr_src_scope(val) <= IPV6_ADDR_SCOPE_LINKLOCAL; if (!ipv6_chk_addr(net, &src_info->ipi6_addr, strict ? dev : NULL, 0)) return -EINVAL; ipv6_addr_copy(&fl->fl6_src, &src_info->ipi6_addr); @@ -666,30 +666,20 @@ int datagram_send_ctl(struct net *net, case IPV6_2292HOPLIMIT: case IPV6_HOPLIMIT: - if (cmsg->cmsg_len != CMSG_LEN(sizeof(int))) - return -EINVAL; - - *hlimit = *(int *)CMSG_DATA(cmsg); - if (*hlimit < -1 || *hlimit > 0xff) - return -EINVAL; - - break; - case IPV6_TCLASS: - { - int tc; - if (cmsg->cmsg_len != CMSG_LEN(sizeof(int))) return -EINVAL; - tc = *(int *)CMSG_DATA(cmsg); - if (tc < -1 || tc > 0xff) + val = *(int *)CMSG_DATA(cmsg); + if (val < -1 || val > 0xff) return -EINVAL; - *tclass = tc; - + if (cmsg->cmsg_type == IPV6_TCLASS) + *tclass = val; + else + *hlimit = val; break; - } + default: LIMIT_NETDEBUG(KERN_DEBUG "invalid cmsg type: %d\n", cmsg->cmsg_type);