[ovs-dev] [PATCH 05/15] tunneling: add IPv6 support to netdev_tunnel_config

Thadeu Lima de Souza Cascardo cascardo at redhat.com
Wed Nov 11 13:33:24 UTC 2015


On Tue, Nov 10, 2015 at 02:24:06PM -0800, Ben Pfaff wrote:
> On Thu, Oct 22, 2015 at 03:28:58PM -0200, Thadeu Lima de Souza Cascardo wrote:
> > From: Jiri Benc <jbenc at redhat.com>
> > 
> > Allow configuration of IPv6 tunnel endpoints.
> > 
> > [cascardo: removed support for netlink datapath configuration]
> > [cascardo: use IPv4 mapped IPv6 addresses]
> > [cascardo: use only flow, instead of flow and flow6]
> > 
> > Signed-off-by: Jiri Benc <jbenc at redhat.com>
> > Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo at redhat.com>
> > Co-authored-by: Thadeu Lima de Souza Cascardo <cascardo at redhat.com>
> 
> I suggest folding this in, for style and to avoid a cast:
> 
> diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
> index cf393fa..2500996 100644
> --- a/lib/netdev-vport.c
> +++ b/lib/netdev-vport.c
> @@ -428,24 +428,28 @@ static int
>  parse_tunnel_ip(const char *value, bool accept_mcast, bool *flow,
>                  struct in6_addr *ipv6, uint16_t *protocol)
>  {
> -    ovs_be32 ip;
>      if (!strcmp(value, "flow")) {
>          *flow = true;
>          *protocol = 0;
>          return 0;
>      }
>      if (addr_is_ipv6(value)) {
> -        if (lookup_ipv6(value, ipv6))
> -                return ENOENT;
> -        if (!accept_mcast && ipv6_addr_is_multicast(ipv6))
> -                return EINVAL;
> +        if (lookup_ipv6(value, ipv6)) {
> +            return ENOENT;
> +        }
> +        if (!accept_mcast && ipv6_addr_is_multicast(ipv6)){
> +            return EINVAL;
> +        }
>          *protocol = ETH_TYPE_IPV6;
>      } else {
> -        if (lookup_ip(value, (struct in_addr *)&ip))
> -                return ENOENT;
> -        if (!accept_mcast && ip_is_multicast(ip))
> -                return EINVAL;
> -        in6_addr_set_mapped_ipv4(ipv6, ip);
> +        struct in_addr ip;
> +        if (lookup_ip(value, &ip)) {
> +            return ENOENT;
> +        }
> +        if (!accept_mcast && ip_is_multicast(ip.s_addr)) {
> +            return EINVAL;
> +        }
> +        in6_addr_set_mapped_ipv4(ipv6, ip.s_addr);
>          *protocol = ETH_TYPE_IP;
>      }
>      return 0;
> 
> The code in set_tunnel_config() makes me think that smap_add_ipv6()
> itself should check whether the address is IPv4-mapped and just use an
> IPv4 address in that case.

Thanks for all the reviews, Ben. I appreciate it a lot.

I will fold that in, and take a look at set_tunnel_config.

Thanks.
Cascardo.



More information about the dev mailing list