net: gre: provide multicast mappings for ipv4 and ipv6
My commit 6d55cb91a0
(gre: fix hard header destination
address checking) broke multicast.
The reason is that ip_gre used to get ipgre_header() calls with
zero destination if we have NOARP or multicast destination. Instead
the actual target was decided at ipgre_tunnel_xmit() time based on
per-protocol dissection.
Instead of allowing the "abuse" of ->header() calls with invalid
destination, this creates multicast mappings for ip_gre. This also
fixes "ip neigh show nud noarp" to display the proper multicast
mappings used by the gre device.
Reported-by: Doug Kehn <rdkehn@yahoo.com>
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Acked-by: Doug Kehn <rdkehn@yahoo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
1459a3cc51
commit
93ca3bb5df
@@ -339,6 +339,14 @@ static inline void ip_ib_mc_map(__be32 naddr, const unsigned char *broadcast, ch
|
||||
buf[16] = addr & 0x0f;
|
||||
}
|
||||
|
||||
static inline void ip_ipgre_mc_map(__be32 naddr, const unsigned char *broadcast, char *buf)
|
||||
{
|
||||
if ((broadcast[0] | broadcast[1] | broadcast[2] | broadcast[3]) != 0)
|
||||
memcpy(buf, broadcast, 4);
|
||||
else
|
||||
memcpy(buf, &naddr, sizeof(naddr));
|
||||
}
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
#include <linux/ipv6.h>
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user