| From 4dde73731648e5010d50f539ec9fba3d95b024d0 Mon Sep 17 00:00:00 2001 |
| From: Hangbin Liu <liuhangbin@gmail.com> |
| Date: Sat, 29 Feb 2020 17:27:13 +0800 |
| Subject: [PATCH] net/ipv6: use configured metric when add peer route |
| |
| commit 07758eb9ff52794fba15d03aa88d92dbd1b7d125 upstream. |
| |
| When we add peer address with metric configured, IPv4 could set the dest |
| metric correctly, but IPv6 do not. e.g. |
| |
| ]# ip addr add 192.0.2.1 peer 192.0.2.2/32 dev eth1 metric 20 |
| ]# ip route show dev eth1 |
| 192.0.2.2 proto kernel scope link src 192.0.2.1 metric 20 |
| ]# ip addr add 2001:db8::1 peer 2001:db8::2/128 dev eth1 metric 20 |
| ]# ip -6 route show dev eth1 |
| 2001:db8::1 proto kernel metric 20 pref medium |
| 2001:db8::2 proto kernel metric 256 pref medium |
| |
| Fix this by using configured metric instead of default one. |
| |
| Reported-by: Jianlin Shi <jishi@redhat.com> |
| Fixes: 8308f3ff1753 ("net/ipv6: Add support for specifying metric of connected routes") |
| Reviewed-by: David Ahern <dsahern@gmail.com> |
| Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c |
| index 8730f11b03d1..a6fc3095e936 100644 |
| --- a/net/ipv6/addrconf.c |
| +++ b/net/ipv6/addrconf.c |
| @@ -5986,9 +5986,9 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) |
| if (ifp->idev->cnf.forwarding) |
| addrconf_join_anycast(ifp); |
| if (!ipv6_addr_any(&ifp->peer_addr)) |
| - addrconf_prefix_route(&ifp->peer_addr, 128, 0, |
| - ifp->idev->dev, 0, 0, |
| - GFP_ATOMIC); |
| + addrconf_prefix_route(&ifp->peer_addr, 128, |
| + ifp->rt_priority, ifp->idev->dev, |
| + 0, 0, GFP_ATOMIC); |
| break; |
| case RTM_DELADDR: |
| if (ifp->idev->cnf.forwarding) |
| -- |
| 2.7.4 |
| |