diff options
Diffstat (limited to 'net/decnet/dn_route.c')
-rw-r--r-- | net/decnet/dn_route.c | 158 |
1 files changed, 79 insertions, 79 deletions
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index 812e6dff6067..6585ea6d1182 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c | |||
@@ -146,13 +146,13 @@ static __inline__ unsigned dn_hash(__le16 src, __le16 dst) | |||
146 | 146 | ||
147 | static inline void dnrt_free(struct dn_route *rt) | 147 | static inline void dnrt_free(struct dn_route *rt) |
148 | { | 148 | { |
149 | call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free); | 149 | call_rcu_bh(&rt->dst.rcu_head, dst_rcu_free); |
150 | } | 150 | } |
151 | 151 | ||
152 | static inline void dnrt_drop(struct dn_route *rt) | 152 | static inline void dnrt_drop(struct dn_route *rt) |
153 | { | 153 | { |
154 | dst_release(&rt->u.dst); | 154 | dst_release(&rt->dst); |
155 | call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free); | 155 | call_rcu_bh(&rt->dst.rcu_head, dst_rcu_free); |
156 | } | 156 | } |
157 | 157 | ||
158 | static void dn_dst_check_expire(unsigned long dummy) | 158 | static void dn_dst_check_expire(unsigned long dummy) |
@@ -167,13 +167,13 @@ static void dn_dst_check_expire(unsigned long dummy) | |||
167 | 167 | ||
168 | spin_lock(&dn_rt_hash_table[i].lock); | 168 | spin_lock(&dn_rt_hash_table[i].lock); |
169 | while((rt=*rtp) != NULL) { | 169 | while((rt=*rtp) != NULL) { |
170 | if (atomic_read(&rt->u.dst.__refcnt) || | 170 | if (atomic_read(&rt->dst.__refcnt) || |
171 | (now - rt->u.dst.lastuse) < expire) { | 171 | (now - rt->dst.lastuse) < expire) { |
172 | rtp = &rt->u.dst.dn_next; | 172 | rtp = &rt->dst.dn_next; |
173 | continue; | 173 | continue; |
174 | } | 174 | } |
175 | *rtp = rt->u.dst.dn_next; | 175 | *rtp = rt->dst.dn_next; |
176 | rt->u.dst.dn_next = NULL; | 176 | rt->dst.dn_next = NULL; |
177 | dnrt_free(rt); | 177 | dnrt_free(rt); |
178 | } | 178 | } |
179 | spin_unlock(&dn_rt_hash_table[i].lock); | 179 | spin_unlock(&dn_rt_hash_table[i].lock); |
@@ -198,13 +198,13 @@ static int dn_dst_gc(struct dst_ops *ops) | |||
198 | rtp = &dn_rt_hash_table[i].chain; | 198 | rtp = &dn_rt_hash_table[i].chain; |
199 | 199 | ||
200 | while((rt=*rtp) != NULL) { | 200 | while((rt=*rtp) != NULL) { |
201 | if (atomic_read(&rt->u.dst.__refcnt) || | 201 | if (atomic_read(&rt->dst.__refcnt) || |
202 | (now - rt->u.dst.lastuse) < expire) { | 202 | (now - rt->dst.lastuse) < expire) { |
203 | rtp = &rt->u.dst.dn_next; | 203 | rtp = &rt->dst.dn_next; |
204 | continue; | 204 | continue; |
205 | } | 205 | } |
206 | *rtp = rt->u.dst.dn_next; | 206 | *rtp = rt->dst.dn_next; |
207 | rt->u.dst.dn_next = NULL; | 207 | rt->dst.dn_next = NULL; |
208 | dnrt_drop(rt); | 208 | dnrt_drop(rt); |
209 | break; | 209 | break; |
210 | } | 210 | } |
@@ -287,25 +287,25 @@ static int dn_insert_route(struct dn_route *rt, unsigned hash, struct dn_route * | |||
287 | while((rth = *rthp) != NULL) { | 287 | while((rth = *rthp) != NULL) { |
288 | if (compare_keys(&rth->fl, &rt->fl)) { | 288 | if (compare_keys(&rth->fl, &rt->fl)) { |
289 | /* Put it first */ | 289 | /* Put it first */ |
290 | *rthp = rth->u.dst.dn_next; | 290 | *rthp = rth->dst.dn_next; |
291 | rcu_assign_pointer(rth->u.dst.dn_next, | 291 | rcu_assign_pointer(rth->dst.dn_next, |
292 | dn_rt_hash_table[hash].chain); | 292 | dn_rt_hash_table[hash].chain); |
293 | rcu_assign_pointer(dn_rt_hash_table[hash].chain, rth); | 293 | rcu_assign_pointer(dn_rt_hash_table[hash].chain, rth); |
294 | 294 | ||
295 | dst_use(&rth->u.dst, now); | 295 | dst_use(&rth->dst, now); |
296 | spin_unlock_bh(&dn_rt_hash_table[hash].lock); | 296 | spin_unlock_bh(&dn_rt_hash_table[hash].lock); |
297 | 297 | ||
298 | dnrt_drop(rt); | 298 | dnrt_drop(rt); |
299 | *rp = rth; | 299 | *rp = rth; |
300 | return 0; | 300 | return 0; |
301 | } | 301 | } |
302 | rthp = &rth->u.dst.dn_next; | 302 | rthp = &rth->dst.dn_next; |
303 | } | 303 | } |
304 | 304 | ||
305 | rcu_assign_pointer(rt->u.dst.dn_next, dn_rt_hash_table[hash].chain); | 305 | rcu_assign_pointer(rt->dst.dn_next, dn_rt_hash_table[hash].chain); |
306 | rcu_assign_pointer(dn_rt_hash_table[hash].chain, rt); | 306 | rcu_assign_pointer(dn_rt_hash_table[hash].chain, rt); |
307 | 307 | ||
308 | dst_use(&rt->u.dst, now); | 308 | dst_use(&rt->dst, now); |
309 | spin_unlock_bh(&dn_rt_hash_table[hash].lock); | 309 | spin_unlock_bh(&dn_rt_hash_table[hash].lock); |
310 | *rp = rt; | 310 | *rp = rt; |
311 | return 0; | 311 | return 0; |
@@ -323,8 +323,8 @@ static void dn_run_flush(unsigned long dummy) | |||
323 | goto nothing_to_declare; | 323 | goto nothing_to_declare; |
324 | 324 | ||
325 | for(; rt; rt=next) { | 325 | for(; rt; rt=next) { |
326 | next = rt->u.dst.dn_next; | 326 | next = rt->dst.dn_next; |
327 | rt->u.dst.dn_next = NULL; | 327 | rt->dst.dn_next = NULL; |
328 | dst_free((struct dst_entry *)rt); | 328 | dst_free((struct dst_entry *)rt); |
329 | } | 329 | } |
330 | 330 | ||
@@ -743,7 +743,7 @@ static int dn_forward(struct sk_buff *skb) | |||
743 | /* Ensure that we have enough space for headers */ | 743 | /* Ensure that we have enough space for headers */ |
744 | rt = (struct dn_route *)skb_dst(skb); | 744 | rt = (struct dn_route *)skb_dst(skb); |
745 | header_len = dn_db->use_long ? 21 : 6; | 745 | header_len = dn_db->use_long ? 21 : 6; |
746 | if (skb_cow(skb, LL_RESERVED_SPACE(rt->u.dst.dev)+header_len)) | 746 | if (skb_cow(skb, LL_RESERVED_SPACE(rt->dst.dev)+header_len)) |
747 | goto drop; | 747 | goto drop; |
748 | 748 | ||
749 | /* | 749 | /* |
@@ -752,7 +752,7 @@ static int dn_forward(struct sk_buff *skb) | |||
752 | if (++cb->hops > 30) | 752 | if (++cb->hops > 30) |
753 | goto drop; | 753 | goto drop; |
754 | 754 | ||
755 | skb->dev = rt->u.dst.dev; | 755 | skb->dev = rt->dst.dev; |
756 | 756 | ||
757 | /* | 757 | /* |
758 | * If packet goes out same interface it came in on, then set | 758 | * If packet goes out same interface it came in on, then set |
@@ -792,7 +792,7 @@ static int dn_rt_bug(struct sk_buff *skb) | |||
792 | static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res) | 792 | static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res) |
793 | { | 793 | { |
794 | struct dn_fib_info *fi = res->fi; | 794 | struct dn_fib_info *fi = res->fi; |
795 | struct net_device *dev = rt->u.dst.dev; | 795 | struct net_device *dev = rt->dst.dev; |
796 | struct neighbour *n; | 796 | struct neighbour *n; |
797 | unsigned mss; | 797 | unsigned mss; |
798 | 798 | ||
@@ -800,25 +800,25 @@ static int dn_rt_set_next_hop(struct dn_route *rt, struct dn_fib_res *res) | |||
800 | if (DN_FIB_RES_GW(*res) && | 800 | if (DN_FIB_RES_GW(*res) && |
801 | DN_FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK) | 801 | DN_FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK) |
802 | rt->rt_gateway = DN_FIB_RES_GW(*res); | 802 | rt->rt_gateway = DN_FIB_RES_GW(*res); |
803 | memcpy(rt->u.dst.metrics, fi->fib_metrics, | 803 | memcpy(rt->dst.metrics, fi->fib_metrics, |
804 | sizeof(rt->u.dst.metrics)); | 804 | sizeof(rt->dst.metrics)); |
805 | } | 805 | } |
806 | rt->rt_type = res->type; | 806 | rt->rt_type = res->type; |
807 | 807 | ||
808 | if (dev != NULL && rt->u.dst.neighbour == NULL) { | 808 | if (dev != NULL && rt->dst.neighbour == NULL) { |
809 | n = __neigh_lookup_errno(&dn_neigh_table, &rt->rt_gateway, dev); | 809 | n = __neigh_lookup_errno(&dn_neigh_table, &rt->rt_gateway, dev); |
810 | if (IS_ERR(n)) | 810 | if (IS_ERR(n)) |
811 | return PTR_ERR(n); | 811 | return PTR_ERR(n); |
812 | rt->u.dst.neighbour = n; | 812 | rt->dst.neighbour = n; |
813 | } | 813 | } |
814 | 814 | ||
815 | if (dst_metric(&rt->u.dst, RTAX_MTU) == 0 || | 815 | if (dst_metric(&rt->dst, RTAX_MTU) == 0 || |
816 | dst_metric(&rt->u.dst, RTAX_MTU) > rt->u.dst.dev->mtu) | 816 | dst_metric(&rt->dst, RTAX_MTU) > rt->dst.dev->mtu) |
817 | rt->u.dst.metrics[RTAX_MTU-1] = rt->u.dst.dev->mtu; | 817 | rt->dst.metrics[RTAX_MTU-1] = rt->dst.dev->mtu; |
818 | mss = dn_mss_from_pmtu(dev, dst_mtu(&rt->u.dst)); | 818 | mss = dn_mss_from_pmtu(dev, dst_mtu(&rt->dst)); |
819 | if (dst_metric(&rt->u.dst, RTAX_ADVMSS) == 0 || | 819 | if (dst_metric(&rt->dst, RTAX_ADVMSS) == 0 || |
820 | dst_metric(&rt->u.dst, RTAX_ADVMSS) > mss) | 820 | dst_metric(&rt->dst, RTAX_ADVMSS) > mss) |
821 | rt->u.dst.metrics[RTAX_ADVMSS-1] = mss; | 821 | rt->dst.metrics[RTAX_ADVMSS-1] = mss; |
822 | return 0; | 822 | return 0; |
823 | } | 823 | } |
824 | 824 | ||
@@ -1096,8 +1096,8 @@ make_route: | |||
1096 | if (rt == NULL) | 1096 | if (rt == NULL) |
1097 | goto e_nobufs; | 1097 | goto e_nobufs; |
1098 | 1098 | ||
1099 | atomic_set(&rt->u.dst.__refcnt, 1); | 1099 | atomic_set(&rt->dst.__refcnt, 1); |
1100 | rt->u.dst.flags = DST_HOST; | 1100 | rt->dst.flags = DST_HOST; |
1101 | 1101 | ||
1102 | rt->fl.fld_src = oldflp->fld_src; | 1102 | rt->fl.fld_src = oldflp->fld_src; |
1103 | rt->fl.fld_dst = oldflp->fld_dst; | 1103 | rt->fl.fld_dst = oldflp->fld_dst; |
@@ -1113,17 +1113,17 @@ make_route: | |||
1113 | rt->rt_dst_map = fl.fld_dst; | 1113 | rt->rt_dst_map = fl.fld_dst; |
1114 | rt->rt_src_map = fl.fld_src; | 1114 | rt->rt_src_map = fl.fld_src; |
1115 | 1115 | ||
1116 | rt->u.dst.dev = dev_out; | 1116 | rt->dst.dev = dev_out; |
1117 | dev_hold(dev_out); | 1117 | dev_hold(dev_out); |
1118 | rt->u.dst.neighbour = neigh; | 1118 | rt->dst.neighbour = neigh; |
1119 | neigh = NULL; | 1119 | neigh = NULL; |
1120 | 1120 | ||
1121 | rt->u.dst.lastuse = jiffies; | 1121 | rt->dst.lastuse = jiffies; |
1122 | rt->u.dst.output = dn_output; | 1122 | rt->dst.output = dn_output; |
1123 | rt->u.dst.input = dn_rt_bug; | 1123 | rt->dst.input = dn_rt_bug; |
1124 | rt->rt_flags = flags; | 1124 | rt->rt_flags = flags; |
1125 | if (flags & RTCF_LOCAL) | 1125 | if (flags & RTCF_LOCAL) |
1126 | rt->u.dst.input = dn_nsp_rx; | 1126 | rt->dst.input = dn_nsp_rx; |
1127 | 1127 | ||
1128 | err = dn_rt_set_next_hop(rt, &res); | 1128 | err = dn_rt_set_next_hop(rt, &res); |
1129 | if (err) | 1129 | if (err) |
@@ -1152,7 +1152,7 @@ e_nobufs: | |||
1152 | err = -ENOBUFS; | 1152 | err = -ENOBUFS; |
1153 | goto done; | 1153 | goto done; |
1154 | e_neighbour: | 1154 | e_neighbour: |
1155 | dst_free(&rt->u.dst); | 1155 | dst_free(&rt->dst); |
1156 | goto e_nobufs; | 1156 | goto e_nobufs; |
1157 | } | 1157 | } |
1158 | 1158 | ||
@@ -1168,15 +1168,15 @@ static int __dn_route_output_key(struct dst_entry **pprt, const struct flowi *fl | |||
1168 | if (!(flags & MSG_TRYHARD)) { | 1168 | if (!(flags & MSG_TRYHARD)) { |
1169 | rcu_read_lock_bh(); | 1169 | rcu_read_lock_bh(); |
1170 | for (rt = rcu_dereference_bh(dn_rt_hash_table[hash].chain); rt; | 1170 | for (rt = rcu_dereference_bh(dn_rt_hash_table[hash].chain); rt; |
1171 | rt = rcu_dereference_bh(rt->u.dst.dn_next)) { | 1171 | rt = rcu_dereference_bh(rt->dst.dn_next)) { |
1172 | if ((flp->fld_dst == rt->fl.fld_dst) && | 1172 | if ((flp->fld_dst == rt->fl.fld_dst) && |
1173 | (flp->fld_src == rt->fl.fld_src) && | 1173 | (flp->fld_src == rt->fl.fld_src) && |
1174 | (flp->mark == rt->fl.mark) && | 1174 | (flp->mark == rt->fl.mark) && |
1175 | (rt->fl.iif == 0) && | 1175 | (rt->fl.iif == 0) && |
1176 | (rt->fl.oif == flp->oif)) { | 1176 | (rt->fl.oif == flp->oif)) { |
1177 | dst_use(&rt->u.dst, jiffies); | 1177 | dst_use(&rt->dst, jiffies); |
1178 | rcu_read_unlock_bh(); | 1178 | rcu_read_unlock_bh(); |
1179 | *pprt = &rt->u.dst; | 1179 | *pprt = &rt->dst; |
1180 | return 0; | 1180 | return 0; |
1181 | } | 1181 | } |
1182 | } | 1182 | } |
@@ -1375,29 +1375,29 @@ make_route: | |||
1375 | rt->fl.iif = in_dev->ifindex; | 1375 | rt->fl.iif = in_dev->ifindex; |
1376 | rt->fl.mark = fl.mark; | 1376 | rt->fl.mark = fl.mark; |
1377 | 1377 | ||
1378 | rt->u.dst.flags = DST_HOST; | 1378 | rt->dst.flags = DST_HOST; |
1379 | rt->u.dst.neighbour = neigh; | 1379 | rt->dst.neighbour = neigh; |
1380 | rt->u.dst.dev = out_dev; | 1380 | rt->dst.dev = out_dev; |
1381 | rt->u.dst.lastuse = jiffies; | 1381 | rt->dst.lastuse = jiffies; |
1382 | rt->u.dst.output = dn_rt_bug; | 1382 | rt->dst.output = dn_rt_bug; |
1383 | switch(res.type) { | 1383 | switch(res.type) { |
1384 | case RTN_UNICAST: | 1384 | case RTN_UNICAST: |
1385 | rt->u.dst.input = dn_forward; | 1385 | rt->dst.input = dn_forward; |
1386 | break; | 1386 | break; |
1387 | case RTN_LOCAL: | 1387 | case RTN_LOCAL: |
1388 | rt->u.dst.output = dn_output; | 1388 | rt->dst.output = dn_output; |
1389 | rt->u.dst.input = dn_nsp_rx; | 1389 | rt->dst.input = dn_nsp_rx; |
1390 | rt->u.dst.dev = in_dev; | 1390 | rt->dst.dev = in_dev; |
1391 | flags |= RTCF_LOCAL; | 1391 | flags |= RTCF_LOCAL; |
1392 | break; | 1392 | break; |
1393 | default: | 1393 | default: |
1394 | case RTN_UNREACHABLE: | 1394 | case RTN_UNREACHABLE: |
1395 | case RTN_BLACKHOLE: | 1395 | case RTN_BLACKHOLE: |
1396 | rt->u.dst.input = dst_discard; | 1396 | rt->dst.input = dst_discard; |
1397 | } | 1397 | } |
1398 | rt->rt_flags = flags; | 1398 | rt->rt_flags = flags; |
1399 | if (rt->u.dst.dev) | 1399 | if (rt->dst.dev) |
1400 | dev_hold(rt->u.dst.dev); | 1400 | dev_hold(rt->dst.dev); |
1401 | 1401 | ||
1402 | err = dn_rt_set_next_hop(rt, &res); | 1402 | err = dn_rt_set_next_hop(rt, &res); |
1403 | if (err) | 1403 | if (err) |
@@ -1405,7 +1405,7 @@ make_route: | |||
1405 | 1405 | ||
1406 | hash = dn_hash(rt->fl.fld_src, rt->fl.fld_dst); | 1406 | hash = dn_hash(rt->fl.fld_src, rt->fl.fld_dst); |
1407 | dn_insert_route(rt, hash, &rt); | 1407 | dn_insert_route(rt, hash, &rt); |
1408 | skb_dst_set(skb, &rt->u.dst); | 1408 | skb_dst_set(skb, &rt->dst); |
1409 | 1409 | ||
1410 | done: | 1410 | done: |
1411 | if (neigh) | 1411 | if (neigh) |
@@ -1427,7 +1427,7 @@ e_nobufs: | |||
1427 | goto done; | 1427 | goto done; |
1428 | 1428 | ||
1429 | e_neighbour: | 1429 | e_neighbour: |
1430 | dst_free(&rt->u.dst); | 1430 | dst_free(&rt->dst); |
1431 | goto done; | 1431 | goto done; |
1432 | } | 1432 | } |
1433 | 1433 | ||
@@ -1442,13 +1442,13 @@ static int dn_route_input(struct sk_buff *skb) | |||
1442 | 1442 | ||
1443 | rcu_read_lock(); | 1443 | rcu_read_lock(); |
1444 | for(rt = rcu_dereference(dn_rt_hash_table[hash].chain); rt != NULL; | 1444 | for(rt = rcu_dereference(dn_rt_hash_table[hash].chain); rt != NULL; |
1445 | rt = rcu_dereference(rt->u.dst.dn_next)) { | 1445 | rt = rcu_dereference(rt->dst.dn_next)) { |
1446 | if ((rt->fl.fld_src == cb->src) && | 1446 | if ((rt->fl.fld_src == cb->src) && |
1447 | (rt->fl.fld_dst == cb->dst) && | 1447 | (rt->fl.fld_dst == cb->dst) && |
1448 | (rt->fl.oif == 0) && | 1448 | (rt->fl.oif == 0) && |
1449 | (rt->fl.mark == skb->mark) && | 1449 | (rt->fl.mark == skb->mark) && |
1450 | (rt->fl.iif == cb->iif)) { | 1450 | (rt->fl.iif == cb->iif)) { |
1451 | dst_use(&rt->u.dst, jiffies); | 1451 | dst_use(&rt->dst, jiffies); |
1452 | rcu_read_unlock(); | 1452 | rcu_read_unlock(); |
1453 | skb_dst_set(skb, (struct dst_entry *)rt); | 1453 | skb_dst_set(skb, (struct dst_entry *)rt); |
1454 | return 0; | 1454 | return 0; |
@@ -1487,8 +1487,8 @@ static int dn_rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, | |||
1487 | r->rtm_src_len = 16; | 1487 | r->rtm_src_len = 16; |
1488 | RTA_PUT(skb, RTA_SRC, 2, &rt->fl.fld_src); | 1488 | RTA_PUT(skb, RTA_SRC, 2, &rt->fl.fld_src); |
1489 | } | 1489 | } |
1490 | if (rt->u.dst.dev) | 1490 | if (rt->dst.dev) |
1491 | RTA_PUT(skb, RTA_OIF, sizeof(int), &rt->u.dst.dev->ifindex); | 1491 | RTA_PUT(skb, RTA_OIF, sizeof(int), &rt->dst.dev->ifindex); |
1492 | /* | 1492 | /* |
1493 | * Note to self - change this if input routes reverse direction when | 1493 | * Note to self - change this if input routes reverse direction when |
1494 | * they deal only with inputs and not with replies like they do | 1494 | * they deal only with inputs and not with replies like they do |
@@ -1497,11 +1497,11 @@ static int dn_rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, | |||
1497 | RTA_PUT(skb, RTA_PREFSRC, 2, &rt->rt_local_src); | 1497 | RTA_PUT(skb, RTA_PREFSRC, 2, &rt->rt_local_src); |
1498 | if (rt->rt_daddr != rt->rt_gateway) | 1498 | if (rt->rt_daddr != rt->rt_gateway) |
1499 | RTA_PUT(skb, RTA_GATEWAY, 2, &rt->rt_gateway); | 1499 | RTA_PUT(skb, RTA_GATEWAY, 2, &rt->rt_gateway); |
1500 | if (rtnetlink_put_metrics(skb, rt->u.dst.metrics) < 0) | 1500 | if (rtnetlink_put_metrics(skb, rt->dst.metrics) < 0) |
1501 | goto rtattr_failure; | 1501 | goto rtattr_failure; |
1502 | expires = rt->u.dst.expires ? rt->u.dst.expires - jiffies : 0; | 1502 | expires = rt->dst.expires ? rt->dst.expires - jiffies : 0; |
1503 | if (rtnl_put_cacheinfo(skb, &rt->u.dst, 0, 0, 0, expires, | 1503 | if (rtnl_put_cacheinfo(skb, &rt->dst, 0, 0, 0, expires, |
1504 | rt->u.dst.error) < 0) | 1504 | rt->dst.error) < 0) |
1505 | goto rtattr_failure; | 1505 | goto rtattr_failure; |
1506 | if (rt->fl.iif) | 1506 | if (rt->fl.iif) |
1507 | RTA_PUT(skb, RTA_IIF, sizeof(int), &rt->fl.iif); | 1507 | RTA_PUT(skb, RTA_IIF, sizeof(int), &rt->fl.iif); |
@@ -1568,8 +1568,8 @@ static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void | |||
1568 | local_bh_enable(); | 1568 | local_bh_enable(); |
1569 | memset(cb, 0, sizeof(struct dn_skb_cb)); | 1569 | memset(cb, 0, sizeof(struct dn_skb_cb)); |
1570 | rt = (struct dn_route *)skb_dst(skb); | 1570 | rt = (struct dn_route *)skb_dst(skb); |
1571 | if (!err && -rt->u.dst.error) | 1571 | if (!err && -rt->dst.error) |
1572 | err = rt->u.dst.error; | 1572 | err = rt->dst.error; |
1573 | } else { | 1573 | } else { |
1574 | int oif = 0; | 1574 | int oif = 0; |
1575 | if (rta[RTA_OIF - 1]) | 1575 | if (rta[RTA_OIF - 1]) |
@@ -1583,7 +1583,7 @@ static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void | |||
1583 | skb->dev = NULL; | 1583 | skb->dev = NULL; |
1584 | if (err) | 1584 | if (err) |
1585 | goto out_free; | 1585 | goto out_free; |
1586 | skb_dst_set(skb, &rt->u.dst); | 1586 | skb_dst_set(skb, &rt->dst); |
1587 | if (rtm->rtm_flags & RTM_F_NOTIFY) | 1587 | if (rtm->rtm_flags & RTM_F_NOTIFY) |
1588 | rt->rt_flags |= RTCF_NOTIFY; | 1588 | rt->rt_flags |= RTCF_NOTIFY; |
1589 | 1589 | ||
@@ -1632,10 +1632,10 @@ int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
1632 | rcu_read_lock_bh(); | 1632 | rcu_read_lock_bh(); |
1633 | for(rt = rcu_dereference_bh(dn_rt_hash_table[h].chain), idx = 0; | 1633 | for(rt = rcu_dereference_bh(dn_rt_hash_table[h].chain), idx = 0; |
1634 | rt; | 1634 | rt; |
1635 | rt = rcu_dereference_bh(rt->u.dst.dn_next), idx++) { | 1635 | rt = rcu_dereference_bh(rt->dst.dn_next), idx++) { |
1636 | if (idx < s_idx) | 1636 | if (idx < s_idx) |
1637 | continue; | 1637 | continue; |
1638 | skb_dst_set(skb, dst_clone(&rt->u.dst)); | 1638 | skb_dst_set(skb, dst_clone(&rt->dst)); |
1639 | if (dn_rt_fill_info(skb, NETLINK_CB(cb->skb).pid, | 1639 | if (dn_rt_fill_info(skb, NETLINK_CB(cb->skb).pid, |
1640 | cb->nlh->nlmsg_seq, RTM_NEWROUTE, | 1640 | cb->nlh->nlmsg_seq, RTM_NEWROUTE, |
1641 | 1, NLM_F_MULTI) <= 0) { | 1641 | 1, NLM_F_MULTI) <= 0) { |
@@ -1678,7 +1678,7 @@ static struct dn_route *dn_rt_cache_get_next(struct seq_file *seq, struct dn_rou | |||
1678 | { | 1678 | { |
1679 | struct dn_rt_cache_iter_state *s = seq->private; | 1679 | struct dn_rt_cache_iter_state *s = seq->private; |
1680 | 1680 | ||
1681 | rt = rt->u.dst.dn_next; | 1681 | rt = rt->dst.dn_next; |
1682 | while(!rt) { | 1682 | while(!rt) { |
1683 | rcu_read_unlock_bh(); | 1683 | rcu_read_unlock_bh(); |
1684 | if (--s->bucket < 0) | 1684 | if (--s->bucket < 0) |
@@ -1719,12 +1719,12 @@ static int dn_rt_cache_seq_show(struct seq_file *seq, void *v) | |||
1719 | char buf1[DN_ASCBUF_LEN], buf2[DN_ASCBUF_LEN]; | 1719 | char buf1[DN_ASCBUF_LEN], buf2[DN_ASCBUF_LEN]; |
1720 | 1720 | ||
1721 | seq_printf(seq, "%-8s %-7s %-7s %04d %04d %04d\n", | 1721 | seq_printf(seq, "%-8s %-7s %-7s %04d %04d %04d\n", |
1722 | rt->u.dst.dev ? rt->u.dst.dev->name : "*", | 1722 | rt->dst.dev ? rt->dst.dev->name : "*", |
1723 | dn_addr2asc(le16_to_cpu(rt->rt_daddr), buf1), | 1723 | dn_addr2asc(le16_to_cpu(rt->rt_daddr), buf1), |
1724 | dn_addr2asc(le16_to_cpu(rt->rt_saddr), buf2), | 1724 | dn_addr2asc(le16_to_cpu(rt->rt_saddr), buf2), |
1725 | atomic_read(&rt->u.dst.__refcnt), | 1725 | atomic_read(&rt->dst.__refcnt), |
1726 | rt->u.dst.__use, | 1726 | rt->dst.__use, |
1727 | (int) dst_metric(&rt->u.dst, RTAX_RTT)); | 1727 | (int) dst_metric(&rt->dst, RTAX_RTT)); |
1728 | return 0; | 1728 | return 0; |
1729 | } | 1729 | } |
1730 | 1730 | ||