gre: do not assign header_ops in collect metadata mode
In ipgre mode (i.e. not gretap) with collect metadata flag set, the tunnel is incorrectly assumed to be mGRE in NBMA mode (see commitpull/281/head6a5f44d7a0). This is not the case, we're controlling the encapsulation addresses by lwtunnel metadata. And anyway, assigning dev->header_ops in collect metadata mode does not make sense. Although it would be more user firendly to reject requests that specify both the collect metadata flag and a remote/local IP address, this would break current users of gretap or introduce ugly code and differences in handling ipgre and gretap configuration. Keep the current behavior of remote/local IP address being ignored in such case. v3: Back to v1, added explanation paragraph. v2: Reject configuration specifying both remote/local address and collect metadata flag. Fixes:2e15ea390e("ip_gre: Add support to collect tunnel metadata.") Signed-off-by: Jiri Benc <jbenc@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
parent
12395d0647
commit
a64b04d86d
|
|
@ -893,7 +893,7 @@ static int ipgre_tunnel_init(struct net_device *dev)
|
|||
netif_keep_dst(dev);
|
||||
dev->addr_len = 4;
|
||||
|
||||
if (iph->daddr) {
|
||||
if (iph->daddr && !tunnel->collect_md) {
|
||||
#ifdef CONFIG_NET_IPGRE_BROADCAST
|
||||
if (ipv4_is_multicast(iph->daddr)) {
|
||||
if (!iph->saddr)
|
||||
|
|
@ -902,8 +902,9 @@ static int ipgre_tunnel_init(struct net_device *dev)
|
|||
dev->header_ops = &ipgre_header_ops;
|
||||
}
|
||||
#endif
|
||||
} else
|
||||
} else if (!tunnel->collect_md) {
|
||||
dev->header_ops = &ipgre_header_ops;
|
||||
}
|
||||
|
||||
return ip_tunnel_init(dev);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue