aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/route.c
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2006-08-22 03:00:21 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-22 17:55:11 -0400
commite0a1ad73d34fd6dfdb630479400511e9879069c0 (patch)
treeeda7611d42a7184131056e08b0bfb13d18b0e24e /net/ipv6/route.c
parente9ce1cd3cf6cf35b21d0ce990f2e738f35907386 (diff)
[IPv6] route: Simplify ip6_del_rt()
Provide a simple ip6_del_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>
Diffstat (limited to 'net/ipv6/route.c')
-rw-r--r--net/ipv6/route.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 1aca787ead85..8d511de0db1b 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -457,7 +457,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len,
457 rt = rt6_get_route_info(prefix, rinfo->prefix_len, gwaddr, dev->ifindex); 457 rt = rt6_get_route_info(prefix, rinfo->prefix_len, gwaddr, dev->ifindex);
458 458
459 if (rt && !lifetime) { 459 if (rt && !lifetime) {
460 ip6_del_rt(rt, NULL, NULL, NULL); 460 ip6_del_rt(rt);
461 rt = NULL; 461 rt = NULL;
462 } 462 }
463 463
@@ -813,7 +813,7 @@ static struct dst_entry *ip6_negative_advice(struct dst_entry *dst)
813 813
814 if (rt) { 814 if (rt) {
815 if (rt->rt6i_flags & RTF_CACHE) 815 if (rt->rt6i_flags & RTF_CACHE)
816 ip6_del_rt(rt, NULL, NULL, NULL); 816 ip6_del_rt(rt);
817 else 817 else
818 dst_release(dst); 818 dst_release(dst);
819 } 819 }
@@ -1218,7 +1218,8 @@ out:
1218 return err; 1218 return err;
1219} 1219}
1220 1220
1221int ip6_del_rt(struct rt6_info *rt, struct nlmsghdr *nlh, void *_rtattr, struct netlink_skb_parms *req) 1221static int __ip6_del_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
1222 void *_rtattr, struct netlink_skb_parms *req)
1222{ 1223{
1223 int err; 1224 int err;
1224 struct fib6_table *table; 1225 struct fib6_table *table;
@@ -1237,6 +1238,11 @@ int ip6_del_rt(struct rt6_info *rt, struct nlmsghdr *nlh, void *_rtattr, struct
1237 return err; 1238 return err;
1238} 1239}
1239 1240
1241int ip6_del_rt(struct rt6_info *rt)
1242{
1243 return __ip6_del_rt(rt, NULL, NULL, NULL);
1244}
1245
1240static int ip6_route_del(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh, 1246static int ip6_route_del(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh,
1241 void *_rtattr, struct netlink_skb_parms *req, 1247 void *_rtattr, struct netlink_skb_parms *req,
1242 u32 table_id) 1248 u32 table_id)
@@ -1271,7 +1277,7 @@ static int ip6_route_del(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh,
1271 dst_hold(&rt->u.dst); 1277 dst_hold(&rt->u.dst);
1272 read_unlock_bh(&table->tb6_lock); 1278 read_unlock_bh(&table->tb6_lock);
1273 1279
1274 return ip6_del_rt(rt, nlh, _rtattr, req); 1280 return __ip6_del_rt(rt, nlh, _rtattr, req);
1275 } 1281 }
1276 } 1282 }
1277 read_unlock_bh(&table->tb6_lock); 1283 read_unlock_bh(&table->tb6_lock);
@@ -1395,7 +1401,7 @@ restart:
1395 call_netevent_notifiers(NETEVENT_REDIRECT, &netevent); 1401 call_netevent_notifiers(NETEVENT_REDIRECT, &netevent);
1396 1402
1397 if (rt->rt6i_flags&RTF_CACHE) { 1403 if (rt->rt6i_flags&RTF_CACHE) {
1398 ip6_del_rt(rt, NULL, NULL, NULL); 1404 ip6_del_rt(rt);
1399 return; 1405 return;
1400 } 1406 }
1401 1407
@@ -1631,7 +1637,7 @@ restart:
1631 if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { 1637 if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) {
1632 dst_hold(&rt->u.dst); 1638 dst_hold(&rt->u.dst);
1633 read_unlock_bh(&table->tb6_lock); 1639 read_unlock_bh(&table->tb6_lock);
1634 ip6_del_rt(rt, NULL, NULL, NULL); 1640 ip6_del_rt(rt);
1635 goto restart; 1641 goto restart;
1636 } 1642 }
1637 } 1643 }