Currently there are two issues preventing GRE checksums from functioning
correctly:

1. When combined with checksum offloading in the userspace datapath we
   calculate the GRE checksum before the encapsulated packet. This may
   invalide the GRE checksum.
2. The Kernel datapath relies on ip_tunnel_rcv, which drops GRE
   encapsulated packets unless the presence of a checksum on the packet
   matches the presence of checksumming configured on the tunnel
   interface.

The first issue applies to the userspace datapath, but can be mitigated
by a change in checksum offload configurations and possibly also network
card offload implementation. There are tests for GRE checksums, but none
exposed this issue as they didn't also test checksum offloading. This
would be relatively straightforward to correct.

The second issue is far more substantial. We currently pool all GRE
activity through the same vport, preventing us from having different
checksum configurations on distinct tunnels. The fix for this issue
would require a significant change to how we manage GRE tunnel vports.

Given both of these issues, it’s clear that GRE checksums do not
function as intended. While there are cases where it will work with
the userspace datapath, these are fragile and the kernel datapath will
never work correctly.

Reported-at: https://redhat.atlassian.net/browse/FDP-4061
Signed-off-by: Mike Pattrick <[email protected]>
---
 NEWS                         |  3 +++
 lib/dp-packet-gso.c          | 12 ---------
 lib/netdev-native-tnl.c      | 21 +--------------
 lib/netdev-vport.c           |  6 ++---
 lib/odp-util.c               | 21 ---------------
 ofproto/ofproto-dpif-sflow.c |  3 +++
 tests/dpif-netdev.at         | 52 ++++++++++++++++++------------------
 tests/odp.at                 |  2 --
 tests/tunnel.at              |  8 +++---
 vswitchd/vswitch.xml         | 15 +++++------
 10 files changed, 45 insertions(+), 98 deletions(-)

diff --git a/NEWS b/NEWS
index 58bf25767..7304c9820 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,8 @@
 Post-v4.0.0
 --------------------
+   - Tunneling:
+     * Completely removed all support for the GRE header checksum field.
+       This feature was never implemented correctly and should never be used.
 
 
 v4.0.0 - xx xxx xxxx
diff --git a/lib/dp-packet-gso.c b/lib/dp-packet-gso.c
index 8c8817352..4df77b7be 100644
--- a/lib/dp-packet-gso.c
+++ b/lib/dp-packet-gso.c
@@ -165,18 +165,6 @@ dp_packet_gso_update_segment(struct dp_packet *seg, 
unsigned int seg_no,
                              & ~(TCP_PSH | TCP_FIN);
         tcp_hdr->tcp_ctl = TCP_CTL(tcp_flags, tcp_offset);
     }
-
-    if (gre_tnl) {
-        struct gre_base_hdr *ghdr;
-
-        ghdr = dp_packet_l4(seg);
-
-        if (ghdr->flags & htons(GRE_CSUM)) {
-            ovs_be16 *csum_opt = (ovs_be16 *) (ghdr + 1);
-            *csum_opt = 0;
-            *csum_opt = csum(ghdr, dp_packet_l4_size(seg));
-        }
-    }
 }
 
 static void
diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c
index f27b8b692..7a8199c59 100644
--- a/lib/netdev-native-tnl.c
+++ b/lib/netdev-native-tnl.c
@@ -468,15 +468,7 @@ parse_gre_header(struct dp_packet *packet,
 
     options = (ovs_16aligned_be32 *)(greh + 1);
     if (greh->flags & htons(GRE_CSUM)) {
-        ovs_be16 pkt_csum;
-
-        pkt_csum = csum(greh, dp_packet_size(packet) -
-                              ((const unsigned char *)greh -
-                               (const unsigned char *)dp_packet_eth(packet)));
-        if (pkt_csum) {
-            return -EINVAL;
-        }
-        tnl->flags |= FLOW_TNL_F_CSUM;
+        VLOG_WARN_RL(&err_rl, "GRE tunnel checksum not validated.");
         options++;
     }
 
@@ -552,11 +544,6 @@ netdev_gre_push_header(const struct netdev *netdev,
     greh = netdev_tnl_push_ip_header(packet, data->header, data->header_len,
                                      &ip_tot_size, 0);
 
-    if (greh->flags & htons(GRE_CSUM)) {
-        ovs_be16 *csum_opt = (ovs_be16 *) (greh + 1);
-        *csum_opt = csum(greh, ip_tot_size);
-    }
-
     if (greh->flags & htons(GRE_SEQ)) {
         if (!dp_packet_get_tso_segsz(packet)) {
             /* Last 4 bytes are GRE seqno. */
@@ -601,12 +588,6 @@ netdev_gre_build_header(const struct netdev *netdev,
     greh->flags = 0;
 
     options = (ovs_16aligned_be32 *) (greh + 1);
-    if (params->flow->tunnel.flags & FLOW_TNL_F_CSUM) {
-        greh->flags |= htons(GRE_CSUM);
-        put_16aligned_be32(options, 0);
-        options++;
-    }
-
     tnl_cfg = netdev_get_tunnel_config(netdev);
 
     if (tnl_cfg->out_key_present) {
diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
index d11269d00..92ab7a7af 100644
--- a/lib/netdev-vport.c
+++ b/lib/netdev-vport.c
@@ -618,8 +618,7 @@ set_tunnel_config(struct netdev *dev_, const struct smap 
*args, char **errp)
     struct smap_node *node;
     int err;
 
-    has_csum = strstr(type, "gre") || strstr(type, "geneve") ||
-               strstr(type, "vxlan");
+    has_csum = strstr(type, "geneve") || strstr(type, "vxlan");
     has_seq = strstr(type, "gre");
     memset(&tnl_cfg, 0, sizeof tnl_cfg);
 
@@ -844,8 +843,7 @@ set_tunnel_config(struct netdev *dev_, const struct smap 
*args, char **errp)
      * checksum but the default configuration isn't correlated with IP version
      * like UDP tunnels are.  Likewise, tunnels with no checksum at all must be
      * in this state. */
-    if (tnl_cfg.csum == NETDEV_TNL_CSUM_DEFAULT &&
-        (!has_csum || strstr(type, "gre"))) {
+    if (tnl_cfg.csum == NETDEV_TNL_CSUM_DEFAULT && !has_csum) {
         tnl_cfg.csum = NETDEV_TNL_DEFAULT_NO_CSUM;
     }
 
diff --git a/lib/odp-util.c b/lib/odp-util.c
index 43bb23cec..8aa2aad8a 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
@@ -814,17 +814,6 @@ format_odp_tnl_push_header(struct ds *ds, struct 
ovs_action_push_tnl *data)
                            ntohs(greh->flags), ntohs(greh->protocol));
         bytes_left -= sizeof *greh;
         options = (ovs_16aligned_be32 *)(greh + 1);
-        if (greh->flags & htons(GRE_CSUM)) {
-            if (bytes_left < sizeof(uint16_t)) {
-                ds_put_cstr(ds, ",csum=<truncated>))");
-                return;
-            }
-
-            bytes_left -= sizeof(uint16_t);
-            ds_put_format(ds, ",csum=0x%"PRIx16,
-                          ntohs(*((ovs_be16 *) options)));
-            options++;
-        }
         if (greh->flags & htons(GRE_KEY)) {
             if (bytes_left < sizeof(uint32_t)) {
                 ds_put_cstr(ds, ",key=<truncated>))");
@@ -1858,16 +1847,6 @@ ovs_parse_tnl_push(const char *s, struct 
ovs_action_push_tnl *data)
         greh->protocol = htons(gre_proto);
         ovs_16aligned_be32 *options = (ovs_16aligned_be32 *) (greh + 1);
 
-        if (greh->flags & htons(GRE_CSUM)) {
-            uint16_t csum;
-            if (!ovs_scan_len(s, &n, ",csum=0x%"SCNx16, &csum)) {
-                return -EINVAL;
-            }
-
-            memset(options, 0, sizeof *options);
-            *((ovs_be16 *)options) = htons(csum);
-            options++;
-        }
         if (greh->flags & htons(GRE_KEY)) {
             uint32_t key;
 
diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c
index e043d7cbc..e5a0bf5a1 100644
--- a/ofproto/ofproto-dpif-sflow.c
+++ b/ofproto/ofproto-dpif-sflow.c
@@ -954,9 +954,12 @@ sflow_read_tnl_push_action(const struct nlattr *attr,
         const void *l4 = ip + 1;
         const struct gre_base_hdr *greh = (const struct gre_base_hdr *) l4;
         ovs_16aligned_be32 *options = (ovs_16aligned_be32 *)(greh + 1);
+
         if (greh->flags & htons(GRE_CSUM)) {
+            VLOG_WARN_RL(&rl, "gre tunnel checksums not supported");
             options++;
         }
+
         if (greh->flags & htons(GRE_KEY)) {
             uint64_t tun_id = ntohl(get_16aligned_be32(options));
             sflow_actions->tunnel.tun_id = htonll(tun_id);
diff --git a/tests/dpif-netdev.at b/tests/dpif-netdev.at
index 5580c4336..2b804536f 100644
--- a/tests/dpif-netdev.at
+++ b/tests/dpif-netdev.at
@@ -3355,10 +3355,10 @@ AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br 
datapath_type=dummy \
                        options:csum=true ofport_request=5 \
                     -- add-port int-br t5 -- set Interface t5 type=gre \
                        options:remote_ip=2001:cafe::93 options:key=123 \
-                       options:csum=true ofport_request=6 \
+                       ofport_request=6 \
                     -- add-port int-br t6 -- set Interface t6 type=gre \
                        options:remote_ip=1.1.2.92 options:key=123 \
-                       options:csum=false ofport_request=7], [0])
+                       ofport_request=7], [0])
 
 AT_CHECK([ovs-appctl vlog/set netdev_dummy:file:dbg])
 
@@ -3490,18 +3490,18 @@ AT_CHECK_UNQUOTED([ovs-pcap p1.pcap | sort], [0], [dnl
 
[aabbcc000001aa55aa55000308004501024e00034000401131e6010102580101025ce01317c1023a5b350000655800007b00]dnl
 
[0a8f394fe0738abf7e2f058408004501021c0003000040060184c0a87b02c0a87b01d4781451000005dc0000000050100000]dnl
 [47e60000${zero100}${zero400}]
-[aabbcc000006aa55aa55000386dd60000000024a2f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a0006558da8e00000000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe0000000000000000]dnl
-[000000882001cafe000000000000000000000092d4781451000005dc0000000050100000e8210000${zero100}${zero400}]
-[aabbcc000006aa55aa55000386dd60000000024a2f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a0006558dc8200000000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe0000000000000000]dnl
-[000000882001cafe000000000000000000000092d4781451000003e80000000050100000ea150000${zero100}${zero400}]
-[aabbcc000006aa55aa55000386dd60000000024a2f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a0006558de7600000000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe0000000000000000]dnl
-[000000882001cafe000000000000000000000092d4781451000001f40000000050100000ec090000${zero100}${zero400}]
-[aabbcc000006aa55aa55000386dd60000000024a2f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a0006558e06a00000000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe0000000000000000]dnl
-[000000882001cafe000000000000000000000092d4781451000000000000000050100000edfd0000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6000000002462f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe000000000000000000000088]dnl
+[2001cafe000000000000000000000092d4781451000000000000000050100000edfd0000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6000000002462f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe000000000000000000000088]dnl
+[2001cafe000000000000000000000092d4781451000001f40000000050100000ec090000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6000000002462f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe000000000000000000000088]dnl
+[2001cafe000000000000000000000092d4781451000003e80000000050100000ea150000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6000000002462f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058486dd60000000020806002001cafe000000000000000000000088]dnl
+[2001cafe000000000000000000000092d4781451000005dc0000000050100000e8210000${zero100}${zero400}]
 
[aabbcc000006aa55aa55000386dd60000000024e11402001cafe0000000000000000000000882001cafe0000000000000000]dnl
 
[00000093e01312b5024e8ed10800000000007b000a8f394fe0738abf7e2f058486dd60000000020806002001cafe00000000]dnl
 
[00000000000000882001cafe000000000000000000000092d4781451000000000000000050100000edfd0000${zero100}]dnl
@@ -3534,18 +3534,18 @@ AT_CHECK_UNQUOTED([ovs-pcap p1.pcap | sort], [0], [dnl
 
[00000093e01317c1024e2c6d0000655800007b000a8f394fe0738abf7e2f058486dd60000000020806002001cafe00000000]dnl
 
[00000000000000882001cafe000000000000000000000092d4781451000005dc0000000050100000e8210000${zero100}]dnl
 [${zero400}]
-[aabbcc000006aa55aa55000386dd6010000002362f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a00065583a4e00000000007b0a8f394fe0738abf7e2f058408004501021c0003000040060184c0a87b02c0a87b01]dnl
-[d4781451000005dc000000005010000047e60000${zero100}${zero400}]
-[aabbcc000006aa55aa55000386dd6010000002362f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a00065583c4300000000007b0a8f394fe0738abf7e2f058408004501021c0002000040060185c0a87b02c0a87b01]dnl
-[d4781451000003e8000000005010000049da0000${zero100}${zero400}]
-[aabbcc000006aa55aa55000386dd6010000002362f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a00065583e3800000000007b0a8f394fe0738abf7e2f058408004501021c0001000040060186c0a87b02c0a87b01]dnl
-[d4781451000001f400000000501000004bce0000${zero100}${zero400}]
-[aabbcc000006aa55aa55000386dd6010000002362f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
-[00000093a0006558402d00000000007b0a8f394fe0738abf7e2f058408004501021c0000000040060187c0a87b02c0a87b01]dnl
-[d47814510000000000000000501000004dc20000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6010000002322f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058408004501021c0000000040060187c0a87b02c0a87b01d4781451]dnl
+[0000000000000000501000004dc20000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6010000002322f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058408004501021c0001000040060186c0a87b02c0a87b01d4781451]dnl
+[000001f400000000501000004bce0000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6010000002322f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058408004501021c0002000040060185c0a87b02c0a87b01d4781451]dnl
+[000003e8000000005010000049da0000${zero100}${zero400}]
+[aabbcc000006aa55aa55000386dd6010000002322f402001cafe0000000000000000000000882001cafe0000000000000000]dnl
+[00000093200065580000007b0a8f394fe0738abf7e2f058408004501021c0003000040060184c0a87b02c0a87b01d4781451]dnl
+[000005dc000000005010000047e60000${zero100}${zero400}]
 
[aabbcc000006aa55aa55000386dd60100000023a11402001cafe0000000000000000000000882001cafe0000000000000000]dnl
 
[00000093e01312b5023aed340800000000007b000a8f394fe0738abf7e2f058408004501021c0000000040060187c0a87b02]dnl
 [c0a87b01d47814510000000000000000501000004dc20000${zero100}${zero400}]
diff --git a/tests/odp.at b/tests/odp.at
index e7d8ad565..606faeeaf 100644
--- a/tests/odp.at
+++ b/tests/odp.at
@@ -331,13 +331,11 @@ 
set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,ttl=64,flags(df|csu
 
set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,ttl=64,flags(key)))
 tnl_pop(4)
 
tnl_push(tnl_port(4),header(size=42,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x2000,proto=0x6558),key=0x1e241)),out_port(1))
-tnl_push(tnl_port(4),header(size=46,type=3,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0xa000,proto=0x6558),csum=0x0,key=0x1e241)),out_port(1))
 
tnl_push(tnl_port(6),header(size=50,type=4,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x1c7)),out_port(1))
 
tnl_push(tnl_port(6),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(oam,vni=0x1c7)),out_port(1))
 
tnl_push(tnl_port(6),header(size=58,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x1c7,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(1))
 
tnl_push(tnl_port(6),header(size=50,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=17,tos=0,ttl=64,frag=0x4000),udp(src=0,dst=6081,csum=0xffff),geneve(vni=0x1c7)),out_port(1))
 
tnl_push(tnl_port(4),header(size=62,type=109,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=47,tclass=0x0,hlimit=64),gre((flags=0x2000,proto=0x6558),key=0x1e241)),out_port(1))
-tnl_push(tnl_port(4),header(size=66,type=109,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=47,tclass=0x0,hlimit=64),gre((flags=0xa000,proto=0x6558),csum=0x0,key=0x1e241)),out_port(1))
 
tnl_push(tnl_port(6),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x1c7)),out_port(1))
 
tnl_push(tnl_port(6),header(size=70,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0x0),geneve(oam,vni=0x1c7)),out_port(1))
 
