Skip to contentSkip to conversation

netpoll: prepare for ipv6

PATCH Superseded Cong Wang 2 participants 5 messages Jan 4, 2013

Subsystems (5)

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore

Cong Wang

author
#0 lore raw

PATCH v3 1/3 netpoll: prepare for ipv6

From: Cong Wang <[email protected]>

v3: fix CONFIG_IPV6=m case

v2: use bool for ipv6 flag
fix !CONFIG_IPV6 case

This patch adjusts some struct and functions, to prepare for supporting IPv6.

Cc David S. Miller <[email protected]>
---
 drivers/net/netconsole.c |   12 +-
 include/linux/netpoll.h  |   13 ++-
 net/core/netpoll.c       |  402 ++++++++++++++++++++++++++--------------------
 3 files changed, 243 insertions(+), 184 deletions(-)
drivers/net/netconsole.c +8 -4
index 6989ebe..998fa02 100644
@@ -269,12 +269,14 @@ static ssize_t show_remote_port(struct netconsole_target *nt, char *buf)
 
 static ssize_t show_local_ip(struct netconsole_target *nt, char *buf)
 {
-	return snprintf(buf, PAGE_SIZE, "%pI4\n", &nt->np.local_ip);
+	if (!nt->np.ipv6)
+		return snprintf(buf, PAGE_SIZE, "%pI4\n", &nt->np.local_ip);
 }
 
 static ssize_t show_remote_ip(struct netconsole_target *nt, char *buf)
 {
-	return snprintf(buf, PAGE_SIZE, "%pI4\n", &nt->np.remote_ip);
+	if (!nt->np.ipv6)
+		return snprintf(buf, PAGE_SIZE, "%pI4\n", &nt->np.remote_ip);
 }
 
 static ssize_t show_local_mac(struct netconsole_target *nt, char *buf)
@@ -410,7 +412,8 @@ static ssize_t store_local_ip(struct netconsole_target *nt,
 		return -EINVAL;
 	}
 
-	nt->np.local_ip = in_aton(buf);
+	if (!strnchr(buf, count, ':'))
+		nt->np.local_ip.ip = in_aton(buf);
 
 	return strnlen(buf, count);
 }
@@ -426,7 +429,8 @@ static ssize_t store_remote_ip(struct netconsole_target *nt,
 		return -EINVAL;
 	}
 
-	nt->np.remote_ip = in_aton(buf);
+	if (!strnchr(buf, count, ':'))
+		nt->np.remote_ip.ip = in_aton(buf);
 
 	return strnlen(buf, count);
 }
include/linux/netpoll.h +11 -2
index 66d5379..f54c3bb 100644
@@ -12,13 +12,22 @@
 #include <linux/rcupdate.h>
 #include <linux/list.h>
 
