Message ID | 1423771650-870555-1-git-send-email-kafai@fb.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Hi, On Do, 2015-02-12 at 12:07 -0800, Martin KaFai Lau wrote: > ipv6_cow_metrics() currently assumes only DST_HOST routes require > dynamic metrics allocation from inetpeer. The assumption breaks > when ndisc discovered router with RTAX_MTU and RTAX_HOPLIMIT metric. > Refer to ndisc_router_discovery() in ndisc.c and note that dst_metric_set() > is called after the route is created. > > This patch creates the metrics array (by calling dst_cow_metrics_generic) in > ipv6_cow_metrics(). > > Test: > radvd.conf: > interface qemubr0 > { > AdvLinkMTU 1300; > AdvCurHopLimit 30; > > prefix fd00:face:face:face::/64 > { > AdvOnLink on; > AdvAutonomous on; > AdvRouterAddr off; > }; > }; > > Before: > [root@qemu1 ~]# ip -6 r show | egrep -v unreachable > fd00:face:face:face::/64 dev eth0 proto kernel metric 256 expires 27sec > fe80::/64 dev eth0 proto kernel metric 256 > default via fe80::74df:d0ff:fe23:8ef2 dev eth0 proto ra metric 1024 expires 27sec > > After: > [root@qemu1 ~]# ip -6 r show | egrep -v unreachable > fd00:face:face:face::/64 dev eth0 proto kernel metric 256 expires 27sec mtu 1300 > fe80::/64 dev eth0 proto kernel metric 256 mtu 1300 > default via fe80::74df:d0ff:fe23:8ef2 dev eth0 proto ra metric 1024 expires 27sec mtu 1300 hoplimit 30 > > Signed-off-by: Martin KaFai Lau <kafai@fb.com> Looks good to me. This fixes 8e2ec639173f325 ("ipv6: don't use inetpeer to store metrics for routes.")? Thanks, Hannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Feb 12, 2015 at 04:32:39PM -0500, Hannes Frederic Sowa wrote: > This fixes 8e2ec639173f325 ("ipv6: don't use inetpeer to store metrics > for routes.")? Correct. I will add the 'Fixes' tag and repost. Thanks! --Martin -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 98565ce..4688bd4 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -141,7 +141,7 @@ static u32 *ipv6_cow_metrics(struct dst_entry *dst, unsigned long old) u32 *p = NULL; if (!(rt->dst.flags & DST_HOST)) - return NULL; + return dst_cow_metrics_generic(dst, old); peer = rt6_get_peer_create(rt); if (peer) {
ipv6_cow_metrics() currently assumes only DST_HOST routes require dynamic metrics allocation from inetpeer. The assumption breaks when ndisc discovered router with RTAX_MTU and RTAX_HOPLIMIT metric. Refer to ndisc_router_discovery() in ndisc.c and note that dst_metric_set() is called after the route is created. This patch creates the metrics array (by calling dst_cow_metrics_generic) in ipv6_cow_metrics(). Test: radvd.conf: interface qemubr0 { AdvLinkMTU 1300; AdvCurHopLimit 30; prefix fd00:face:face:face::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; }; Before: [root@qemu1 ~]# ip -6 r show | egrep -v unreachable fd00:face:face:face::/64 dev eth0 proto kernel metric 256 expires 27sec fe80::/64 dev eth0 proto kernel metric 256 default via fe80::74df:d0ff:fe23:8ef2 dev eth0 proto ra metric 1024 expires 27sec After: [root@qemu1 ~]# ip -6 r show | egrep -v unreachable fd00:face:face:face::/64 dev eth0 proto kernel metric 256 expires 27sec mtu 1300 fe80::/64 dev eth0 proto kernel metric 256 mtu 1300 default via fe80::74df:d0ff:fe23:8ef2 dev eth0 proto ra metric 1024 expires 27sec mtu 1300 hoplimit 30 Signed-off-by: Martin KaFai Lau <kafai@fb.com> --- net/ipv6/route.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)