Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40e22e8f authored by Thomas Graf's avatar Thomas Graf Committed by David S. Miller
Browse files

[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: default avatarThomas Graf <tgraf@suug.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e0a1ad73
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -65,10 +65,7 @@ extern int ip6_route_add(struct in6_rtmsg *rtmsg,
					      void *rtattr,
					      struct netlink_skb_parms *req,
					      u32 table_id);
extern int			ip6_ins_rt(struct rt6_info *,
					   struct nlmsghdr *,
					   void *rtattr,
					   struct netlink_skb_parms *req);
extern int			ip6_ins_rt(struct rt6_info *);
extern int			ip6_del_rt(struct rt6_info *);

extern int			ip6_rt_addr_add(struct in6_addr *addr,
+1 −1
Original line number Diff line number Diff line
@@ -3548,7 +3548,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)

	switch (event) {
	case RTM_NEWADDR:
		ip6_ins_rt(ifp->rt, NULL, NULL, NULL);
		ip6_ins_rt(ifp->rt);
		if (ifp->idev->cnf.forwarding)
			addrconf_join_anycast(ifp);
		break;
+1 −1
Original line number Diff line number Diff line
@@ -335,7 +335,7 @@ int ipv6_dev_ac_inc(struct net_device *dev, struct in6_addr *addr)
	write_unlock_bh(&idev->lock);

	dst_hold(&rt->u.dst);
	if (ip6_ins_rt(rt, NULL, NULL, NULL))
	if (ip6_ins_rt(rt))
		dst_release(&rt->u.dst);

	addrconf_join_solict(dev, &aca->aca_addr);
+12 −7
Original line number Diff line number Diff line
@@ -546,7 +546,7 @@ struct rt6_info *rt6_lookup(struct in6_addr *daddr, struct in6_addr *saddr,
   be destroyed.
 */

int ip6_ins_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
static int __ip6_ins_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
			void *_rtattr, struct netlink_skb_parms *req)
{
	int err;
@@ -560,6 +560,11 @@ int ip6_ins_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
	return err;
}

int ip6_ins_rt(struct rt6_info *rt)
{
	return __ip6_ins_rt(rt, NULL, NULL, NULL);
}

static struct rt6_info *rt6_alloc_cow(struct rt6_info *ort, struct in6_addr *daddr,
				      struct in6_addr *saddr)
{
@@ -657,7 +662,7 @@ static struct rt6_info *ip6_pol_route_input(struct fib6_table *table,

	dst_hold(&rt->u.dst);
	if (nrt) {
		err = ip6_ins_rt(nrt, NULL, NULL, NULL);
		err = ip6_ins_rt(nrt);
		if (!err)
			goto out2;
	}
@@ -752,7 +757,7 @@ static struct rt6_info *ip6_pol_route_output(struct fib6_table *table,

	dst_hold(&rt->u.dst);
	if (nrt) {
		err = ip6_ins_rt(nrt, NULL, NULL, NULL);
		err = ip6_ins_rt(nrt);
		if (!err)
			goto out2;
	}
@@ -1206,7 +1211,7 @@ int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh,
	rt->u.dst.dev = dev;
	rt->rt6i_idev = idev;
	rt->rt6i_table = table;
	return ip6_ins_rt(rt, nlh, _rtattr, req);
	return __ip6_ins_rt(rt, nlh, _rtattr, req);

out:
	if (dev)
@@ -1393,7 +1398,7 @@ void rt6_redirect(struct in6_addr *dest, struct in6_addr *saddr,
	nrt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(neigh->dev);
	nrt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_mtu(&nrt->u.dst));

	if (ip6_ins_rt(nrt, NULL, NULL, NULL))
	if (ip6_ins_rt(nrt))
		goto out;

	netevent.old = &rt->u.dst;
@@ -1483,7 +1488,7 @@ void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr,
		dst_set_expires(&nrt->u.dst, ip6_rt_mtu_expires);
		nrt->rt6i_flags |= RTF_DYNAMIC|RTF_EXPIRES;

		ip6_ins_rt(nrt, NULL, NULL, NULL);
		ip6_ins_rt(nrt);
	}
out:
	dst_release(&rt->u.dst);