[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>
This commit is contained in:
Родитель
e9ce1cd3cf
Коммит
e0a1ad73d3
|
@ -69,10 +69,7 @@ extern int ip6_ins_rt(struct rt6_info *,
|
|||
struct nlmsghdr *,
|
||||
void *rtattr,
|
||||
struct netlink_skb_parms *req);
|
||||
extern int ip6_del_rt(struct rt6_info *,
|
||||
struct nlmsghdr *,
|
||||
void *rtattr,
|
||||
struct netlink_skb_parms *req);
|
||||
extern int ip6_del_rt(struct rt6_info *);
|
||||
|
||||
extern int ip6_rt_addr_add(struct in6_addr *addr,
|
||||
struct net_device *dev,
|
||||
|
|
|
@ -736,7 +736,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
|
|||
|
||||
if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) {
|
||||
if (onlink == 0) {
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
rt = NULL;
|
||||
} else if (!(rt->rt6i_flags & RTF_EXPIRES)) {
|
||||
rt->rt6i_expires = expires;
|
||||
|
@ -1662,7 +1662,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len)
|
|||
if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) {
|
||||
if (rt->rt6i_flags&RTF_EXPIRES) {
|
||||
if (valid_lft == 0) {
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
rt = NULL;
|
||||
} else {
|
||||
rt->rt6i_expires = jiffies + rt_expires;
|
||||
|
@ -3557,7 +3557,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
|
|||
addrconf_leave_anycast(ifp);
|
||||
addrconf_leave_solict(ifp->idev, &ifp->addr);
|
||||
dst_hold(&ifp->rt->u.dst);
|
||||
if (ip6_del_rt(ifp->rt, NULL, NULL, NULL))
|
||||
if (ip6_del_rt(ifp->rt))
|
||||
dst_free(&ifp->rt->u.dst);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -961,7 +961,7 @@ static void ndisc_recv_na(struct sk_buff *skb)
|
|||
struct rt6_info *rt;
|
||||
rt = rt6_get_dflt_router(saddr, dev);
|
||||
if (rt)
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -1114,7 +1114,7 @@ static void ndisc_router_discovery(struct sk_buff *skb)
|
|||
|
||||
if (rt && lifetime == 0) {
|
||||
neigh_clone(neigh);
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
rt = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -457,7 +457,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len,
|
|||
rt = rt6_get_route_info(prefix, rinfo->prefix_len, gwaddr, dev->ifindex);
|
||||
|
||||
if (rt && !lifetime) {
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
rt = NULL;
|
||||
}
|
||||
|
||||
|
@ -813,7 +813,7 @@ static struct dst_entry *ip6_negative_advice(struct dst_entry *dst)
|
|||
|
||||
if (rt) {
|
||||
if (rt->rt6i_flags & RTF_CACHE)
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
else
|
||||
dst_release(dst);
|
||||
}
|
||||
|
@ -1218,7 +1218,8 @@ out:
|
|||
return err;
|
||||
}
|
||||
|
||||
int ip6_del_rt(struct rt6_info *rt, struct nlmsghdr *nlh, void *_rtattr, struct netlink_skb_parms *req)
|
||||
static int __ip6_del_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
|
||||
void *_rtattr, struct netlink_skb_parms *req)
|
||||
{
|
||||
int err;
|
||||
struct fib6_table *table;
|
||||
|
@ -1237,6 +1238,11 @@ int ip6_del_rt(struct rt6_info *rt, struct nlmsghdr *nlh, void *_rtattr, struct
|
|||
return err;
|
||||
}
|
||||
|
||||
int ip6_del_rt(struct rt6_info *rt)
|
||||
{
|
||||
return __ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
static int ip6_route_del(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh,
|
||||
void *_rtattr, struct netlink_skb_parms *req,
|
||||
u32 table_id)
|
||||
|
@ -1271,7 +1277,7 @@ static int ip6_route_del(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh,
|
|||
dst_hold(&rt->u.dst);
|
||||
read_unlock_bh(&table->tb6_lock);
|
||||
|
||||
return ip6_del_rt(rt, nlh, _rtattr, req);
|
||||
return __ip6_del_rt(rt, nlh, _rtattr, req);
|
||||
}
|
||||
}
|
||||
read_unlock_bh(&table->tb6_lock);
|
||||
|
@ -1395,7 +1401,7 @@ restart:
|
|||
call_netevent_notifiers(NETEVENT_REDIRECT, &netevent);
|
||||
|
||||
if (rt->rt6i_flags&RTF_CACHE) {
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1631,7 +1637,7 @@ restart:
|
|||
if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) {
|
||||
dst_hold(&rt->u.dst);
|
||||
read_unlock_bh(&table->tb6_lock);
|
||||
ip6_del_rt(rt, NULL, NULL, NULL);
|
||||
ip6_del_rt(rt);
|
||||
goto restart;
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче