Skip to contentSkip to conversation

Cleanup the IPv6 addresses printing in /proc files

PATCH Applied Pavel Emelyanov 3 participants 6 messages Oct 23, 2007 – Oct 24, 2007

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Cleanup the IPv6 addresses printing in /proc files

The /proc/net udp6, tcp6 and raw6 files print the IPs of the connection ends. Make a NIP6Lxxx macros (L stands for "long") for making the printing code look nicer.

---

include/linux/kernel.h +7 -0
index 94bc996..5d199ae 100644
@@ -307,6 +307,13 @@ static inline int __attribute__ ((format (printf, 1, 2))) pr_debug(const char *
 #define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
 #define NIP6_SEQFMT "%04x%04x%04x%04x%04x%04x%04x%04x"
 
+#define NIP6L(addr) \
+	((addr).s6_addr32[0]), \
+	((addr).s6_addr32[1]), \
+	((addr).s6_addr32[2]), \
+	((addr).s6_addr32[3])
+#define NIP6L_FMT "%08X%08X%08X%08X"
+
 #if defined(__LITTLE_ENDIAN)
 #define HIPQUAD(addr) \
 	((unsigned char *)&addr)[3], \
net/ipv6/raw.c +2 -6
index ca24ef1..c3a1939 100644
@@ -1250,13 +1250,9 @@ static void raw6_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
 	destp = 0;
 	srcp  = inet_sk(sp)->num;
 	seq_printf(seq,
-		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
+		   "%4d: " NIP6L_FMT ":%04X " NIP6L_FMT ":%04X "
 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p\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,
+		   i, NIP6L(*src), srcp, NIP6L(*dest), destp,
 		   sp->sk_state,
 		   atomic_read(&sp->sk_wmem_alloc),
 		   atomic_read(&sp->sk_rmem_alloc),
net/ipv6/tcp_ipv6.c +7 -20
index 737b755..0041be3 100644
@@ -1945,15 +1945,10 @@ static void get_openreq6(struct seq_file *seq,
 		ttd = 0;
 
 	seq_printf(seq,
-		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
+		   "%4d: " NIP6L_FMT ":%04X " NIP6L_FMT ":%04X "
 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
-		   i,
-		   src->s6_addr32[0], src->s6_addr32[1],
-		   src->s6_addr32[2], src->s6_addr32[3],
-		   ntohs(inet_sk(sk)->sport),
-		   dest->s6_addr32[0], dest->s6_addr32[1],
-		   dest->s6_addr32[2], dest->s6_addr32[3],
-		   ntohs(inet_rsk(req)->rmt_port),
+		   i, NIP6L(*src), ntohs(inet_sk(sk)->sport),
+		   NIP6L(*dest), ntohs(inet_rsk(req)->rmt_port),
 		   TCP_SYN_RECV,
 		   0,0, /* could print option size, but that is af dependent. */
 		   1,   /* timers active (only the expire timer) */
@@ -1996,13 +1991,9 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
 	}
 
 	seq_printf(seq,
-		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
+		   "%4d: " NIP6L_FMT ":%04X " NIP6L_FMT ":%04X "
 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %u %u %u %u %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,
+		   i, NIP6L(*src), srcp, NIP6L(*dest), destp,
 		   sp->sk_state,
 		   tp->write_seq-tp->snd_una,
 		   (sp->sk_state == TCP_LISTEN) ? sp->sk_ack_backlog : (tp->rcv_nxt - tp->copied_seq),
@@ -2037,13 +2028,9 @@ static void get_timewait6_sock(struct seq_file *seq,
 	srcp  = ntohs(tw->tw_sport);
 
 	seq_printf(seq,
-		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
+		   "%4d: " NIP6L_FMT ":%04X " NIP6L_FMT ":%04X "
 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\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,
+		   i, NIP6L(*src), srcp, NIP6L(*dest), destp,
 		   tw->tw_substate, 0, 0,
 		   3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
 		   atomic_read(&tw->tw_refcnt), tw);
net/ipv6/udp.c +2 -6
index caebad6..bcc5f8e 100644
@@ -919,13 +919,9 @@ static void udp6_sock_seq_show(struct seq_file *seq, struct sock *sp, int bucket
 	destp = ntohs(inet->dport);
 	srcp  = ntohs(inet->sport);
 	seq_printf(seq,
-		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
+		   "%4d: " NIP6L_FMT ":%04X " NIP6L_FMT ":%04X "
 		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p\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,
+		   bucket, NIP6L(*src), srcp, NIP6L(*dest), destp,
 		   sp->sk_state,
 		   atomic_read(&sp->sk_wmem_alloc),
 		   atomic_read(&sp->sk_rmem_alloc),
maintainer Applied
#1 lore raw

From: Pavel Emelyanov <[email protected]>
Date: Tue, 23 Oct 2007 20:37:22 +0400

Quoted 5 lines

The /proc/net udp6, tcp6 and raw6 files print the IPs of the connection ends. Make a NIP6Lxxx macros (L stands for "long") for making the printing code look nicer.

Applied, thanks.

#2 lore raw
Quoted 7 lines · David Miller

From: Pavel Emelyanov <[email protected]>
Date: Tue, 23 Oct 2007 20:37:22 +0400

Quoted 4 lines

The /proc/net udp6, tcp6 and raw6 files print the IPs of the connection ends. Make a NIP6Lxxx macros (L stands for "long") for making the printing code look nicer.

Applied, thanks.

Why aren't these addresses converted with ntohl?

maintainer
#3 lore raw

From: Joe Perches <[email protected]>
Date: Tue, 23 Oct 2007 21:04:01 -0700

Quoted 10 lines · David Miller
Quoted 7 lines

From: Pavel Emelyanov <[email protected]>
Date: Tue, 23 Oct 2007 20:37:22 +0400

Quoted 4 lines

The /proc/net udp6, tcp6 and raw6 files print the IPs of the connection ends. Make a NIP6Lxxx macros (L stands for "long") for making the printing code look nicer.

Applied, thanks.

Why aren't these addresses converted with ntohl?

The reason is immaterial because whatever the kernel is doing now we have to keep doing because applications parsing these /proc files expect things to be how they are.

We'll break things if we change it.

#4 lore raw
Quoted 1 line · David Miller

We'll break things if we change it.

Maybe, but definitely the macro names should
reflect this brokenness.

maintainer
#5 lore raw

From: Joe Perches <[email protected]>
Date: Tue, 23 Oct 2007 21:15:36 -0700

Quoted 5 lines · David Miller
Quoted 1 line

We'll break things if we change it.

Maybe, but definitely the macro names should
reflect this brokenness.

That's a good point, we don't want to encourage further use of these things.

Pavel, I'm going to revert this patch for now. It may save some code lines, but it does so at the expense of creating an interface we actually don't want more users of.