Commit 84581bda authored by Xin Long's avatar Xin Long Committed by David S. Miller

erspan: set erspan_ver to 1 by default when adding an erspan dev

After erspan_ver is introudced, if erspan_ver is not set in iproute, its
value will be left 0 by default. Since Commit 02f99df1 ("erspan: fix
invalid erspan version."), it has broken the traffic due to the version
check in erspan_xmit if users are not aware of 'erspan_ver' param, like
using an old version of iproute.

To fix this compatibility problem, it sets erspan_ver to 1 by default
when adding an erspan dev in erspan_setup. Note that we can't do it in
ipgre_netlink_parms, as this function is also used by ipgre_changelink.

Fixes: 02f99df1 ("erspan: fix invalid erspan version.")
Reported-by: default avatarJianlin Shi <jishi@redhat.com>
Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 834539e6
...@@ -1508,11 +1508,14 @@ static int ipgre_fill_info(struct sk_buff *skb, const struct net_device *dev) ...@@ -1508,11 +1508,14 @@ static int ipgre_fill_info(struct sk_buff *skb, const struct net_device *dev)
static void erspan_setup(struct net_device *dev) static void erspan_setup(struct net_device *dev)
{ {
struct ip_tunnel *t = netdev_priv(dev);
ether_setup(dev); ether_setup(dev);
dev->netdev_ops = &erspan_netdev_ops; dev->netdev_ops = &erspan_netdev_ops;
dev->priv_flags &= ~IFF_TX_SKB_SHARING; dev->priv_flags &= ~IFF_TX_SKB_SHARING;
dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
ip_tunnel_setup(dev, erspan_net_id); ip_tunnel_setup(dev, erspan_net_id);
t->erspan_ver = 1;
} }
static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = { static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
......
...@@ -1778,6 +1778,7 @@ static void ip6gre_netlink_parms(struct nlattr *data[], ...@@ -1778,6 +1778,7 @@ static void ip6gre_netlink_parms(struct nlattr *data[],
if (data[IFLA_GRE_COLLECT_METADATA]) if (data[IFLA_GRE_COLLECT_METADATA])
parms->collect_md = true; parms->collect_md = true;
parms->erspan_ver = 1;
if (data[IFLA_GRE_ERSPAN_VER]) if (data[IFLA_GRE_ERSPAN_VER])
parms->erspan_ver = nla_get_u8(data[IFLA_GRE_ERSPAN_VER]); parms->erspan_ver = nla_get_u8(data[IFLA_GRE_ERSPAN_VER]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment