Commit 17ef66af authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by David S. Miller

net: ipv6: Unify {raw,udp}6_sock_seq_show.

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: default avatarLorenzo Colitti <lorenzo@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 75698b17
...@@ -49,6 +49,12 @@ extern int ip6_datagram_send_ctl(struct net *net, ...@@ -49,6 +49,12 @@ extern int ip6_datagram_send_ctl(struct net *net,
int *hlimit, int *tclass, int *hlimit, int *tclass,
int *dontfrag); int *dontfrag);
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) #define LOOPBACK4_IPV6 cpu_to_be32(0x7f000006)
/* /*
...@@ -58,4 +64,11 @@ extern const struct inet_connection_sock_af_ops ipv4_specific; ...@@ -58,4 +64,11 @@ extern const struct inet_connection_sock_af_ops ipv4_specific;
extern void inet6_destroy_sock(struct sock *sk); extern void inet6_destroy_sock(struct sock *sk);
#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"
#endif #endif
...@@ -879,3 +879,30 @@ int ip6_datagram_send_ctl(struct net *net, struct sock *sk, ...@@ -879,3 +879,30 @@ int ip6_datagram_send_ctl(struct net *net, struct sock *sk,
return err; return err;
} }
EXPORT_SYMBOL_GPL(ip6_datagram_send_ctl); 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));
}
...@@ -1227,45 +1227,16 @@ struct proto rawv6_prot = { ...@@ -1227,45 +1227,16 @@ struct proto rawv6_prot = {
}; };
#ifdef CONFIG_PROC_FS #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) static int raw6_seq_show(struct seq_file *seq, void *v)
{ {
if (v == SEQ_START_TOKEN) if (v == SEQ_START_TOKEN) {
seq_printf(seq, seq_puts(seq, IPV6_SEQ_DGRAM_HEADER);
" sl " } else {
"local_address " struct sock *sp = v;
"remote_address " __u16 srcp = inet_sk(sp)->inet_num;
"st tx_queue rx_queue tr tm->when retrnsmt" ip6_dgram_sock_seq_show(seq, v, srcp, 0,
" uid timeout inode ref pointer drops\n"); raw_seq_private(seq)->bucket);
else }
raw6_sock_seq_show(seq, v, raw_seq_private(seq)->bucket);
return 0; return 0;
} }
......
...@@ -1359,48 +1359,17 @@ static const struct inet6_protocol udpv6_protocol = { ...@@ -1359,48 +1359,17 @@ static const struct inet6_protocol udpv6_protocol = {
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
#ifdef CONFIG_PROC_FS #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) int udp6_seq_show(struct seq_file *seq, void *v)
{ {
if (v == SEQ_START_TOKEN) if (v == SEQ_START_TOKEN) {
seq_printf(seq, seq_puts(seq, IPV6_SEQ_DGRAM_HEADER);
" sl " } else {
"local_address " int bucket = ((struct udp_iter_state *)seq->private)->bucket;
"remote_address " struct inet_sock *inet = inet_sk(v);
"st tx_queue rx_queue tr tm->when retrnsmt" __u16 srcp = ntohs(inet->inet_sport);
" uid timeout inode ref pointer drops\n"); __u16 destp = ntohs(inet->inet_dport);
else ip6_dgram_sock_seq_show(seq, v, srcp, destp, bucket);
udp6_sock_seq_show(seq, v, ((struct udp_iter_state *)seq->private)->bucket); }
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment