]> git.proxmox.com Git - ovs.git/commitdiff
flow: fix udp checksum
authorLi RongQing <lirongqing@baidu.com>
Fri, 25 Jan 2019 11:08:33 +0000 (19:08 +0800)
committerBen Pfaff <blp@ovn.org>
Fri, 25 Jan 2019 20:59:20 +0000 (12:59 -0800)
As per RFC 768, if the calculated UDP checksum is 0, it should be
instead set as 0xFFFF in the frame. A value of 0 in the checksum
field indicates to the receiver that no checksum was calculated
and hence it should not verify the checksum.

Signed-off-by: Li RongQing <lirongqing@baidu.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
lib/flow.c

index c60446ff4e5467cb7688d0147c51645d1b9d503a..c6e47781b6fbd0d0c71dfaa10ec3f64bf1c871ad 100644 (file)
@@ -3023,6 +3023,9 @@ flow_compose_l4_csum(struct dp_packet *p, const struct flow *flow,
             udp->udp_csum = 0;
             udp->udp_csum = csum_finish(csum_continue(pseudo_hdr_csum,
                                                       udp, l4_len));
+            if (!udp->udp_csum) {
+                udp->udp_csum = htons(0xffff);
+            }
         } else if (flow->nw_proto == IPPROTO_ICMP) {
             struct icmp_header *icmp = dp_packet_l4(p);