aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2006-08-22 03:00:45 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-22 17:55:11 -0400
commit40e22e8f3d4d4f1ff68fb03683f007c53ee8b348 (patch)
treee630e465a8fdd12e674d8a160a695a72cf81ca8d
parente0a1ad73d34fd6dfdb630479400511e9879069c0 (diff)
[IPv6] route: Simplify ip6_ins_rt()
Provide a simple ip6_ins_rt() for the majority of users and an alternative for the exception via netlink. Avoids code obfuscation. Signed-off-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/ip6_route.h5
-rw-r--r--net/ipv6/addrconf.c2
-rw-r--r--net/ipv6/anycast.c2
-rw-r--r--net/ipv6/route.c19
4 files changed, 15 insertions, 13 deletions
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index a7e6086a2bd4..172c4761e2bf 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -65,10 +65,7 @@ extern int ip6_route_add(struct in6_rtmsg *rtmsg,
65 void *rtattr, 65 void *rtattr,
66 struct netlink_skb_parms *req, 66 struct netlink_skb_parms *req,
67 u32 table_id); 67 u32 table_id);
68extern int ip6_ins_rt(struct rt6_info *, 68extern int ip6_ins_rt(struct rt6_info *);
69 struct nlmsghdr *,
70 void *rtattr,
71 struct netlink_skb_parms *req);
72extern int ip6_del_rt(struct rt6_info *); 69extern int ip6_del_rt(struct rt6_info *);
73 70
74extern int ip6_rt_addr_add(struct in6_addr *addr, 71extern int ip6_rt_addr_add(struct in6_addr *addr,
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 27f2e3309598..aafba9ea9cb6 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3548,7 +3548,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
3548 3548
3549 switch (event) { 3549 switch (event) {
3550 case RTM_NEWADDR: 3550 case RTM_NEWADDR:
3551 ip6_ins_rt(ifp->rt, NULL, NULL, NULL); 3551 ip6_ins_rt(ifp->rt);
3552 if (ifp->idev->cnf.forwarding) 3552 if (ifp->idev->cnf.forwarding)
3553 addrconf_join_anycast(ifp); 3553 addrconf_join_anycast(ifp);
3554 break; 3554 break;
diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
index f6881d7a0385..abbc35a13e08 100644
--- a/net/ipv6/anycast.c
+++ b/net/ipv6/anycast.c
@@ -335,7 +335,7 @@ int ipv6_dev_ac_inc(struct net_device *dev, struct in6_addr *addr)
335 write_unlock_bh(&idev->lock); 335 write_unlock_bh(&idev->lock);
336 336
337 dst_hold(&rt->u.dst); 337 dst_hold(&rt->u.dst);
338 if (ip6_ins_rt(rt, NULL, NULL, NULL)) 338 if (ip6_ins_rt(rt))
339 dst_release(&rt->u.dst); 339 dst_release(&rt->u.dst);
340 340
341 addrconf_join_solict(dev, &aca->aca_addr); 341 addrconf_join_solict(dev, &aca->aca_addr);
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 8d511de0db1b..9ec348a72a95 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -546,8 +546,8 @@ struct rt6_info *rt6_lookup(struct in6_addr *daddr, struct in6_addr *saddr,
546 be destroyed. 546 be destroyed.
547 */ 547 */
548 548
549int ip6_ins_rt(struct rt6_info *rt, struct nlmsghdr *nlh, 549static int __ip6_ins_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
550 void *_rtattr, struct netlink_skb_parms *req) 550 void *_rtattr, struct netlink_skb_parms *req)
551{ 551{
552 int err; 552 int err;
553 struct fib6_table *table; 553 struct fib6_table *table;
@@ -560,6 +560,11 @@ int ip6_ins_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
560 return err; 560 return err;
561} 561}
562 562
563int ip6_ins_rt(struct rt6_info *rt)
564{
565 return __ip6_ins_rt(rt, NULL, NULL, NULL);
566}
567
563static struct rt6_info *rt6_alloc_cow(struct rt6_info *ort, struct in6_addr *daddr, 568static struct rt6_info *rt6_alloc_cow(struct rt6_info *ort, struct in6_addr *daddr,
564 struct in6_addr *saddr) 569 struct in6_addr *saddr)
565{ 570{
@@ -657,7 +662,7 @@ restart:
657 662
658 dst_hold(&rt->u.dst); 663 dst_hold(&rt->u.dst);
659 if (nrt) { 664 if (nrt) {
660 err = ip6_ins_rt(nrt, NULL, NULL, NULL); 665 err = ip6_ins_rt(nrt);
661 if (!err) 666 if (!err)
662 goto out2; 667 goto out2;
663 } 668 }
@@ -752,7 +757,7 @@ restart:
752 757
753 dst_hold(&rt->u.dst); 758 dst_hold(&rt->u.dst);
754 if (nrt) { 759 if (nrt) {
755 err = ip6_ins_rt(nrt, NULL, NULL, NULL); 760 err = ip6_ins_rt(nrt);
756 if (!err) 761 if (!err)
757 goto out2; 762 goto out2;
758 } 763 }
@@ -1206,7 +1211,7 @@ install_route:
1206 rt->u.dst.dev = dev; 1211 rt->u.dst.dev = dev;
1207 rt->rt6i_idev = idev; 1212 rt->rt6i_idev = idev;
1208 rt->rt6i_table = table; 1213 rt->rt6i_table = table;
1209 return ip6_ins_rt(rt, nlh, _rtattr, req); 1214 return __ip6_ins_rt(rt, nlh, _rtattr, req);
1210 1215
1211out: 1216out:
1212 if (dev) 1217 if (dev)
@@ -1393,7 +1398,7 @@ restart:
1393 nrt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(neigh->dev); 1398 nrt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(neigh->dev);
1394 nrt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_mtu(&nrt->u.dst)); 1399 nrt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_mtu(&nrt->u.dst));
1395 1400
1396 if (ip6_ins_rt(nrt, NULL, NULL, NULL)) 1401 if (ip6_ins_rt(nrt))
1397 goto out; 1402 goto out;
1398 1403
1399 netevent.old = &rt->u.dst; 1404 netevent.old = &rt->u.dst;
@@ -1483,7 +1488,7 @@ void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr,
1483 dst_set_expires(&nrt->u.dst, ip6_rt_mtu_expires); 1488 dst_set_expires(&nrt->u.dst, ip6_rt_mtu_expires);
1484 nrt->rt6i_flags |= RTF_DYNAMIC|RTF_EXPIRES; 1489 nrt->rt6i_flags |= RTF_DYNAMIC|RTF_EXPIRES;
1485 1490
1486 ip6_ins_rt(nrt, NULL, NULL, NULL); 1491 ip6_ins_rt(nrt);
1487 } 1492 }
1488out: 1493out:
1489 dst_release(&rt->u.dst); 1494 dst_release(&rt->u.dst);