route.c (e3c55d406bd8df1a878546002c93db90c42be10c) | route.c (550bab42f83308c9d6ab04a980cc4333cef1c8fa) |
---|---|
1/* 2 * Linux INET6 implementation 3 * FIB front-end. 4 * 5 * Authors: 6 * Pedro Roque <roque@di.fc.ul.pt> 7 * 8 * This program is free software; you can redistribute it and/or --- 837 unchanged lines hidden (view full) --- 846 847 rt = ip6_rt_copy(ort, daddr); 848 849 if (rt) { 850 if (!(rt->rt6i_flags & RTF_GATEWAY)) { 851 if (ort->rt6i_dst.plen != 128 && 852 ipv6_addr_equal(&ort->rt6i_dst.addr, daddr)) 853 rt->rt6i_flags |= RTF_ANYCAST; | 1/* 2 * Linux INET6 implementation 3 * FIB front-end. 4 * 5 * Authors: 6 * Pedro Roque <roque@di.fc.ul.pt> 7 * 8 * This program is free software; you can redistribute it and/or --- 837 unchanged lines hidden (view full) --- 846 847 rt = ip6_rt_copy(ort, daddr); 848 849 if (rt) { 850 if (!(rt->rt6i_flags & RTF_GATEWAY)) { 851 if (ort->rt6i_dst.plen != 128 && 852 ipv6_addr_equal(&ort->rt6i_dst.addr, daddr)) 853 rt->rt6i_flags |= RTF_ANYCAST; |
854 rt->rt6i_gateway = *daddr; | |
855 } 856 857 rt->rt6i_flags |= RTF_CACHE; 858 859#ifdef CONFIG_IPV6_SUBTREES 860 if (rt->rt6i_src.plen && saddr) { 861 rt->rt6i_src.addr = *saddr; 862 rt->rt6i_src.plen = 128; --- 470 unchanged lines hidden (view full) --- 1333 in6_dev_put(idev); 1334 dst = ERR_PTR(-ENOMEM); 1335 goto out; 1336 } 1337 1338 rt->dst.flags |= DST_HOST; 1339 rt->dst.output = ip6_output; 1340 atomic_set(&rt->dst.__refcnt, 1); | 854 } 855 856 rt->rt6i_flags |= RTF_CACHE; 857 858#ifdef CONFIG_IPV6_SUBTREES 859 if (rt->rt6i_src.plen && saddr) { 860 rt->rt6i_src.addr = *saddr; 861 rt->rt6i_src.plen = 128; --- 470 unchanged lines hidden (view full) --- 1332 in6_dev_put(idev); 1333 dst = ERR_PTR(-ENOMEM); 1334 goto out; 1335 } 1336 1337 rt->dst.flags |= DST_HOST; 1338 rt->dst.output = ip6_output; 1339 atomic_set(&rt->dst.__refcnt, 1); |
1340 rt->rt6i_gateway = fl6->daddr; |
|
1341 rt->rt6i_dst.addr = fl6->daddr; 1342 rt->rt6i_dst.plen = 128; 1343 rt->rt6i_idev = idev; 1344 dst_metric_set(&rt->dst, RTAX_HOPLIMIT, 0); 1345 1346 spin_lock_bh(&icmp6_dst_lock); 1347 rt->dst.next = icmp6_dst_gc_list; 1348 icmp6_dst_gc_list = &rt->dst; --- 519 unchanged lines hidden (view full) --- 1868 rt->rt6i_dst.plen = 128; 1869 dst_copy_metrics(&rt->dst, &ort->dst); 1870 rt->dst.error = ort->dst.error; 1871 rt->rt6i_idev = ort->rt6i_idev; 1872 if (rt->rt6i_idev) 1873 in6_dev_hold(rt->rt6i_idev); 1874 rt->dst.lastuse = jiffies; 1875 | 1341 rt->rt6i_dst.addr = fl6->daddr; 1342 rt->rt6i_dst.plen = 128; 1343 rt->rt6i_idev = idev; 1344 dst_metric_set(&rt->dst, RTAX_HOPLIMIT, 0); 1345 1346 spin_lock_bh(&icmp6_dst_lock); 1347 rt->dst.next = icmp6_dst_gc_list; 1348 icmp6_dst_gc_list = &rt->dst; --- 519 unchanged lines hidden (view full) --- 1868 rt->rt6i_dst.plen = 128; 1869 dst_copy_metrics(&rt->dst, &ort->dst); 1870 rt->dst.error = ort->dst.error; 1871 rt->rt6i_idev = ort->rt6i_idev; 1872 if (rt->rt6i_idev) 1873 in6_dev_hold(rt->rt6i_idev); 1874 rt->dst.lastuse = jiffies; 1875 |
1876 rt->rt6i_gateway = ort->rt6i_gateway; | 1876 if (ort->rt6i_flags & RTF_GATEWAY) 1877 rt->rt6i_gateway = ort->rt6i_gateway; 1878 else 1879 rt->rt6i_gateway = *dest; |
1877 rt->rt6i_flags = ort->rt6i_flags; 1878 if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) == 1879 (RTF_DEFAULT | RTF_ADDRCONF)) 1880 rt6_set_from(rt, ort); 1881 rt->rt6i_metric = 0; 1882 1883#ifdef CONFIG_IPV6_SUBTREES 1884 memcpy(&rt->rt6i_src, &ort->rt6i_src, sizeof(struct rt6key)); --- 270 unchanged lines hidden (view full) --- 2155 rt->rt6i_idev = idev; 2156 2157 rt->rt6i_flags = RTF_UP | RTF_NONEXTHOP; 2158 if (anycast) 2159 rt->rt6i_flags |= RTF_ANYCAST; 2160 else 2161 rt->rt6i_flags |= RTF_LOCAL; 2162 | 1880 rt->rt6i_flags = ort->rt6i_flags; 1881 if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) == 1882 (RTF_DEFAULT | RTF_ADDRCONF)) 1883 rt6_set_from(rt, ort); 1884 rt->rt6i_metric = 0; 1885 1886#ifdef CONFIG_IPV6_SUBTREES 1887 memcpy(&rt->rt6i_src, &ort->rt6i_src, sizeof(struct rt6key)); --- 270 unchanged lines hidden (view full) --- 2158 rt->rt6i_idev = idev; 2159 2160 rt->rt6i_flags = RTF_UP | RTF_NONEXTHOP; 2161 if (anycast) 2162 rt->rt6i_flags |= RTF_ANYCAST; 2163 else 2164 rt->rt6i_flags |= RTF_LOCAL; 2165 |
2166 rt->rt6i_gateway = *addr; |
|
2163 rt->rt6i_dst.addr = *addr; 2164 rt->rt6i_dst.plen = 128; 2165 rt->rt6i_table = fib6_get_table(net, RT6_TABLE_LOCAL); 2166 2167 atomic_set(&rt->dst.__refcnt, 1); 2168 2169 return rt; 2170} --- 1070 unchanged lines hidden --- | 2167 rt->rt6i_dst.addr = *addr; 2168 rt->rt6i_dst.plen = 128; 2169 rt->rt6i_table = fib6_get_table(net, RT6_TABLE_LOCAL); 2170 2171 atomic_set(&rt->dst.__refcnt, 1); 2172 2173 return rt; 2174} --- 1070 unchanged lines hidden --- |