X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-vport.c;h=07f345ceade81bac577e6d5ad740d94f5594210a;hb=05a9d485c061495d0ba83bff7e26d6eb077688aa;hp=d2c2672b024974abe27d684af82d69617375a919;hpb=2a586a5c1349177dcb9306e4b91ca4063ec79722;p=sliver-openvswitch.git diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index d2c2672b0..07f345cea 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -162,6 +162,14 @@ netdev_vport_get_netdev_type(const struct dpif_linux_vport *vport) return (nl_attr_get_u32(a[OVS_TUNNEL_ATTR_FLAGS]) & TNL_F_IPSEC ? "ipsec_gre" : "gre"); + case OVS_VPORT_TYPE_GRE64: + if (tnl_port_config_from_nlattr(vport->options, vport->options_len, + a)) { + break; + } + return (nl_attr_get_u32(a[OVS_TUNNEL_ATTR_FLAGS]) & TNL_F_IPSEC + ? "ipsec_gre64" : "gre64"); + case OVS_VPORT_TYPE_CAPWAP: return "capwap"; @@ -582,14 +590,17 @@ parse_tunnel_config(const char *name, const char *type, ovs_be32 saddr = htonl(0); uint32_t flags; - flags = TNL_F_DF_DEFAULT | TNL_F_PMTUD | TNL_F_HDR_CACHE; - if (!strcmp(type, "gre")) { + if (!strcmp(type, "capwap")) { + VLOG_WARN_ONCE("CAPWAP tunnel support is deprecated."); + } + + flags = TNL_F_DF_DEFAULT; + if (!strcmp(type, "gre") || !strcmp(type, "gre64")) { is_gre = true; - } else if (!strcmp(type, "ipsec_gre")) { + } else if (!strcmp(type, "ipsec_gre") || !strcmp(type, "ipsec_gre64")) { is_gre = true; is_ipsec = true; flags |= TNL_F_IPSEC; - flags &= ~TNL_F_HDR_CACHE; } SMAP_FOR_EACH (node, args) { @@ -614,8 +625,10 @@ parse_tunnel_config(const char *name, const char *type, char *endptr; int tos; tos = strtol(node->value, &endptr, 0); - if (*endptr == '\0') { + if (*endptr == '\0' && tos == (tos & IP_DSCP_MASK)) { nl_msg_put_u8(options, OVS_TUNNEL_ATTR_TOS, tos); + } else { + VLOG_WARN("%s: invalid TOS %s", name, node->value); } } } else if (!strcmp(node->key, "ttl")) { @@ -637,12 +650,12 @@ parse_tunnel_config(const char *name, const char *type, flags &= ~TNL_F_DF_DEFAULT; } } else if (!strcmp(node->key, "pmtud")) { - if (!strcmp(node->value, "false")) { - flags &= ~TNL_F_PMTUD; - } - } else if (!strcmp(node->key, "header_cache")) { - if (!strcmp(node->value, "false")) { - flags &= ~TNL_F_HDR_CACHE; + if (!strcmp(node->value, "true")) { + VLOG_WARN_ONCE("%s: The tunnel Path MTU discovery is " + "deprecated and may be removed in February " + "2013. Please email dev@openvswitch.org with " + "concerns.", name); + flags |= TNL_F_PMTUD; } } else if (!strcmp(node->key, "peer_cert") && is_ipsec) { if (smap_get(args, "certificate")) { @@ -682,7 +695,7 @@ parse_tunnel_config(const char *name, const char *type, if (is_ipsec) { static pid_t pid = 0; - if (pid == 0) { + if (pid <= 0) { char *file_name = xasprintf("%s/%s", ovs_rundir(), "ovs-monitor-ipsec.pid"); pid = read_pidfile(file_name); @@ -774,11 +787,6 @@ unparse_tunnel_config(const char *name OVS_UNUSED, const char *type OVS_UNUSED, return error; } - flags = nl_attr_get_u32(a[OVS_TUNNEL_ATTR_FLAGS]); - if (!(flags & TNL_F_HDR_CACHE) == !(flags & TNL_F_IPSEC)) { - smap_add(args, "header_cache", - flags & TNL_F_HDR_CACHE ? "true" : "false"); - } daddr = nl_attr_get_be32(a[OVS_TUNNEL_ATTR_DST_IPV4]); smap_add_format(args, "remote_ip", IP_FMT, IP_ARGS(&daddr)); @@ -811,11 +819,12 @@ unparse_tunnel_config(const char *name OVS_UNUSED, const char *type OVS_UNUSED, } } + flags = nl_attr_get_u32(a[OVS_TUNNEL_ATTR_FLAGS]); if (flags & TNL_F_TTL_INHERIT) { - smap_add(args, "tos", "inherit"); + smap_add(args, "ttl", "inherit"); } else if (a[OVS_TUNNEL_ATTR_TTL]) { int ttl = nl_attr_get_u8(a[OVS_TUNNEL_ATTR_TTL]); - smap_add_format(args, "tos", "%d", ttl); + smap_add_format(args, "ttl", "%d", ttl); } if (flags & TNL_F_TOS_INHERIT) { @@ -834,8 +843,8 @@ unparse_tunnel_config(const char *name OVS_UNUSED, const char *type OVS_UNUSED, if (!(flags & TNL_F_DF_DEFAULT)) { smap_add(args, "df_default", "false"); } - if (!(flags & TNL_F_PMTUD)) { - smap_add(args, "pmtud", "false"); + if (flags & TNL_F_PMTUD) { + smap_add(args, "pmtud", "true"); } return 0; @@ -968,6 +977,14 @@ netdev_vport_register(void) { "ipsec_gre", VPORT_FUNCTIONS(netdev_vport_get_drv_info) }, parse_tunnel_config, unparse_tunnel_config }, + { OVS_VPORT_TYPE_GRE64, + { "gre64", VPORT_FUNCTIONS(netdev_vport_get_drv_info) }, + parse_tunnel_config, unparse_tunnel_config }, + + { OVS_VPORT_TYPE_GRE64, + { "ipsec_gre64", VPORT_FUNCTIONS(netdev_vport_get_drv_info) }, + parse_tunnel_config, unparse_tunnel_config }, + { OVS_VPORT_TYPE_CAPWAP, { "capwap", VPORT_FUNCTIONS(netdev_vport_get_drv_info) }, parse_tunnel_config, unparse_tunnel_config },