Now GRE64 deals with tunnel with no key and tunnel with zero key
as same. This behaviour is different than standard GRE.

Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
---
 datapath/vport-gre.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c
index 4000c74..e3a190f 100644
--- a/datapath/vport-gre.c
+++ b/datapath/vport-gre.c
@@ -54,7 +54,11 @@ static int gre_hdr_len(const struct tnl_mutable_config 
*mutable)
        if (mutable->flags & TNL_F_CSUM)
                len += GRE_HEADER_SECTION;
 
-       if (mutable->out_key || mutable->flags & TNL_F_OUT_KEY_ACTION) {
+       /* Set key for GRE64 tunnels, even when key if is zero. */
+       if (mutable->out_key ||
+           mutable->key.tunnel_type & TNL_T_PROTO_GRE64 ||
+           mutable->flags & TNL_F_OUT_KEY_ACTION) {
+
                len += GRE_HEADER_SECTION;
                if (mutable->key.tunnel_type & TNL_T_PROTO_GRE64)
                        len += GRE_HEADER_SECTION;
@@ -103,7 +107,8 @@ static void gre_build_header(const struct vport *vport,
                if (mutable->key.tunnel_type & TNL_T_PROTO_GRE64)
                        greh->flags |= GRE_SEQ;
 
-       } else if (mutable->out_key) {
+       } else if (mutable->out_key ||
+                  mutable->key.tunnel_type & TNL_T_PROTO_GRE64) {
                greh->flags |= GRE_KEY;
                *options = be64_get_low32(mutable->out_key);
                if (mutable->key.tunnel_type & TNL_T_PROTO_GRE64) {
@@ -131,7 +136,8 @@ static struct sk_buff *gre_update_header(const struct vport 
*vport,
                }
                *options = be64_get_low32(OVS_CB(skb)->tun_id);
                options--;
-       } else if (mutable->out_key) {
+       } else if (mutable->out_key ||
+                  mutable->key.tunnel_type & TNL_T_PROTO_GRE64) {
                options--;
                if (mutable->key.tunnel_type & TNL_T_PROTO_GRE64)
                        options--;
-- 
1.7.10

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to