From patchwork Wed May 29 05:47:37 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Colitti X-Patchwork-Id: 247115 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.180.67]) by ozlabs.org (Postfix) with ESMTP id 89AAB2C0351 for ; Wed, 29 May 2013 15:48:16 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757307Ab3E2Frx (ORCPT ); Wed, 29 May 2013 01:47:53 -0400 Received: from mail-qc0-f202.google.com ([209.85.216.202]:61372 "EHLO mail-qc0-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754425Ab3E2Frv (ORCPT ); Wed, 29 May 2013 01:47:51 -0400 Received: by mail-qc0-f202.google.com with SMTP id d1so904898qcz.3 for ; Tue, 28 May 2013 22:47:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=ycqbl2DXgxhTEKopxbohv3Ab30hYAK/UsYF8ALzNVHc=; b=EzW7cUMSPdGlfxDw0QmhPMZHrUZkZQOGIJ/Q3rUiMt+x+P/P3UuT69jFdL/f2oLcsD tsenL33OW4dudUmtWNTFDanz3v7UvNdUtVqCwQCwr9C4G5dDpEL/ds+hYKMGXhnUuvgj VFrC44MzkkkPkG2/0NLwp2/OuIputILjc1+lGR1xLorQNxZWaiau5x+8WlTPDVMbbaek GMyLyke18JwhkjzKchyL1ZAQ6dWcT8pIjMaGY4dskMhO7ersbf/yZNx/WHdOvictL4qy uEIrAixpbOnoOW16+6MVSLc81EJ8PvfyV/3t2h9DyQEl6gBu4ta3vGzIeAU29+Ca0W8L FHXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=ycqbl2DXgxhTEKopxbohv3Ab30hYAK/UsYF8ALzNVHc=; b=VaRLle3Hf1aPwnXVQFvrn7ztGzI0BT/YJzNWevZi4EZ2KTJ428xoLOysVBamSU2+yN ZMO8fqS5HxIU0Cy37P6MDzhwQenUL2qHATsguLxpf6ObYTPTE9epsL3pRHr88rfK0Cxc bTJGqqIRFk1a3AxTok6aDJhREhtG+6C26aKH1ZC87Awg1LJU8r7x0wD4Dp0f1rTWtQ+J hTg+WoymdQQXhPwZq+EiwQ0ltdHgvBiZDc9P8FI7luF6SgnIbZWGKLCgDPgK1Dizyc0e gBE2AOHVLbfQTYFwHZ626lcONCC6XMOlVKdCmP/mD0nAIqkWG2S83aqI1qVZ5TZtab/p uWJA== X-Received: by 10.236.139.134 with SMTP id c6mr721424yhj.7.1369806470540; Tue, 28 May 2013 22:47:50 -0700 (PDT) Received: from corp2gmr1-1.hot.corp.google.com (corp2gmr1-1.hot.corp.google.com [172.24.189.92]) by gmr-mx.google.com with ESMTPS id u22si572775yhh.7.2013.05.28.22.47.50 for (version=TLSv1.1 cipher=AES128-SHA bits=128/128); Tue, 28 May 2013 22:47:50 -0700 (PDT) Received: from drone2.tok.corp.google.com (drone2.tok.corp.google.com [172.30.88.36]) by corp2gmr1-1.hot.corp.google.com (Postfix) with ESMTP id 26EE331C121; Tue, 28 May 2013 22:47:50 -0700 (PDT) Received: by drone2.tok.corp.google.com (Postfix, from userid 34383) id 04DD0180622; Wed, 29 May 2013 14:47:48 +0900 (JST) From: Lorenzo Colitti To: netdev@vger.kernel.org Cc: Eric Dumazet , David Miller , YOSHIFUJI Hideaki , Vasiliy Kulikov , Lorenzo Colitti Subject: [PATCH v3 1/3] net: ipv6: Unify {raw,udp}6_sock_seq_show. Date: Wed, 29 May 2013 14:47:37 +0900 Message-Id: <1369806459-26901-2-git-send-email-lorenzo@google.com> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1369806459-26901-1-git-send-email-lorenzo@google.com> References: <1369806459-26901-1-git-send-email-lorenzo@google.com> X-Gm-Message-State: ALoCoQngcSMMOOaltqR80lSx+9dr+S5BG//iXdDCQ16VLmgcPUKmaV22tEJL6TTHdW0NbqLU8TQZHPfw0y2G3IkTWGxoO8xUWGhMfN7icqtQ7GTNZL0XZpJkMKqPF3xzOjaBSFe307Ui6P2dE3Hfcbyst2lkk4JJNyxkrK4Gh0YcU5RMIs4alrepjM4LO1OBt6xhM/927+ZE Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org udp6_sock_seq_show and raw6_sock_seq_show are identical, except the UDP version displays ports and the raw version displays the protocol. Refactor most of the code in these two functions into a new common ip6_dgram_sock_seq_show function, in preparation for using it to display ICMPv6 sockets as well. Also reduce the indentation in parts of include/net/transp_v6.h to improve readability. Compiles and displays reasonable results with CONFIG_IPV6={n,m,y} Signed-off-by: Lorenzo Colitti --- include/net/transp_v6.h | 73 +++++++++++++++++++++++++++++-------------------- net/ipv6/datagram.c | 27 ++++++++++++++++++ net/ipv6/raw.c | 45 ++++++------------------------ net/ipv6/udp.c | 49 ++++++--------------------------- 4 files changed, 87 insertions(+), 107 deletions(-) diff --git a/include/net/transp_v6.h b/include/net/transp_v6.h index eb40e71..841c33e 100644 --- a/include/net/transp_v6.h +++ b/include/net/transp_v6.h @@ -16,38 +16,51 @@ extern struct proto pingv6_prot; struct flowi6; /* extension headers */ -extern int ipv6_exthdrs_init(void); -extern void ipv6_exthdrs_exit(void); -extern int ipv6_frag_init(void); -extern void ipv6_frag_exit(void); +extern int ipv6_exthdrs_init(void); +extern void ipv6_exthdrs_exit(void); +extern int ipv6_frag_init(void); +extern void ipv6_frag_exit(void); /* transport protocols */ -extern int pingv6_init(void); -extern void pingv6_exit(void); -extern int rawv6_init(void); -extern void rawv6_exit(void); -extern int udpv6_init(void); -extern void udpv6_exit(void); -extern int udplitev6_init(void); -extern void udplitev6_exit(void); -extern int tcpv6_init(void); -extern void tcpv6_exit(void); - -extern int udpv6_connect(struct sock *sk, - struct sockaddr *uaddr, - int addr_len); - -extern int ip6_datagram_recv_ctl(struct sock *sk, - struct msghdr *msg, - struct sk_buff *skb); - -extern int ip6_datagram_send_ctl(struct net *net, - struct sock *sk, - struct msghdr *msg, - struct flowi6 *fl6, - struct ipv6_txoptions *opt, - int *hlimit, int *tclass, - int *dontfrag); +extern int pingv6_init(void); +extern void pingv6_exit(void); +extern int rawv6_init(void); +extern void rawv6_exit(void); +extern int udpv6_init(void); +extern void udpv6_exit(void); +extern int udplitev6_init(void); +extern void udplitev6_exit(void); +extern int tcpv6_init(void); +extern void tcpv6_exit(void); + +extern int udpv6_connect(struct sock *sk, + struct sockaddr *uaddr, + int addr_len); + +extern int ip6_datagram_recv_ctl(struct sock *sk, + struct msghdr *msg, + struct sk_buff *skb); + +extern int ip6_datagram_send_ctl(struct net *net, + struct sock *sk, + struct msghdr *msg, + struct flowi6 *fl6, + struct ipv6_txoptions *opt, + int *hlimit, int *tclass, + int *dontfrag); + +#define IPV6_SEQ_DGRAM_HEADER \ + " sl " \ + "local_address " \ + "remote_address " \ + "st tx_queue rx_queue tr tm->when retrnsmt" \ + " uid timeout inode ref pointer drops\n" + +extern void ip6_dgram_sock_seq_show(struct seq_file *seq, + struct sock *sp, + __u16 srcp, + __u16 destp, + int bucket); #define LOOPBACK4_IPV6 cpu_to_be32(0x7f000006) diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index 4b56cbb..197e6f4 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c @@ -879,3 +879,30 @@ exit_f: return err; } EXPORT_SYMBOL_GPL(ip6_datagram_send_ctl); + +void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, + __u16 srcp, __u16 destp, int bucket) +{ + struct ipv6_pinfo *np = inet6_sk(sp); + const struct in6_addr *dest, *src; + + dest = &np->daddr; + src = &np->rcv_saddr; + seq_printf(seq, + "%5d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " + "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %pK %d\n", + bucket, + src->s6_addr32[0], src->s6_addr32[1], + src->s6_addr32[2], src->s6_addr32[3], srcp, + dest->s6_addr32[0], dest->s6_addr32[1], + dest->s6_addr32[2], dest->s6_addr32[3], destp, + sp->sk_state, + sk_wmem_alloc_get(sp), + sk_rmem_alloc_get(sp), + 0, 0L, 0, + from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)), + 0, + sock_i_ino(sp), + atomic_read(&sp->sk_refcnt), sp, + atomic_read(&sp->sk_drops)); +} diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index eedff8c..83bef86 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -1226,45 +1226,16 @@ struct proto rawv6_prot = { }; #ifdef CONFIG_PROC_FS -static void raw6_sock_seq_show(struct seq_file *seq, struct sock *sp, int i) -{ - struct ipv6_pinfo *np = inet6_sk(sp); - const struct in6_addr *dest, *src; - __u16 destp, srcp; - - dest = &np->daddr; - src = &np->rcv_saddr; - destp = 0; - srcp = inet_sk(sp)->inet_num; - seq_printf(seq, - "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " - "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %pK %d\n", - i, - src->s6_addr32[0], src->s6_addr32[1], - src->s6_addr32[2], src->s6_addr32[3], srcp, - dest->s6_addr32[0], dest->s6_addr32[1], - dest->s6_addr32[2], dest->s6_addr32[3], destp, - sp->sk_state, - sk_wmem_alloc_get(sp), - sk_rmem_alloc_get(sp), - 0, 0L, 0, - from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)), - 0, - sock_i_ino(sp), - atomic_read(&sp->sk_refcnt), sp, atomic_read(&sp->sk_drops)); -} - static int raw6_seq_show(struct seq_file *seq, void *v) { - if (v == SEQ_START_TOKEN) - seq_printf(seq, - " sl " - "local_address " - "remote_address " - "st tx_queue rx_queue tr tm->when retrnsmt" - " uid timeout inode ref pointer drops\n"); - else - raw6_sock_seq_show(seq, v, raw_seq_private(seq)->bucket); + if (v == SEQ_START_TOKEN) { + seq_puts(seq, IPV6_SEQ_DGRAM_HEADER); + } else { + struct sock *sp = v; + __u16 srcp = inet_sk(sp)->inet_num; + ip6_dgram_sock_seq_show(seq, v, srcp, 0, + raw_seq_private(seq)->bucket); + } return 0; } diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 42923b1..b580853 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -1359,48 +1359,17 @@ static const struct inet6_protocol udpv6_protocol = { /* ------------------------------------------------------------------------ */ #ifdef CONFIG_PROC_FS - -static void udp6_sock_seq_show(struct seq_file *seq, struct sock *sp, int bucket) -{ - struct inet_sock *inet = inet_sk(sp); - struct ipv6_pinfo *np = inet6_sk(sp); - const struct in6_addr *dest, *src; - __u16 destp, srcp; - - dest = &np->daddr; - src = &np->rcv_saddr; - destp = ntohs(inet->inet_dport); - srcp = ntohs(inet->inet_sport); - seq_printf(seq, - "%5d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X " - "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %pK %d\n", - bucket, - src->s6_addr32[0], src->s6_addr32[1], - src->s6_addr32[2], src->s6_addr32[3], srcp, - dest->s6_addr32[0], dest->s6_addr32[1], - dest->s6_addr32[2], dest->s6_addr32[3], destp, - sp->sk_state, - sk_wmem_alloc_get(sp), - sk_rmem_alloc_get(sp), - 0, 0L, 0, - from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)), - 0, - sock_i_ino(sp), - atomic_read(&sp->sk_refcnt), sp, - atomic_read(&sp->sk_drops)); -} - int udp6_seq_show(struct seq_file *seq, void *v) { - if (v == SEQ_START_TOKEN) - seq_printf(seq, - " sl " - "local_address " - "remote_address " - "st tx_queue rx_queue tr tm->when retrnsmt" - " uid timeout inode ref pointer drops\n"); - else - udp6_sock_seq_show(seq, v, ((struct udp_iter_state *)seq->private)->bucket); + if (v == SEQ_START_TOKEN) { + seq_puts(seq, IPV6_SEQ_DGRAM_HEADER); + } else { + int bucket = ((struct udp_iter_state *)seq->private)->bucket; + struct inet_sock *inet = inet_sk(v); + __u16 srcp = ntohs(inet->inet_sport); + __u16 destp = ntohs(inet->inet_dport); + ip6_dgram_sock_seq_show(seq, v, srcp, destp, bucket); + } return 0; }