tnl_push(tnl_port(6),header(size=78,type=5,eth(dst=f8:bc:12:44:34:b6,src=f8:bc:12:46:58:e0,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0x0),geneve(crit,vni=0x1c7,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(1))
diff --git a/tests/tunnel.at b/tests/tunnel.at
index fdbcccb7e..2422df100 100644
--- a/tests/tunnel.at
+++ b/tests/tunnel.at
@@ -36,12 +36,12 @@ AT_CHECK([tail -1 stdout], [0],
 
 dnl reconfigure, local_ip, remote_ip
 AT_CHECK([ovs-vsctl set Interface p2 type=gre options:local_ip=2.2.2.3 \
-          options:df_default=false options:ttl=1 options:csum=true \
+          options:df_default=false options:ttl=1 \
           -- set Interface p3 type=vxlan])
 AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0], [dnl
     br0 65534/100: (dummy-internal)
     p1 1/1: (gre: remote_ip=1.1.1.1)
-    p2 2/1: (gre: csum=true, df_default=false, local_ip=2.2.2.3, 
remote_ip=1.1.1.1, ttl=1)
+    p2 2/1: (gre: df_default=false, local_ip=2.2.2.3, remote_ip=1.1.1.1, ttl=1)
     p3 3/4789: (vxlan: remote_ip=2.2.2.2)
 ])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'tunnel(src=1.1.1.1,dst=2.2.2.2,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
 [0], [stdout])
