dpdk: add a check for HW checksum validation offload

Ticket: #5553
pull/8430/head
Lukas Sismis 2 years ago committed by Victor Julien
parent da1ad843b4
commit cb6fa894ef

@ -41,13 +41,13 @@
#include "util-napatech.h"
#endif /* HAVE_NAPATECH */
typedef enum {
CHECKSUM_VALIDATION_DISABLE,
CHECKSUM_VALIDATION_ENABLE,
CHECKSUM_VALIDATION_AUTO,
CHECKSUM_VALIDATION_RXONLY,
CHECKSUM_VALIDATION_KERNEL,
CHECKSUM_VALIDATION_OFFLOAD,
} ChecksumValidationMode;
enum PktSrcEnum {

@ -1210,7 +1210,7 @@ static int DeviceConfigure(DPDKIfaceConfig *iconf)
DeviceInitPortConf(iconf, &dev_info, &port_conf);
if (port_conf.rxmode.offloads & DEV_RX_OFFLOAD_CHECKSUM) {
// Suricata does not need recalc checksums now
iconf->checksum_mode = CHECKSUM_VALIDATION_DISABLE;
iconf->checksum_mode = CHECKSUM_VALIDATION_OFFLOAD;
}
retval = rte_eth_dev_configure(

@ -385,6 +385,28 @@ static TmEcode ReceiveDPDKLoop(ThreadVars *tv, void *data, void *slot)
p->dpdk_v.copy_mode = ptv->copy_mode;
p->dpdk_v.out_port_id = ptv->out_port_id;
p->dpdk_v.out_queue_id = ptv->queue_id;
p->livedev = ptv->livedev;
if (ptv->checksum_mode == CHECKSUM_VALIDATION_DISABLE) {
p->flags |= PKT_IGNORE_CHECKSUM;
} else if (ptv->checksum_mode == CHECKSUM_VALIDATION_OFFLOAD) {
uint64_t ol_flags = ptv->received_mbufs[i]->ol_flags;
if ((ol_flags & RTE_MBUF_F_RX_IP_CKSUM_MASK) == RTE_MBUF_F_RX_IP_CKSUM_GOOD &&
(ol_flags & RTE_MBUF_F_RX_L4_CKSUM_MASK) == RTE_MBUF_F_RX_L4_CKSUM_GOOD) {
SCLogDebug("HW detected GOOD IP and L4 chsum, ignoring validation");
p->flags |= PKT_IGNORE_CHECKSUM;
} else {
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->level3_comp_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");
p->level4_comp_csum = 0;
}
}
}
PacketSetData(p, rte_pktmbuf_mtod(p->dpdk_v.mbuf, uint8_t *),
rte_pktmbuf_pkt_len(p->dpdk_v.mbuf));

Loading…
Cancel
Save