提交 e277de5f 编写于 作者: J Jesse Gross 提交者: David S. Miller

tunnels: Don't require remote endpoint or ID during creation.

Before lightweight tunnels existed, it really didn't make sense to
create a tunnel that was not fully specified, such as without a
destination IP address - the resulting packets would go nowhere.
However, with lightweight tunnels, the opposite is true - it doesn't
make sense to require this information when it will be provided later
on by the route. This loosens the requirements for this information.

An alternative would be to allow the relaxed version only when
COLLECT_METADATA is enabled. However, since there are several
variations on this theme (such as NBMA tunnels in GRE), just dropping
the restrictions seems the most consistent across tunnels and with
the existing configuration.

CC: John Linville <linville@tuxdriver.com>
Signed-off-by: NJesse Gross <jesse@nicira.com>
Signed-off-by: NThomas Graf <tgraf@suug.ch>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 740dbc28
...@@ -870,14 +870,14 @@ static int geneve_newlink(struct net *net, struct net_device *dev, ...@@ -870,14 +870,14 @@ static int geneve_newlink(struct net *net, struct net_device *dev,
__be16 dst_port = htons(GENEVE_UDP_PORT); __be16 dst_port = htons(GENEVE_UDP_PORT);
__u8 ttl = 0, tos = 0; __u8 ttl = 0, tos = 0;
bool metadata = false; bool metadata = false;
__be32 rem_addr; __be32 rem_addr = 0;
__u32 vni; __u32 vni = 0;
if (!data[IFLA_GENEVE_ID] || !data[IFLA_GENEVE_REMOTE]) if (data[IFLA_GENEVE_ID])
return -EINVAL; vni = nla_get_u32(data[IFLA_GENEVE_ID]);
vni = nla_get_u32(data[IFLA_GENEVE_ID]); if (data[IFLA_GENEVE_REMOTE])
rem_addr = nla_get_in_addr(data[IFLA_GENEVE_REMOTE]); rem_addr = nla_get_in_addr(data[IFLA_GENEVE_REMOTE]);
if (data[IFLA_GENEVE_TTL]) if (data[IFLA_GENEVE_TTL])
ttl = nla_get_u8(data[IFLA_GENEVE_TTL]); ttl = nla_get_u8(data[IFLA_GENEVE_TTL]);
......
...@@ -2745,11 +2745,10 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev, ...@@ -2745,11 +2745,10 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
struct vxlan_config conf; struct vxlan_config conf;
int err; int err;
if (!data[IFLA_VXLAN_ID])
return -EINVAL;
memset(&conf, 0, sizeof(conf)); memset(&conf, 0, sizeof(conf));
conf.vni = nla_get_u32(data[IFLA_VXLAN_ID]);
if (data[IFLA_VXLAN_ID])
conf.vni = nla_get_u32(data[IFLA_VXLAN_ID]);
if (data[IFLA_VXLAN_GROUP]) { if (data[IFLA_VXLAN_GROUP]) {
conf.remote_ip.sin.sin_addr.s_addr = nla_get_in_addr(data[IFLA_VXLAN_GROUP]); conf.remote_ip.sin.sin_addr.s_addr = nla_get_in_addr(data[IFLA_VXLAN_GROUP]);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册