Re: [ovs-dev] [PATCH v3] odp-util: calc checksum of ip hdr for tunnel encap

2019-10-01 Thread Ben Pfaff
On Tue, Oct 01, 2019 at 03:04:01PM +0800, martinbj2...@gmail.com wrote:
> From: Martin Zhang 
> 
> V2: fix warning
> V3: replace tab with spaces
> 
> Signed-off-by: Martin Zhang 

Thanks, applied to master.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH v3] odp-util: calc checksum of ip hdr for tunnel encap

2019-10-01 Thread martinbj2008
From: Martin Zhang 

V2: fix warning
V3: replace tab with spaces

Signed-off-by: Martin Zhang 
---
 lib/odp-util.c | 10 +++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/lib/odp-util.c b/lib/odp-util.c
index fe59a56..36c6c3b 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
@@ -44,6 +44,7 @@
 #include "openvswitch/vlog.h"
 #include "openvswitch/match.h"
 #include "odp-netlink-macros.h"
+#include "csum.h"
 
 VLOG_DEFINE_THIS_MODULE(odp_util);
 
@@ -1482,7 +1483,7 @@ ovs_parse_tnl_push(const char *s, struct 
ovs_action_push_tnl *data)
 struct gre_base_hdr *greh;
 struct erspan_base_hdr *ersh;
 struct erspan_md2 *md2;
-uint16_t gre_proto, gre_flags, dl_type, udp_src, udp_dst, csum, sid;
+uint16_t gre_proto, gre_flags, dl_type, udp_src, udp_dst, udp_csum, sid;
 ovs_be32 sip, dip;
 uint32_t tnl_type = 0, header_len = 0, ip_len = 0, erspan_idx = 0;
 void *l3, *l4;
@@ -1516,6 +1517,7 @@ ovs_parse_tnl_push(const char *s, struct 
ovs_action_push_tnl *data)
 if (eth->eth_type == htons(ETH_TYPE_IP)) {
 /* IPv4 */
 uint16_t ip_frag_off;
+memset(ip, 0, sizeof(*ip));
 if (!ovs_scan_len(s, , 
"ipv4(src="IP_SCAN_FMT",dst="IP_SCAN_FMT",proto=%"SCNi8
   ",tos=%"SCNi8",ttl=%"SCNi8",frag=0x%"SCNx16"),",
   IP_SCAN_ARGS(),
@@ -1529,6 +1531,7 @@ ovs_parse_tnl_push(const char *s, struct 
ovs_action_push_tnl *data)
 ip->ip_frag_off = htons(ip_frag_off);
 ip->ip_ihl_ver = IP_IHL_VER(5, 4);
 ip_len = sizeof *ip;
+ip->ip_csum = csum(ip, ip_len);
 } else {
 char sip6_s[IPV6_SCAN_LEN + 1];
 char dip6_s[IPV6_SCAN_LEN + 1];
@@ -1557,13 +1560,13 @@ ovs_parse_tnl_push(const char *s, struct 
ovs_action_push_tnl *data)
 udp = (struct udp_header *) l4;
 greh = (struct gre_base_hdr *) l4;
 if (ovs_scan_len(s, , 
"udp(src=%"SCNi16",dst=%"SCNi16",csum=0x%"SCNx16"),",
- _src, _dst, )) {
+ _src, _dst, _csum)) {
 uint32_t vx_flags, vni;
 
 udp->udp_src = htons(udp_src);
 udp->udp_dst = htons(udp_dst);
 udp->udp_len = 0;
-udp->udp_csum = htons(csum);
+udp->udp_csum = htons(udp_csum);
 
 if (ovs_scan_len(s, , "vxlan(flags=0x%"SCNx32",vni=0x%"SCNx32"))",
  _flags, )) {
@@ -1629,6 +1632,7 @@ ovs_parse_tnl_push(const char *s, struct 
ovs_action_push_tnl *data)
 ovs_16aligned_be32 *options = (ovs_16aligned_be32 *) (greh + 1);
 
 if (greh->flags & htons(GRE_CSUM)) {
+uint16_t csum;
 if (!ovs_scan_len(s, , ",csum=0x%"SCNx16, )) {
 return -EINVAL;
 }
-- 
1.8.3.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev