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

Commit 8caaf7b6 authored by Nicolas Dichtel's avatar Nicolas Dichtel Committed by David S. Miller
Browse files

ipv4/route/rtnl: get mcast attributes when dst is multicast



Commit f1ce3062 (ipv4: Remove 'rt_dst' from 'struct rtable') removes the
call to ipmr_get_route(), which will get multicast parameters of the route.

I revert the part of the patch that remove this call. I think the goal was only
to get rid of rt_dst field.

The patch is only compiled-tested. My first idea was to remove ipmr_get_route()
because rt_fill_info() was the only user, but it seems the previous patch cleans
the code a bit too much ;-)

Signed-off-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e3d8fabe
Loading
Loading
Loading
Loading
+21 −2
Original line number Original line Diff line number Diff line
@@ -2232,6 +2232,25 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
	error = rt->dst.error;
	error = rt->dst.error;


	if (rt_is_input_route(rt)) {
	if (rt_is_input_route(rt)) {
#ifdef CONFIG_IP_MROUTE
		if (ipv4_is_multicast(dst) && !ipv4_is_local_multicast(dst) &&
		    IPV4_DEVCONF_ALL(net, MC_FORWARDING)) {
			int err = ipmr_get_route(net, skb,
						 fl4->saddr, fl4->daddr,
						 r, nowait);
			if (err <= 0) {
				if (!nowait) {
					if (err == 0)
						return 0;
					goto nla_put_failure;
				} else {
					if (err == -EMSGSIZE)
						goto nla_put_failure;
					error = err;
				}
			}
		} else
#endif
			if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
			if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
				goto nla_put_failure;
				goto nla_put_failure;
	}
	}