@@ -50,7 +50,7 @@ AT_CHECK([tail -1 stdout], [0],
 ])
 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 
'tunnel(src=1.1.1.1,dst=2.2.2.3,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
 [0], [stdout])
 AT_CHECK([tail -1 stdout], [0],
-  [Datapath actions: set(tunnel(src=2.2.2.3,dst=1.1.1.1,ttl=1,flags(csum))),1
+  [Datapath actions: set(tunnel(src=2.2.2.3,dst=1.1.1.1,ttl=1,flags(0))),1
 ])
 
 dnl nonexistent tunnel
@@ -1100,7 +1100,7 @@ OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 
type=geneve \
                     -- add-port br0 p2 -- set Interface p2 type=dummy \
                     ofport_request=2 ofport_request=2 \
                     -- add-port br0 p3 -- set Interface p3 type=gre \
-                    options:remote_ip=2.2.2.2 options:csum=false 
options:key=123 ofport_request=3])
+                    options:remote_ip=2.2.2.2 options:key=123 
ofport_request=3])
 OVS_VSWITCHD_DISABLE_TUNNEL_PUSH_POP
 
 AT_DATA([flows.txt], [dnl
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index 4eec70fe4..d9019fab0 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -3207,19 +3207,18 @@
         </column>
       </group>
 
-      <group title="Tunnel Options: gre, ip6gre, geneve, bareudp and vxlan">
+      <group title="Tunnel Options: geneve, bareudp and vxlan">
         <p>
-          <code>gre</code>, <code>ip6gre</code>, <code>geneve</code>,
-          <code>bareudp</code> and <code>vxlan</code> interfaces support these
-          options.
+          <code>geneve</code>, <code>bareudp</code> and <code>vxlan</code>
+          interfaces support these options.
         </p>
 
         <column name="options" key="csum" type='{"type": "boolean"}'>
           <p>
-            Optional.  Compute encapsulation header (either GRE or UDP)
+            Optional.  Compute encapsulation header (UDP tunnels only)
             checksums on outgoing packets.  When unset (the default value),
             checksum computing for outgoing packets is enabled for UDP IPv6
-            tunnels, and disabled for GRE and IPv4 UDP tunnels.  When set to
+            tunnels, and disabled for IPv4 UDP tunnels.  When set to
             <code>false</code>, no checksums will be computed for outgoing
             tunnel encapsulation headers.  When <code>true</code>, checksums
             will be computed for all outgoing tunnel encapsulation headers.
@@ -3231,9 +3230,7 @@
           <p>
             When using the Linux kernel datapath, computation of checksums
             for <code>geneve</code> and <code>vxlan</code> requires Linux
-            kernel version 4.0 or higher.  <code>gre</code> and
-            <code>ip6gre</code> support checksums for all versions of
-            Open vSwitch that support GRE.
+            kernel version 4.0 or higher.
           </p>
 
         </column>
-- 
2.54.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to