Use a flag to indicate a calculated csum is available.
Allows packet reset to just use memset.
struct PacketL3 {
enum PacketL3Types type;
/* Checksum for IP packets. */
- int32_t comp_csum;
+ bool csum_set;
+ uint16_t csum;
union Hdrs {
IPV4Hdr *ip4h;
IPV6Hdr *ip6h;
return cd->valid;
}
- if (p->l3.comp_csum == -1) {
+ if (!p->l3.csum_set) {
const IPV4Hdr *ip4h = PacketGetIPv4(p);
- p->l3.comp_csum = IPV4Checksum((uint16_t *)ip4h, IPV4_GET_RAW_HLEN(ip4h), ip4h->ip_csum);
+ p->l3.csum = IPV4Checksum((uint16_t *)ip4h, IPV4_GET_RAW_HLEN(ip4h), ip4h->ip_csum);
+ p->l3.csum_set = true;
}
- if (p->l3.comp_csum == 0 && cd->valid == 1)
+ if (p->l3.csum == 0 && cd->valid == 1)
return 1;
- else if (p->l3.comp_csum != 0 && cd->valid == 0)
+ else if (p->l3.csum != 0 && cd->valid == 0)
return 1;
else
return 0;
SCSpinInit(&p->persistent.tunnel_lock, 0);
p->alerts.alerts = PacketAlertCreate();
PACKET_RESET_CHECKSUMS(p);
- p->l3.comp_csum = -1;
p->livedev = NULL;
}
}
p->ethh = NULL;
PacketClearL3(p);
- p->l3.comp_csum = -1;
if (p->tcph != NULL) {
CLEAR_TCP_PACKET(p);
}
if ((ol_flags & RTE_MBUF_F_RX_IP_CKSUM_MASK) == RTE_MBUF_F_RX_IP_CKSUM_BAD) {
SCLogDebug("HW detected BAD IP checksum");
// chsum recalc will not be triggered but rule keyword check will be
- p->l3.comp_csum = 0;
+ p->l3.csum_set = true;
+ p->l3.csum = 0;
}
if ((ol_flags & RTE_MBUF_F_RX_L4_CKSUM_MASK) == RTE_MBUF_F_RX_L4_CKSUM_BAD) {
SCLogDebug("HW detected BAD L4 chsum");