• Martin KaFai Lau's avatar
    ipv6: fix ipv6_cow_metrics for non DST_HOST case · 677aa4a2
    Martin KaFai Lau authored
    [ Upstream commit 3b471175 ]
    
    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
    
    Fixes: 8e2ec639 (ipv6: don't use inetpeer to store metrics for routes.)
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
    677aa4a2
route.c 77.3 KB