[iproute/f16] Support IPv6 addresses for route's nexthop

Petr Šabata psabata at fedoraproject.org
Thu Dec 20 16:06:42 UTC 2012


commit 04fa3365dc8ffb78a143348aebecf8c7bb19c1d3
Author: Petr Šabata <contyk at redhat.com>
Date:   Thu Dec 20 17:06:38 2012 +0100

    Support IPv6 addresses for route's nexthop

 iproute.spec                      |    7 ++++-
 iproute2-3.7.0-ipv6-nexthop.patch |   59 +++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 1 deletions(-)
---
diff --git a/iproute.spec b/iproute.spec
index aa16cab..874c7e7 100644
--- a/iproute.spec
+++ b/iproute.spec
@@ -2,7 +2,7 @@
 Summary:            Advanced IP routing and network device configuration tools
 Name:               iproute
 Version:            2.6.39
-Release:            7%{?dist}
+Release:            8%{?dist}
 Group:              Applications/System
 URL:                http://www.linuxfoundation.org/collaborate/workgroups/networking/%{name}2
 Source0:            http://devresources.linuxfoundation.org/dev/iproute2/download/%{name}2-%{version}.tar.gz
@@ -24,6 +24,7 @@ Patch12:            iproute2-2.6.39-Display-closed-UDP-sockets-on-ss-ul.patch
 Patch13:            iproute2-2.6.39-Dont-put-configure-files-in-tmp.patch
 Patch14:            iproute2-2.6.39-dhcp-client-script-dont-use-tmp.patch
 Patch15:            iproute2-3.7.0-ss-change-default-filter-to-include-all-soc.patch
+Patch16:            iproute2-3.7.0-ipv6-nexthop.patch
 
 License:            GPLv2+ and Public Domain
 BuildRequires:      tex(latex) tex(dvips) linuxdoc-tools
@@ -72,6 +73,7 @@ sed -i "s/_VERSION_/%{version}/" man/man8/ss.8
 %patch13 -p1 -b .tmp
 %patch14 -p1 -b .tmp-dhcp
 %patch15 -p1 -b .ss-list-all
+%patch16 -p1 -b .ipv6-nexthop
 
 %build
 export LIBDIR=/%{_libdir}
@@ -194,6 +196,9 @@ done
 %{_includedir}/libnetlink.h
 
 %changelog
+* Thu Dec 20 2012 Petr Šabata <contyk at redhat.com> - 2.6.39-8
+- Support IPv6 addresses for route's nexthop
+
 * Wed Dec 12 2012 Petr Šabata <contyk at redhat.com> - 2.6.39-7
 - ss: list all, not just TCP sockets by default (#829630)
 
diff --git a/iproute2-3.7.0-ipv6-nexthop.patch b/iproute2-3.7.0-ipv6-nexthop.patch
new file mode 100644
index 0000000..7f8ef80
--- /dev/null
+++ b/iproute2-3.7.0-ipv6-nexthop.patch
@@ -0,0 +1,59 @@
+From 4d6c3796a5cba380afca43c46aeafd2cbf997323 Mon Sep 17 00:00:00 2001
+From: Vincent Bernat <bernat at luffy.cx>
+Date: Tue, 23 Oct 2012 14:42:55 +0200
+Subject: [PATCH] ip: fix "ip -6 route add ... nexthop"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+IPv6 multipath routes were not accepted by "ip route" because an IPv4
+address was expected for each gateway. Use `get_addr()` instead of
+`get_addr32()`.
+
+Signed-off-by: Vincent Bernat <bernat at luffy.cx>
+Signed-off-by: Nicolas Dichtel <nicolas.dichtel at 6wind.com>
+Signed-off-by: Petr Šabata <contyk at redhat.com>
+---
+ ip/iproute.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/ip/iproute.c b/ip/iproute.c
+index 3e5f8d0..c60156f 100644
+--- a/ip/iproute.c
++++ b/ip/iproute.c
+@@ -625,16 +625,20 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
+ }
+ 
+ 
+-int parse_one_nh(struct rtattr *rta, struct rtnexthop *rtnh, int *argcp, char ***argvp)
++int parse_one_nh(struct rtmsg *r, struct rtattr *rta, struct rtnexthop *rtnh, int *argcp, char ***argvp)
+ {
+ 	int argc = *argcp;
+ 	char **argv = *argvp;
+ 
+ 	while (++argv, --argc > 0) {
+ 		if (strcmp(*argv, "via") == 0) {
++			inet_prefix addr;
+ 			NEXT_ARG();
+-			rta_addattr32(rta, 4096, RTA_GATEWAY, get_addr32(*argv));
+-			rtnh->rtnh_len += sizeof(struct rtattr) + 4;
++			get_addr(&addr, *argv, r->rtm_family);
++			if (r->rtm_family == AF_UNSPEC)
++				r->rtm_family = addr.family;
++			rta_addattr_l(rta, 4096, RTA_GATEWAY, &addr.data, addr.bytelen);
++			rtnh->rtnh_len += sizeof(struct rtattr) + addr.bytelen;
+ 		} else if (strcmp(*argv, "dev") == 0) {
+ 			NEXT_ARG();
+ 			if ((rtnh->rtnh_ifindex = ll_name_to_index(*argv)) == 0) {
+@@ -686,7 +690,7 @@ int parse_nexthops(struct nlmsghdr *n, struct rtmsg *r, int argc, char **argv)
+ 		memset(rtnh, 0, sizeof(*rtnh));
+ 		rtnh->rtnh_len = sizeof(*rtnh);
+ 		rta->rta_len += rtnh->rtnh_len;
+-		parse_one_nh(rta, rtnh, &argc, &argv);
++		parse_one_nh(r, rta, rtnh, &argc, &argv);
+ 		rtnh = RTNH_NEXT(rtnh);
+ 	}
+ 
+-- 
+1.7.11.7
+


More information about the scm-commits mailing list