forked from Minki/linux
ipv4/route/rtnl: get mcast attributes when dst is multicast
Commit f1ce3062c5
(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: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e3d8fabee3
commit
8caaf7b608
@ -2232,8 +2232,27 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
|
||||
error = rt->dst.error;
|
||||
|
||||
if (rt_is_input_route(rt)) {
|
||||
if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
|
||||
goto nla_put_failure;
|
||||
#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))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (rtnl_put_cacheinfo(skb, &rt->dst, 0, expires, error) < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user