Here is a little series which helped me identify a multi segment issue.
Hope it can help others.

The difference since the RFC patches I sent some time ago is that, rather
than force the user to build the dpdk with CONFIG_RTE_LIBRTE_MBUF_DEBUG
enabled, it uses rx/tx callbacks to apply checks on the mbufs.

This is not perfect, since when an invalid mbuf is detected, we try to free
it and a crash is possible at this time (depends on what went wrong).

On the rx side, this is better than let this packet go through the
application and we end up with harder to identify issues.
On the tx side, this is more about validating that the application did not
break the mbuf before passing it to the driver.

Example:
./testpmd -l 2,14 --socket-mem 2048,0 -w 0000:03:00.0 -w 0000:03:00.1 -- -i
[...]
testpmd> port stop all
testpmd> port config all sanity_check rx+tx
testpmd> port config all scatter on
testpmd> port start all
Configuring Port 0 (socket 0)
Port 0: F4:E9:D4:ED:B4:06
Configuring Port 1 (socket 0)
Port 1: F4:E9:D4:ED:B4:07
Checking link statuses...
Done
testpmd> port config mtu 0 9000
testpmd> port config mtu 1 9000
testpmd> start
testpmd: invalid rx mbuf on port 1 queue 0: data length too big in mbuf segment

testpmd> set verbose 1
Change verbose level from 0 to 1
dump mbuf at 0x7f48db9fa740, iova=2291fa7c0, buf_len=2176
  pkt_len=8014, ol_flags=180, nb_segs=4, in_port=1
  segment at 0x7f48db9fa740, data=0x7f48db9fa840, data_len=2112
  segment at 0x7f48db9fb080, data=0x7f48db9fb180, data_len=2112
  segment at 0x7f48db9fb9c0, data=0x7f48db9fbac0, data_len=2112
  segment at 0x7f48db9fc300, data=0x7f48db9fc400, data_len=1678
testpmd: invalid rx mbuf on port 1 queue 0: data length too big in mbuf segment


-- 
David Marchand

David Marchand (3):
  mbuf: add sanity checks on segment metadata
  mbuf: add a non fatal sanity check helper
  app/testpmd: add sanity checks on received/sent packets

 app/test-pmd/cmdline.c               |  63 ++++++++++++++
 app/test-pmd/config.c                |  23 +++++
 app/test-pmd/parameters.c            |   7 ++
 app/test-pmd/testpmd.c               | 123 +++++++++++++++++++++++++++
 app/test-pmd/testpmd.h               |   9 ++
 lib/librte_mbuf/Makefile             |   2 +
 lib/librte_mbuf/meson.build          |   2 +
 lib/librte_mbuf/rte_mbuf.c           |  71 ++++++++++++----
 lib/librte_mbuf/rte_mbuf.h           |  23 +++++
 lib/librte_mbuf/rte_mbuf_version.map |   6 ++
 10 files changed, 312 insertions(+), 17 deletions(-)

-- 
2.17.1

Reply via email to