[ovs-dev] [PATCH 3/7] datapath: Wrap struct ovs_key_ipv4_tunnel in a new structure.
Pravin Shelar
pshelar at nicira.com
Thu Jun 19 20:30:45 UTC 2014
On Tue, Jun 10, 2014 at 4:47 PM, Jesse Gross <jesse at nicira.com> wrote:
> Currently, the flow information that is matched for tunnels and
> the tunnel data passed around with packets is the same. However,
> as additional information is added this is not necessarily desirable,
> as in the case of pointers.
>
> This adds a new structure for tunnel metadata which currently contains
> only the existing struct. This change is purely internal to the kernel
> since the current OVS_KEY_ATTR_IPV4_TUNNEL is simply a compressed version
> of OVS_KEY_ATTR_TUNNEL that is translated at flow setup.
>
> Signed-off-by: Jesse Gross <jesse at nicira.com>
Looks good.
Acked-by: Pravin B Shelar <pshelar at nicira.com>
> ---
> datapath/actions.c | 6 +++---
> datapath/datapath.h | 2 +-
> datapath/flow.c | 11 +++++++----
> datapath/flow.h | 22 +++++++++++++---------
> datapath/flow_netlink.c | 38 +++++++++++++++++++++++++++++++-------
> datapath/vport-gre.c | 38 ++++++++++++++++++--------------------
> datapath/vport-lisp.c | 28 +++++++++++++---------------
> datapath/vport-vxlan.c | 29 +++++++++++++----------------
> datapath/vport.c | 6 +++---
> datapath/vport.h | 2 +-
> include/linux/openvswitch.h | 2 +-
> 11 files changed, 104 insertions(+), 80 deletions(-)
>
> diff --git a/datapath/actions.c b/datapath/actions.c
> index 603c7cb..72fdcf9 100644
> --- a/datapath/actions.c
> +++ b/datapath/actions.c
> @@ -518,8 +518,8 @@ static int execute_set_action(struct sk_buff *skb,
> skb->mark = nla_get_u32(nested_attr);
> break;
>
> - case OVS_KEY_ATTR_IPV4_TUNNEL:
> - OVS_CB(skb)->tun_key = nla_data(nested_attr);
> + case OVS_KEY_ATTR_TUNNEL_INFO:
> + OVS_CB(skb)->tun_info = nla_data(nested_attr);
> break;
>
> case OVS_KEY_ATTR_ETHERNET:
> @@ -701,7 +701,7 @@ int ovs_execute_actions(struct datapath *dp, struct sk_buff *skb, bool recirc)
> goto out_loop;
> }
>
> - OVS_CB(skb)->tun_key = NULL;
> + OVS_CB(skb)->tun_info = NULL;
> error = do_execute_actions(dp, skb, acts->actions, acts->actions_len);
>
> /* Check whether sub-actions looped too much. */
> diff --git a/datapath/datapath.h b/datapath/datapath.h
> index a847bd9..fcd8e86 100644
> --- a/datapath/datapath.h
> +++ b/datapath/datapath.h
> @@ -105,7 +105,7 @@ struct datapath {
> struct ovs_skb_cb {
> struct sw_flow *flow;
> struct sw_flow_key *pkt_key;
> - struct ovs_key_ipv4_tunnel *tun_key;
> + struct ovs_tunnel_info *tun_info;
> struct vport *input_vport;
> };
> #define OVS_CB(skb) ((struct ovs_skb_cb *)(skb)->cb)
> diff --git a/datapath/flow.c b/datapath/flow.c
> index 2a839ff..f1bb95d 100644
> --- a/datapath/flow.c
> +++ b/datapath/flow.c
> @@ -451,12 +451,15 @@ int ovs_flow_extract(struct sk_buff *skb, u16 in_port, struct sw_flow_key *key)
> int error;
> struct ethhdr *eth;
>
> - key->phy.priority = skb->priority;
> - if (OVS_CB(skb)->tun_key)
> - memcpy(&key->tun_key, OVS_CB(skb)->tun_key, sizeof(key->tun_key));
> - else
> + if (OVS_CB(skb)->tun_info) {
> + struct ovs_tunnel_info *tun_info = OVS_CB(skb)->tun_info;
> + memcpy(&key->tun_key, &tun_info->tunnel,
> + sizeof(key->tun_key));
> + } else {
> memset(&key->tun_key, 0, sizeof(key->tun_key));
> + }
>
> + key->phy.priority = skb->priority;
> key->phy.in_port = in_port;
> key->phy.skb_mark = skb->mark;
> key->ovs_flow_hash = 0;
> diff --git a/datapath/flow.h b/datapath/flow.h
> index 2018691..0ecf78b 100644
> --- a/datapath/flow.h
> +++ b/datapath/flow.h
> @@ -51,20 +51,24 @@ struct ovs_key_ipv4_tunnel {
> u8 ipv4_ttl;
> } __packed __aligned(4); /* Minimize padding. */
>
> -static inline void ovs_flow_tun_key_init(struct ovs_key_ipv4_tunnel *tun_key,
> +struct ovs_tunnel_info {
> + struct ovs_key_ipv4_tunnel tunnel;
> +};
> +
> +static inline void ovs_flow_tun_info_init(struct ovs_tunnel_info *tun_info,
> const struct iphdr *iph, __be64 tun_id,
> __be16 tun_flags)
> {
> - tun_key->tun_id = tun_id;
> - tun_key->ipv4_src = iph->saddr;
> - tun_key->ipv4_dst = iph->daddr;
> - tun_key->ipv4_tos = iph->tos;
> - tun_key->ipv4_ttl = iph->ttl;
> - tun_key->tun_flags = tun_flags;
> + tun_info->tunnel.tun_id = tun_id;
> + tun_info->tunnel.ipv4_src = iph->saddr;
> + tun_info->tunnel.ipv4_dst = iph->daddr;
> + tun_info->tunnel.ipv4_tos = iph->tos;
> + tun_info->tunnel.ipv4_ttl = iph->ttl;
> + tun_info->tunnel.tun_flags = tun_flags;
>
> /* clear struct padding. */
> - memset((unsigned char *) tun_key + OVS_TUNNEL_KEY_SIZE, 0,
> - sizeof(*tun_key) - OVS_TUNNEL_KEY_SIZE);
> + memset((unsigned char *) &tun_info->tunnel + OVS_TUNNEL_KEY_SIZE, 0,
> + sizeof(tun_info->tunnel) - OVS_TUNNEL_KEY_SIZE);
> }
>
> struct sw_flow_key {
> diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
> index 803a94c..0048a6e 100644
> --- a/datapath/flow_netlink.c
> +++ b/datapath/flow_netlink.c
> @@ -1160,13 +1160,14 @@ out:
> return (struct nlattr *) ((unsigned char *)(*sfa) + next_offset);
> }
>
> -static int add_action(struct sw_flow_actions **sfa, int attrtype, void *data, int len)
> +static struct nlattr *__add_action(struct sw_flow_actions **sfa, int attrtype,
> + void *data, int len)
> {
> struct nlattr *a;
>
> a = reserve_sfa_size(sfa, nla_attr_size(len));
> if (IS_ERR(a))
> - return PTR_ERR(a);
> + return a;
>
> a->nla_type = attrtype;
> a->nla_len = nla_attr_size(len);
> @@ -1175,6 +1176,18 @@ static int add_action(struct sw_flow_actions **sfa, int attrtype, void *data, in
> memcpy(nla_data(a), data, len);
> memset((unsigned char *) a + a->nla_len, 0, nla_padlen(len));
>
> + return a;
> +}
> +
> +static int add_action(struct sw_flow_actions **sfa, int attrtype,
> + void *data, int len)
> +{
> + struct nlattr *a;
> +
> + a = __add_action(sfa, attrtype, data, len);
> + if (IS_ERR(a))
> + return PTR_ERR(a);
> +
> return 0;
> }
>
> @@ -1280,6 +1293,8 @@ static int validate_and_copy_set_tun(const struct nlattr *attr,
> {
> struct sw_flow_match match;
> struct sw_flow_key key;
> + struct ovs_tunnel_info *tun_info;
> + struct nlattr *a;
> int err, start;
>
> ovs_match_init(&match, &key, NULL);
> @@ -1291,8 +1306,14 @@ static int validate_and_copy_set_tun(const struct nlattr *attr,
> if (start < 0)
> return start;
>
> - err = add_action(sfa, OVS_KEY_ATTR_IPV4_TUNNEL, &match.key->tun_key,
> - sizeof(match.key->tun_key));
> + a = __add_action(sfa, OVS_KEY_ATTR_TUNNEL_INFO, NULL,
> + sizeof(*tun_info));
> + if (IS_ERR(a))
> + return PTR_ERR(a);
> +
> + tun_info = nla_data(a);
> + tun_info->tunnel = key.tun_key;
> +
> add_nested_action_end(*sfa, start);
>
> return err;
> @@ -1575,17 +1596,20 @@ static int set_action_to_attr(const struct nlattr *a, struct sk_buff *skb)
> int err;
>
> switch (key_type) {
> - case OVS_KEY_ATTR_IPV4_TUNNEL:
> + case OVS_KEY_ATTR_TUNNEL_INFO: {
> + struct ovs_tunnel_info *tun_info = nla_data(ovs_key);
> +
> start = nla_nest_start(skb, OVS_ACTION_ATTR_SET);
> if (!start)
> return -EMSGSIZE;
>
> - err = ipv4_tun_to_nlattr(skb, nla_data(ovs_key),
> - nla_data(ovs_key));
> + err = ipv4_tun_to_nlattr(skb, &tun_info->tunnel,
> + &tun_info->tunnel);
> if (err)
> return err;
> nla_nest_end(skb, start);
> break;
> + }
> default:
> if (nla_put(skb, OVS_ACTION_ATTR_SET, nla_len(a), ovs_key))
> return -EMSGSIZE;
> diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c
> index 5d5090c..f30f090 100644
> --- a/datapath/vport-gre.c
> +++ b/datapath/vport-gre.c
> @@ -66,7 +66,7 @@ static struct sk_buff *__build_header(struct sk_buff *skb,
> int tunnel_hlen,
> __be32 seq, __be16 gre64_flag)
> {
> - const struct ovs_key_ipv4_tunnel *tun_key = OVS_CB(skb)->tun_key;
> + const struct ovs_key_ipv4_tunnel *tun_key = &OVS_CB(skb)->tun_info->tunnel;
> struct tnl_ptk_info tpi;
>
> skb = gre_handle_offloads(skb, !!(tun_key->tun_flags & TUNNEL_CSUM));
> @@ -96,7 +96,7 @@ static __be64 key_to_tunnel_id(__be32 key, __be32 seq)
> static int gre_rcv(struct sk_buff *skb,
> const struct tnl_ptk_info *tpi)
> {
> - struct ovs_key_ipv4_tunnel tun_key;
> + struct ovs_tunnel_info tun_info;
> struct ovs_net *ovs_net;
> struct vport *vport;
> __be64 key;
> @@ -110,9 +110,10 @@ static int gre_rcv(struct sk_buff *skb,
> return PACKET_REJECT;
>
> key = key_to_tunnel_id(tpi->key, tpi->seq);
> - ovs_flow_tun_key_init(&tun_key, ip_hdr(skb), key, filter_tnl_flags(tpi->flags));
> + ovs_flow_tun_info_init(&tun_info, ip_hdr(skb), key,
> + filter_tnl_flags(tpi->flags));
>
> - ovs_vport_receive(vport, skb, &tun_key);
> + ovs_vport_receive(vport, skb, &tun_info);
> return PACKET_RCVD;
> }
>
> @@ -139,6 +140,7 @@ static int __send(struct vport *vport, struct sk_buff *skb,
> int tunnel_hlen,
> __be32 seq, __be16 gre64_flag)
> {
> + struct ovs_key_ipv4_tunnel *tun_key = &OVS_CB(skb)->tun_info->tunnel;
> struct rtable *rt;
> int min_headroom;
> __be16 df;
> @@ -146,12 +148,10 @@ static int __send(struct vport *vport, struct sk_buff *skb,
> int err;
>
> /* Route lookup */
> - saddr = OVS_CB(skb)->tun_key->ipv4_src;
> + saddr = tun_key->ipv4_src;
> rt = find_route(ovs_dp_get_net(vport->dp),
> - &saddr,
> - OVS_CB(skb)->tun_key->ipv4_dst,
> - IPPROTO_GRE,
> - OVS_CB(skb)->tun_key->ipv4_tos,
> + &saddr, tun_key->ipv4_dst,
> + IPPROTO_GRE, tun_key->ipv4_tos,
> skb->mark);
> if (IS_ERR(rt)) {
> err = PTR_ERR(rt);
> @@ -189,15 +189,13 @@ static int __send(struct vport *vport, struct sk_buff *skb,
> goto err_free_rt;
> }
>
> - df = OVS_CB(skb)->tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ?
> - htons(IP_DF) : 0;
> -
> + df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
> skb->local_df = 1;
>
> return iptunnel_xmit(rt, skb, saddr,
> - OVS_CB(skb)->tun_key->ipv4_dst, IPPROTO_GRE,
> - OVS_CB(skb)->tun_key->ipv4_tos,
> - OVS_CB(skb)->tun_key->ipv4_ttl, df, false);
> + tun_key->ipv4_dst, IPPROTO_GRE,
> + tun_key->ipv4_tos,
> + tun_key->ipv4_ttl, df, false);
> err_free_rt:
> ip_rt_put(rt);
> error:
> @@ -286,10 +284,10 @@ static int gre_send(struct vport *vport, struct sk_buff *skb)
> {
> int hlen;
>
> - if (unlikely(!OVS_CB(skb)->tun_key))
> + if (unlikely(!OVS_CB(skb)->tun_info))
> return -EINVAL;
>
> - hlen = ip_gre_calc_hlen(OVS_CB(skb)->tun_key->tun_flags);
> + hlen = ip_gre_calc_hlen(OVS_CB(skb)->tun_info->tunnel.tun_flags);
>
> return __send(vport, skb, hlen, 0, 0);
> }
> @@ -360,13 +358,13 @@ static int gre64_send(struct vport *vport, struct sk_buff *skb)
> GRE_HEADER_SECTION; /* GRE SEQ */
> __be32 seq;
>
> - if (unlikely(!OVS_CB(skb)->tun_key))
> + if (unlikely(!OVS_CB(skb)->tun_info))
> return -EINVAL;
>
> - if (OVS_CB(skb)->tun_key->tun_flags & TUNNEL_CSUM)
> + if (OVS_CB(skb)->tun_info->tunnel.tun_flags & TUNNEL_CSUM)
> hlen += GRE_HEADER_SECTION;
>
> - seq = be64_get_high32(OVS_CB(skb)->tun_key->tun_id);
> + seq = be64_get_high32(OVS_CB(skb)->tun_info->tunnel.tun_id);
> return __send(vport, skb, hlen, seq, (TUNNEL_KEY|TUNNEL_SEQ));
> }
>
> diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c
> index af9a71e..dbad387 100644
> --- a/datapath/vport-lisp.c
> +++ b/datapath/vport-lisp.c
> @@ -193,7 +193,7 @@ static void lisp_build_header(const struct vport *vport,
> struct lisp_port *lisp_port = lisp_vport(vport);
> struct udphdr *udph = udp_hdr(skb);
> struct lisphdr *lisph = (struct lisphdr *)(udph + 1);
> - const struct ovs_key_ipv4_tunnel *tun_key = OVS_CB(skb)->tun_key;
> + const struct ovs_key_ipv4_tunnel *tun_key = &OVS_CB(skb)->tun_info->tunnel;
>
> udph->dest = lisp_port->dst_port;
> udph->source = htons(get_src_port(net, skb));
> @@ -221,7 +221,7 @@ static int lisp_rcv(struct sock *sk, struct sk_buff *skb)
> struct lisp_port *lisp_port;
> struct lisphdr *lisph;
> struct iphdr *iph, *inner_iph;
> - struct ovs_key_ipv4_tunnel tun_key;
> + struct ovs_tunnel_info tun_info;
> __be64 key;
> struct ethhdr *ethh;
> __be16 protocol;
> @@ -242,7 +242,7 @@ static int lisp_rcv(struct sock *sk, struct sk_buff *skb)
>
> /* Save outer tunnel values */
> iph = ip_hdr(skb);
> - ovs_flow_tun_key_init(&tun_key, iph, key, TUNNEL_KEY);
> + ovs_flow_tun_info_init(&tun_info, iph, key, TUNNEL_KEY);
>
> /* Drop non-IP inner packets */
> inner_iph = (struct iphdr *)(lisph + 1);
> @@ -267,7 +267,7 @@ static int lisp_rcv(struct sock *sk, struct sk_buff *skb)
>
> ovs_skb_postpush_rcsum(skb, skb->data, ETH_HLEN);
>
> - ovs_vport_receive(vport_from_priv(lisp_port), skb, &tun_key);
> + ovs_vport_receive(vport_from_priv(lisp_port), skb, &tun_info);
> goto out;
>
> error:
> @@ -422,6 +422,7 @@ static int handle_offloads(struct sk_buff *skb)
>
> static int lisp_send(struct vport *vport, struct sk_buff *skb)
> {
> + struct ovs_key_ipv4_tunnel *tun_key = &OVS_CB(skb)->tun_info->tunnel;
> int network_offset = skb_network_offset(skb);
> struct rtable *rt;
> int min_headroom;
> @@ -430,7 +431,7 @@ static int lisp_send(struct vport *vport, struct sk_buff *skb)
> int sent_len;
> int err;
>
> - if (unlikely(!OVS_CB(skb)->tun_key))
> + if (unlikely(!OVS_CB(skb)->tun_info))
> return -EINVAL;
>
> if (skb->protocol != htons(ETH_P_IP) &&
> @@ -440,12 +441,10 @@ static int lisp_send(struct vport *vport, struct sk_buff *skb)
> }
>
> /* Route lookup */
> - saddr = OVS_CB(skb)->tun_key->ipv4_src;
> + saddr = tun_key->ipv4_src;
> rt = find_route(ovs_dp_get_net(vport->dp),
> - &saddr,
> - OVS_CB(skb)->tun_key->ipv4_dst,
> - IPPROTO_UDP,
> - OVS_CB(skb)->tun_key->ipv4_tos,
> + &saddr, tun_key->ipv4_dst,
> + IPPROTO_UDP, tun_key->ipv4_tos,
> skb->mark);
> if (IS_ERR(rt)) {
> err = PTR_ERR(rt);
> @@ -485,12 +484,11 @@ static int lisp_send(struct vport *vport, struct sk_buff *skb)
>
> skb->local_df = 1;
>
> - df = OVS_CB(skb)->tun_key->tun_flags &
> - TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
> + df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
> sent_len = iptunnel_xmit(rt, skb,
> - saddr, OVS_CB(skb)->tun_key->ipv4_dst,
> - IPPROTO_UDP, OVS_CB(skb)->tun_key->ipv4_tos,
> - OVS_CB(skb)->tun_key->ipv4_ttl, df, false);
> + saddr, tun_key->ipv4_dst,
> + IPPROTO_UDP, tun_key->ipv4_tos,
> + tun_key->ipv4_ttl, df, false);
>
> return sent_len > 0 ? sent_len + network_offset : sent_len;
>
> diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c
> index cc9477d..41c1756 100644
> --- a/datapath/vport-vxlan.c
> +++ b/datapath/vport-vxlan.c
> @@ -60,7 +60,7 @@ static inline struct vxlan_port *vxlan_vport(const struct vport *vport)
> /* Called with rcu_read_lock and BH disabled. */
> static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb, __be32 vx_vni)
> {
> - struct ovs_key_ipv4_tunnel tun_key;
> + struct ovs_tunnel_info tun_info;
> struct vport *vport = vs->data;
> struct iphdr *iph;
> __be64 key;
> @@ -68,9 +68,9 @@ static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb, __be32 vx_vni)
> /* Save outer tunnel values */
> iph = ip_hdr(skb);
> key = cpu_to_be64(ntohl(vx_vni) >> 8);
> - ovs_flow_tun_key_init(&tun_key, iph, key, TUNNEL_KEY);
> + ovs_flow_tun_info_init(&tun_info, iph, key, TUNNEL_KEY);
>
> - ovs_vport_receive(vport, skb, &tun_key);
> + ovs_vport_receive(vport, skb, &tun_info);
> }
>
> static int vxlan_get_options(const struct vport *vport, struct sk_buff *skb)
> @@ -139,6 +139,7 @@ error:
>
> static int vxlan_tnl_send(struct vport *vport, struct sk_buff *skb)
> {
> + struct ovs_key_ipv4_tunnel *tun_key = &OVS_CB(skb)->tun_info->tunnel;
> struct net *net = ovs_dp_get_net(vport->dp);
> struct vxlan_port *vxlan_port = vxlan_vport(vport);
> __be16 dst_port = inet_sport(vxlan_port->vs->sock->sk);
> @@ -150,38 +151,34 @@ static int vxlan_tnl_send(struct vport *vport, struct sk_buff *skb)
> int port_max;
> int err;
>
> - if (unlikely(!OVS_CB(skb)->tun_key)) {
> + if (unlikely(!OVS_CB(skb)->tun_info)) {
> err = -EINVAL;
> goto error;
> }
>
> /* Route lookup */
> - saddr = OVS_CB(skb)->tun_key->ipv4_src;
> + saddr = tun_key->ipv4_src;
> rt = find_route(ovs_dp_get_net(vport->dp),
> - &saddr,
> - OVS_CB(skb)->tun_key->ipv4_dst,
> - IPPROTO_UDP,
> - OVS_CB(skb)->tun_key->ipv4_tos,
> + &saddr, tun_key->ipv4_dst,
> + IPPROTO_UDP, tun_key->ipv4_tos,
> skb->mark);
> if (IS_ERR(rt)) {
> err = PTR_ERR(rt);
> goto error;
> }
>
> - df = OVS_CB(skb)->tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ?
> - htons(IP_DF) : 0;
> -
> + df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
> skb->local_df = 1;
>
> inet_get_local_port_range(net, &port_min, &port_max);
> src_port = vxlan_src_port(port_min, port_max, skb);
>
> err = vxlan_xmit_skb(vxlan_port->vs, rt, skb,
> - saddr, OVS_CB(skb)->tun_key->ipv4_dst,
> - OVS_CB(skb)->tun_key->ipv4_tos,
> - OVS_CB(skb)->tun_key->ipv4_ttl, df,
> + saddr, tun_key->ipv4_dst,
> + tun_key->ipv4_tos,
> + tun_key->ipv4_ttl, df,
> src_port, dst_port,
> - htonl(be64_to_cpu(OVS_CB(skb)->tun_key->tun_id) << 8));
> + htonl(be64_to_cpu(tun_key->tun_id) << 8));
> if (err < 0)
> ip_rt_put(rt);
> error:
> diff --git a/datapath/vport.c b/datapath/vport.c
> index 0dcecd0..5fce377 100644
> --- a/datapath/vport.c
> +++ b/datapath/vport.c
> @@ -460,14 +460,14 @@ u32 ovs_vport_find_upcall_portid(const struct vport *p, struct sk_buff *skb)
> *
> * @vport: vport that received the packet
> * @skb: skb that was received
> - * @tun_key: tunnel (if any) that carried packet
> + * @tun_info: tunnel (if any) that carried packet
> *
> * Must be called with rcu_read_lock. The packet cannot be shared and
> * skb->data should point to the Ethernet header. The caller must have already
> * called compute_ip_summed() to initialize the checksumming fields.
> */
> void ovs_vport_receive(struct vport *vport, struct sk_buff *skb,
> - struct ovs_key_ipv4_tunnel *tun_key)
> + struct ovs_tunnel_info *tun_info)
> {
> struct pcpu_sw_netstats *stats;
>
> @@ -477,7 +477,7 @@ void ovs_vport_receive(struct vport *vport, struct sk_buff *skb,
> stats->rx_bytes += skb->len;
> u64_stats_update_end(&stats->syncp);
>
> - OVS_CB(skb)->tun_key = tun_key;
> + OVS_CB(skb)->tun_info = tun_info;
> ovs_dp_process_received_packet(vport, skb);
> }
>
> diff --git a/datapath/vport.h b/datapath/vport.h
> index cfaea09..c02daf5 100644
> --- a/datapath/vport.h
> +++ b/datapath/vport.h
> @@ -211,7 +211,7 @@ static inline struct vport *vport_from_priv(void *priv)
> }
>
> void ovs_vport_receive(struct vport *, struct sk_buff *,
> - struct ovs_key_ipv4_tunnel *);
> + struct ovs_tunnel_info *);
>
> /* List of statically compiled vport implementations. Don't forget to also
> * add yours to the list at the top of vport.c. */
> diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h
> index d7f85ff..33423ad 100644
> --- a/include/linux/openvswitch.h
> +++ b/include/linux/openvswitch.h
> @@ -320,7 +320,7 @@ enum ovs_key_attr {
> OVS_KEY_ATTR_RECIRC_ID, /* u32 recirc id */
> #ifdef __KERNEL__
> /* Only used within kernel data path. */
> - OVS_KEY_ATTR_IPV4_TUNNEL, /* struct ovs_key_ipv4_tunnel */
> + OVS_KEY_ATTR_TUNNEL_INFO, /* struct ovs_tunnel_info */
> #endif
> /* Experimental */
>
> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list