+union inet_addr {
+	__u32		all[4];
+	__be32		ip;
+	__be32		ip6[4];
+	struct in_addr	in;
+	struct in6_addr	in6;
+};
+
 struct netpoll {
 	struct net_device *dev;
 	char dev_name[IFNAMSIZ];
 	const char *name;
 	void (*rx_hook)(struct netpoll *, int, char *, int);
 
-	__be32 local_ip, remote_ip;
+	union inet_addr local_ip, remote_ip;
+	bool ipv6;
 	u16 local_port, remote_port;
 	u8 remote_mac[ETH_ALEN];
 
@@ -33,7 +42,7 @@ struct netpoll_info {
 	spinlock_t rx_lock;
 	struct list_head rx_np; /* netpolls that registered an rx_hook */
 
-	struct sk_buff_head arp_tx; /* list of arp requests to reply to */
+	struct sk_buff_head neigh_tx; /* list of neigh requests to reply to */
 	struct sk_buff_head txq;
 
 	struct delayed_work tx_work;
net/core/netpoll.c +224 -178

540 lines not on this page · raw message

Signature · 1 line
1.7.7.6
author
#1 lore raw

PATCH v3 2/3 netpoll: add IPv6 support

From: Cong Wang <[email protected]>

Currently, netpoll only supports IPv4. This patch adds IPv6 support to netpoll so that we can run netconsole over IPv6 network.

Cc David S. Miller <[email protected]>
---
 drivers/net/Kconfig      |    5 +
 drivers/net/netconsole.c |   44 +++++++-
 include/net/udp.h        |    2 +
 net/core/netpoll.c       |  253 ++++++++++++++++++++++++++++++++++++++++++++--
 net/ipv6/udp.c           |    3 +-
 5 files changed, 288 insertions(+), 19 deletions(-)
drivers/net/Kconfig +5 -0
index 6a70184..678977c 100644
@@ -181,6 +181,11 @@ config NETCONSOLE_DYNAMIC
 config NETPOLL
 	def_bool NETCONSOLE
 
+config NETPOLL_IPV6
+	bool "Netpoll over IPv6 support"
+	depends on IPV6=y
+	depends on NETPOLL
+
 config NETPOLL_TRAP
 	bool "Netpoll traffic trapping"
 	default n
drivers/net/netconsole.c +38 -6

67 lines not on this page · raw message

include/net/udp.h +2 -0
index 065f379..c3ddb4a 100644
@@ -156,6 +156,8 @@ static inline __wsum udp_csum(struct sk_buff *skb)
 	return csum;
 }
 
+extern int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, int proto);
+
 /* hash routines shared between UDPv4/6 and UDP-Litev4/6 */
 static inline void udp_lib_hash(struct sock *sk)
 {
net/core/netpoll.c +242 -11

333 lines not on this page · raw message

net/ipv6/udp.c +1 -2
index dfaa29b..285754c 100644
@@ -752,8 +752,7 @@ static int __udp6_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
 	return 0;
 }
 
-static inline int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh,
-				 int proto)
+int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, int proto)
 {
 	int err;
 
Signature · 1 line
1.7.7.6
author
#2 lore raw

PATCH v3 3/3 netconsole: add IPv6 example in doc

In reply to Cong Wang

From: Cong Wang <[email protected]>

Update the netconsole document as well.

Cc David S. Miller <[email protected]>
---
 Documentation/networking/netconsole.txt |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
Documentation/networking/netconsole.txt +6 -1
index 2e9e0ae2..a5d574a 100644
@@ -1,9 +1,10 @@
 
 started by Ingo Molnar <[email protected]>, 2001.09.17
 2.6 port and netpoll api by Matt Mackall <[email protected]>, Sep 9 2003
+IPv6 support by Cong Wang <[email protected]>, Jan 1 2013
 
 Please send bug reports to Matt Mackall <[email protected]>
-and Satyam Sharma <[email protected]>
+Satyam Sharma <[email protected]>, and Cong Wang <[email protected]>
 
 Introduction:
 =============
@@ -41,6 +42,10 @@ Examples:
 
  insmod netconsole netconsole=@/,@10.0.0.2/
 
+  or using IPv6
+
+ insmod netconsole netconsole=@/,@fd00:1:2:3::1/
+
 It also supports logging to multiple remote agents by specifying
 parameters for the multiple agents separated by semicolons and the
 complete string enclosed in "quotes", thusly:
Signature · 1 line
1.7.7.6
maintainer
#3 lore raw
In reply to Cong Wang

From: Cong Wang <[email protected]>
Date: Fri, 4 Jan 2013 10:45:39 +0800

Quoted 1 line

v3: fix CONFIG_IPV6=m case

You're talking about a change that isn't even present in this patch.

That's why people do "[PATCH 0/N]" cover postings with their patch series, to collect information like this in the most useful and relevent place.

Then I can check your patch set into a branch, and then do a merge into my master branch and make the merge commit have your cover letter as the commit message.

I'm not applying this series, submit it properly.

Thanks.

author
#4 lore raw
Quoted 11 lines · David Miller

From: Cong Wang <[email protected]>
Date: Fri, 4 Jan 2013 10:45:39 +0800

Quoted 1 line

v3: fix CONFIG_IPV6=m case

You're talking about a change that isn't even present in this patch.

That's why people do "[PATCH 0/N]" cover postings with their patch series, to collect information like this in the most useful and relevent place.

Quoted 6 lines

Then I can check your patch set into a branch, and then do a merge into my master branch and make the merge commit have your cover letter as the commit message.

I'm not applying this series, submit it properly.

Alright, will do. Sorry for my laziness.