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 ---