On Thu, May 14, 2015 at 11:10 AM, Jiri Benc <[email protected]> wrote: > diff --git a/net/openvswitch/flow.h b/net/openvswitch/flow.h > index 2af6ffbf2f2e..78e96a120120 100644 > --- a/net/openvswitch/flow.h > +++ b/net/openvswitch/flow.h > -struct ovs_key_ipv4_tunnel { > +struct ovs_key_ip_tunnel { > __be64 tun_id; > __be32 ipv4_src; > __be32 ipv4_dst; > + struct in6_addr ipv6_src; > + struct in6_addr ipv6_dst;
The v6 addresses should really be a union with the v4 addresses since this is going into the flow key that is used on a per-packet basis. > @@ -79,6 +81,9 @@ static inline void __ovs_flow_tun_info_init(struct > ovs_tunnel_info *tun_info, > tun_info->tunnel.tun_id = tun_id; > tun_info->tunnel.ipv4_src = saddr; > tun_info->tunnel.ipv4_dst = daddr; > + memset(&tun_info->tunnel.ipv6_src, 0, > + offsetof(struct ovs_key_ip_tunnel, tun_flags) - > + offsetof(struct ovs_key_ip_tunnel, ipv6_src)); I would just memset() both the IPv6 address fields individually. Trying to be clever with the struct layout seems a little risky. > diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c > index 624e41c4267f..890a6cf4ec67 100644 > --- a/net/openvswitch/flow_netlink.c > +++ b/net/openvswitch/flow_netlink.c > @@ -273,7 +273,10 @@ size_t ovs_tun_key_attr_size(void) > * OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS and covered by it. > */ > + nla_total_size(2) /* OVS_TUNNEL_KEY_ATTR_TP_SRC */ > - + nla_total_size(2); /* OVS_TUNNEL_KEY_ATTR_TP_DST */ > + + nla_total_size(2) /* OVS_TUNNEL_KEY_ATTR_TP_DST */ > + + nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV6_SRC */ > + + nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV6_DST */ This size calculation should probably also not double count v4 and v6 addresses, although this is more just general hygiene than performance. _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
