aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-dpdk
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2022-05-04 15:11:14 +0300
committerMatias Elo <matias.elo@nokia.com>2022-05-25 10:58:00 +0300
commit8f4476bcc1fd61fede91c8ef79b34250a729a8b4 (patch)
tree776c7fee09b4bef57e7a7699f6175b8d62d61370 /platform/linux-dpdk
parent503d3a0197df1b37f836ce02b0e55cc05b468526 (diff)
linux-dpdk: pktio: fix packet parse failure handling
Add missing handling for packets which were dropped due to packet parsing failures. Signed-off-by: Matias Elo <matias.elo@nokia.com> Reviewed-by: Tuomas Taipale <tuomas.taipale@nokia.com>
Diffstat (limited to 'platform/linux-dpdk')
-rw-r--r--platform/linux-dpdk/odp_packet_dpdk.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/platform/linux-dpdk/odp_packet_dpdk.c b/platform/linux-dpdk/odp_packet_dpdk.c
index f152d8fb6..b7b948d7b 100644
--- a/platform/linux-dpdk/odp_packet_dpdk.c
+++ b/platform/linux-dpdk/odp_packet_dpdk.c
@@ -924,6 +924,7 @@ int _odp_input_pkts(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[], int nu
{
pkt_dpdk_t * const pkt_dpdk = pkt_priv(pktio_entry);
uint16_t i;
+ uint16_t num_pkts = 0;
odp_pktin_config_opt_t pktin_cfg = pktio_entry->s.config.pktin;
odp_pktio_t input = pktio_entry->s.handle;
odp_time_t ts_val;
@@ -959,16 +960,19 @@ int _odp_input_pkts(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[], int nu
odp_packet_free(pkt);
continue;
}
+ if (odp_unlikely(num_pkts != i))
+ pkt_table[num_pkts] = pkt;
}
packet_set_ts(pkt_hdr, ts);
odp_prefetch(rte_pktmbuf_mtod(mbuf, char *));
+ num_pkts++;
}
if (pktio_cls_enabled(pktio_entry)) {
int failed = 0, success = 0;
- for (i = 0; i < num; i++) {
+ for (i = 0; i < num_pkts; i++) {
odp_packet_t pkt = pkt_table[i];
odp_pool_t new_pool;
uint8_t *data;
@@ -999,11 +1003,11 @@ int _odp_input_pkts(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[], int nu
++success;
}
pktio_entry->s.stats.in_errors += failed;
- pktio_entry->s.stats.in_ucast_pkts += num - failed;
- num = success;
+ pktio_entry->s.stats.in_ucast_pkts += num_pkts - failed;
+ num_pkts = success;
}
- return num;
+ return num_pkts;
}
static int recv_pkt_dpdk(pktio_entry_t *pktio_entry, int index,