Signed-off-by: Yi Yang <yi.y.y...@intel.com> --- lib/netdev-vport.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 9dd38fc..7f52afc 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -410,6 +410,7 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args) uint16_t dst_proto = 0, src_proto = 0; struct netdev_tunnel_config tnl_cfg; struct smap_node *node; + bool is_layer3 = false; has_csum = strstr(type, "gre") || strstr(type, "geneve") || strstr(type, "stt") || strstr(type, "vxlan"); @@ -505,6 +506,7 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args) tnl_cfg.exts |= (1 << OVS_VXLAN_EXT_GBP); } else if (!strcmp(type, "vxlan") && !strcmp(ext, "gpe")) { tnl_cfg.exts |= (1 << OVS_VXLAN_EXT_GPE); + optional_layer3 = true; } else { VLOG_WARN("%s: unknown extension '%s'", name, ext); } @@ -513,15 +515,21 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args) } free(str); - } else if (!strcmp(node->key, "layer3") && optional_layer3) { + } else if (!strcmp(node->key, "layer3")) { if (!strcmp(node->value, "true")) { - tnl_cfg.is_layer3 = true; + is_layer3 = true; } } else { VLOG_WARN("%s: unknown %s argument '%s'", name, type, node->key); } } + if (optional_layer3 && is_layer3) { + tnl_cfg.is_layer3 = is_layer3; + } else if (!optional_layer3 && is_layer3) { + VLOG_WARN("%s: unknown %s argument '%s'", name, type, "layer3"); + } + if (!ipv6_addr_is_set(&tnl_cfg.ipv6_dst) && !tnl_cfg.ip_dst_flow) { VLOG_ERR("%s: %s type requires valid 'remote_ip' argument", name, type); @@ -631,7 +639,8 @@ get_tunnel_config(const struct netdev *dev, struct smap *args) smap_add(args, "csum", "true"); } - if (tnl_cfg.is_layer3 && !strcmp("gre", type)) { + if (tnl_cfg.is_layer3 && (!strcmp("gre", type) || + !strcmp("vxlan", type))) { smap_add(args, "layer3", "true"); } -- 2.1.0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev