| From foo@baz Wed Feb 28 16:16:23 CET 2018 |
| From: Brendan McGrath <redmcg@redmandi.dyndns.org> |
| Date: Wed, 13 Dec 2017 22:14:57 +1100 |
| Subject: ipv6: icmp6: Allow icmp messages to be looped back |
| |
| From: Brendan McGrath <redmcg@redmandi.dyndns.org> |
| |
| |
| [ Upstream commit 588753f1eb18978512b1c9b85fddb457d46f9033 ] |
| |
| One example of when an ICMPv6 packet is required to be looped back is |
| when a host acts as both a Multicast Listener and a Multicast Router. |
| |
| A Multicast Router will listen on address ff02::16 for MLDv2 messages. |
| |
| Currently, MLDv2 messages originating from a Multicast Listener running |
| on the same host as the Multicast Router are not being delivered to the |
| Multicast Router. This is due to dst.input being assigned the default |
| value of dst_discard. |
| |
| This results in the packet being looped back but discarded before being |
| delivered to the Multicast Router. |
| |
| This patch sets dst.input to ip6_input to ensure a looped back packet |
| is delivered to the Multicast Router. |
| |
| Signed-off-by: Brendan McGrath <redmcg@redmandi.dyndns.org> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/route.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/net/ipv6/route.c |
| +++ b/net/ipv6/route.c |
| @@ -1367,6 +1367,7 @@ struct dst_entry *icmp6_dst_alloc(struct |
| } |
| |
| rt->dst.flags |= DST_HOST; |
| + rt->dst.input = ip6_input; |
| rt->dst.output = ip6_output; |
| atomic_set(&rt->dst.__refcnt, 1); |
| rt->rt6i_gateway = fl6->daddr; |