diff options
Diffstat (limited to 'platform/linux-generic/odp_packet.c')
-rw-r--r-- | platform/linux-generic/odp_packet.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index 07e9c2d4d..89de5130d 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -1945,10 +1945,10 @@ int _odp_packet_sctp_chksum_insert(odp_packet_t pkt) } int _odp_packet_l4_chksum(odp_packet_hdr_t *pkt_hdr, - odp_proto_chksums_t chksums, uint64_t l4_part_sum) + odp_pktin_config_opt_t opt, uint64_t l4_part_sum) { /* UDP chksum == 0 case is covered in parse_udp() */ - if (chksums.chksum.udp && + if (opt.bit.udp_chksum && pkt_hdr->p.input_flags.udp && !pkt_hdr->p.input_flags.ipfrag && !pkt_hdr->p.input_flags.udp_chksum_zero) { @@ -1967,7 +1967,7 @@ int _odp_packet_l4_chksum(odp_packet_hdr_t *pkt_hdr, } } - if (chksums.chksum.tcp && + if (opt.bit.tcp_chksum && pkt_hdr->p.input_flags.tcp && !pkt_hdr->p.input_flags.ipfrag) { uint16_t sum = ~packet_sum(pkt_hdr, @@ -1985,7 +1985,7 @@ int _odp_packet_l4_chksum(odp_packet_hdr_t *pkt_hdr, } } - if (chksums.chksum.sctp && + if (opt.bit.sctp_chksum && pkt_hdr->p.input_flags.sctp && !pkt_hdr->p.input_flags.ipfrag) { uint32_t seg_len = 0; @@ -2074,17 +2074,20 @@ int odp_packet_parse(odp_packet_t pkt, uint32_t offset, } opt.all_bits = 0; + opt.bit.ipv4_chksum = param->chksums.chksum.ipv4; + opt.bit.udp_chksum = param->chksums.chksum.udp; + opt.bit.tcp_chksum = param->chksums.chksum.tcp; + opt.bit.sctp_chksum = param->chksums.chksum.sctp; ret = _odp_packet_parse_common_l3_l4(&pkt_hdr->p, data, offset, packet_len, seg_len, layer, - ethtype, param->chksums, - &l4_part_sum, opt); + ethtype, &l4_part_sum, opt); if (ret) return -1; if (layer >= ODP_PROTO_LAYER_L4) { - ret = _odp_packet_l4_chksum(pkt_hdr, param->chksums, l4_part_sum); + ret = _odp_packet_l4_chksum(pkt_hdr, opt, l4_part_sum); if (ret) return -1; } |