[v2] pcapng: allow any protocol link type for the interface block
Checks
Commit Message
From: Dylan Schneider <schneide@qti.qualcomm.com>
Allow the user to specify protocol link type when creating pcapng files.
This change is needed to specify the protocol type in the pcapng file,
DLT_EN10MB specifies ethernet packets only. This will allow dissectors
for other protocols to be used on files generated by pcapng.
Includes a breaking change to rte_pcapng_add_interface to add link_type
parameter. Existing calls to the function have been updated to pass
DLT_EN10MB for the link type argument.
Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
Cc: stephen@networkplumber.org
---
.mailmap | 1 +
app/dumpcap/main.c | 4 ++--
app/test/test_pcapng.c | 8 ++++----
doc/guides/rel_notes/release_25_07.rst | 4 ++++
lib/graph/graph_pcap.c | 4 +++-
lib/pcapng/meson.build | 7 +++++++
lib/pcapng/rte_pcapng.c | 22 ++++++++++++++++------
lib/pcapng/rte_pcapng.h | 4 +++-
8 files changed, 40 insertions(+), 14 deletions(-)
Comments
On Mon, 9 Jun 2025 15:19:37 -0600
Schneide <schneide@qti.qualcomm.com> wrote:
> From: Dylan Schneider <schneide@qti.qualcomm.com>
>
> Allow the user to specify protocol link type when creating pcapng files.
> This change is needed to specify the protocol type in the pcapng file,
> DLT_EN10MB specifies ethernet packets only. This will allow dissectors
> for other protocols to be used on files generated by pcapng.
>
> Includes a breaking change to rte_pcapng_add_interface to add link_type
> parameter. Existing calls to the function have been updated to pass
> DLT_EN10MB for the link type argument.
>
> Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
> Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
> Cc: stephen@networkplumber.org
> ---
Recheck-request: aws-unit-testing
On Mon, 9 Jun 2025 15:19:37 -0600
Schneide <schneide@qti.qualcomm.com> wrote:
> From: Dylan Schneider <schneide@qti.qualcomm.com>
>
> Allow the user to specify protocol link type when creating pcapng files.
> This change is needed to specify the protocol type in the pcapng file,
> DLT_EN10MB specifies ethernet packets only. This will allow dissectors
> for other protocols to be used on files generated by pcapng.
>
> Includes a breaking change to rte_pcapng_add_interface to add link_type
> parameter. Existing calls to the function have been updated to pass
> DLT_EN10MB for the link type argument.
>
> Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
> Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
> Cc: stephen@networkplumber.org
Reviewed-by: Stephen Hemminger <stephen@networkplumber.org>
09/06/2025 23:19, Schneide:
> From: Dylan Schneider <schneide@qti.qualcomm.com>
>
> Allow the user to specify protocol link type when creating pcapng files.
> This change is needed to specify the protocol type in the pcapng file,
> DLT_EN10MB specifies ethernet packets only. This will allow dissectors
> for other protocols to be used on files generated by pcapng.
>
> Includes a breaking change to rte_pcapng_add_interface to add link_type
> parameter. Existing calls to the function have been updated to pass
> DLT_EN10MB for the link type argument.
>
> Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
> Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
> Cc: stephen@networkplumber.org
Excuse me, I'm a bit lost because you have sent 3 v2,
and there is no changelog.
I suppose I should assume this last v2 fixed the comments done by Stephen.
09/06/2025 23:19, Schneide:
> From: Dylan Schneider <schneide@qti.qualcomm.com>
>
> Allow the user to specify protocol link type when creating pcapng files.
> This change is needed to specify the protocol type in the pcapng file,
> DLT_EN10MB specifies ethernet packets only. This will allow dissectors
> for other protocols to be used on files generated by pcapng.
>
> Includes a breaking change to rte_pcapng_add_interface to add link_type
> parameter. Existing calls to the function have been updated to pass
> DLT_EN10MB for the link type argument.
>
> Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
> Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
> Cc: stephen@networkplumber.org
I doesn't pass compilation test on my machine:
Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Hey Thomas,
Thanks for the reply.
Can you tell me the build command you're using to produce those errors? I have ran the builds on my test machine and cannot reproduce these. Thanks!
Dylan
27/06/2025 19:46, Dylan Schneider:
> Can you tell me the build command you're using to produce those errors? I have ran the builds on my test machine and cannot reproduce these. Thanks!
I run devtools/test-meson-builds.sh with an Arm toolchain installed.
Message:
=================
Libraries Enabled
=================
libs:
log, kvargs, argparse, telemetry, pmu, eal, ptr_compress, ring,
rcu, mempool, mbuf, net, meter, ethdev, pci, cmdline,
metrics, hash, timer, acl, bbdev, bitratestats, bpf, cfgfile,
compressdev, cryptodev, distributor, dmadev, efd, eventdev, dispatcher, gpudev,
gro, gso, ip_frag, jobstats, latencystats, lpm, member, power,
rawdev, regexdev, mldev, rib, reorder, sched, security, stack,
vhost, ipsec, pdcp, fib, port, table, pipeline,
Message:
===============
Drivers Enabled
===============
common:
cpt, dpaax, ionic, mvep, octeontx, cnxk, mlx5, nfp,
nitrox, qat, sfc_efx, zsda,
bus:
auxiliary, cdx, dpaa, fslmc, ifpga, pci, platform, uacce,
vdev, vmbus,
mempool:
bucket, cnxk, dpaa, dpaa2, octeontx, ring, stack,
dma:
cnxk, dpaa, dpaa2, hisilicon, odm, skeleton,
net:
af_packet, ark, atlantic, avp, axgbe, bnx2x, bnxt, bond,
cnxk, cxgbe, dpaa, dpaa2, ena, enetc, enetfec, enic,
failsafe, gve, hinic, hns3, e1000, fm10k, i40e, iavf,
ice, idpf, ixgbe, cpfl, ionic, mana, memif, mlx4,
mlx5, mvneta, mvpp2, netvsc, nfp, ngbe, null, octeontx,
octeon_ep, pfe, qede, r8169, ring, rnp, sfc, softnic,
tap, thunderx, txgbe, vdev_netvsc, vhost, virtio, vmxnet3, xsc,
raw:
cnxk_bphy, cnxk_gpio, cnxk_rvu_lf, dpaa2_cmdif, gdtc, ntb, skeleton,
crypto:
armv8, bcmfs, caam_jr, cnxk, dpaa_sec, dpaa2_sec, ionic, mlx5,
mvsam, nitrox, null, octeontx, scheduler, virtio,
compress:
mlx5, nitrox, octeontx, zlib,
regex:
mlx5, cn9k,
ml:
cnxk,
vdpa:
ifc, mlx5, nfp, sfc,
event:
cnxk, dpaa, dpaa2, dsw, opdl, skeleton, sw, octeontx,
baseband:
acc, fpga_5gnr_fec, fpga_lte_fec, la12xx, null, turbo_sw,
gpu:
power:
acpi, amd_pstate, cppc, intel_pstate, intel_uncore, kvm_vm,
[...]
User defined options
Cross files : dpdk/config/arm/arm64_armv8_linux_gcc
buildtype : debugoptimized
default_library : shared
enable_deprecated_libs: *
examples : all
werror : True
Found ninja-1.12.1 at /usr/bin/ninja
Cleaning... 75 files.
[3652/3653] Linking target drivers/librte_event_cnxk.so.25.2
Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Hey Thomas, just wanted to confirm, I see the ARM build passing in CI. Is there a reason it would pass there but not on your dev machine?
Sorry I did not investigate, but there is probably a different installation of the pcap library.
I have this in a config file:
pcaparm=$deps/libpcap/build-aarch64/install # requires big changes in DPDK
#export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$pcaparm/lib/pkgconfig
I don't remember what are the big changes required, and why it is disabled.
Checking Meson, libpcap is indeed not found on aarch64:
Run-time dependency libpcap found: NO (tried pkgconfig)
Library pcap found: NO
Can you check whether the error can be related to the absence of libpcap?
30/06/2025 15:50, Dylan Schneider:
> Hey Thomas, just wanted to confirm, I see the ARM build passing in CI. Is there a reason it would pass there but not on your dev machine?
>
>
> ________________________________
> From: Dylan Schneider <schneide@qti.qualcomm.com>
> Sent: Friday, June 27, 2025 11:46 AM
> To: Thomas Monjalon <thomas@monjalon.net>
> Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
>
>
> WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
>
> Hey Thomas,
> Thanks for the reply.
> Can you tell me the build command you're using to produce those errors? I have ran the builds on my test machine and cannot reproduce these. Thanks!
> Dylan
> ________________________________
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Friday, June 27, 2025 11:39 AM
> To: Dylan Schneider <schneide@qti.qualcomm.com>
> Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
>
> WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
>
> 09/06/2025 23:19, Schneide:
> > From: Dylan Schneider <schneide@qti.qualcomm.com>
> >
> > Allow the user to specify protocol link type when creating pcapng files.
> > This change is needed to specify the protocol type in the pcapng file,
> > DLT_EN10MB specifies ethernet packets only. This will allow dissectors
> > for other protocols to be used on files generated by pcapng.
> >
> > Includes a breaking change to rte_pcapng_add_interface to add link_type
> > parameter. Existing calls to the function have been updated to pass
> > DLT_EN10MB for the link type argument.
> >
> > Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
> > Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
> > Cc: stephen@networkplumber.org
>
> I doesn't pass compilation test on my machine:
>
> Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
>
>
>
>
Hey Thomas,
I retried a build when libpcap was absent and was able to reproduce the same errors as you did.
Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
These Errors are coming from ABI check: dpdk/devtools/check-abi.sh:49
I see in this function that it is checking for the existence of these libraries, which will be absent when libpcap is absent. Is there a way to have the abi-check skip these libraries if they are not built?
Or better question: How does the abi-check even know about these libraries if they are never built?
Thanks!
Dylan
Please can you compare which libraries are built before/after your patch?
02/07/2025 21:30, Dylan Schneider:
> Hey Thomas,
> I retried a build when libpcap was absent and was able to reproduce the same errors as you did.
>
> Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
>
> These Errors are coming from ABI check: dpdk/devtools/check-abi.sh:49
>
> I see in this function that it is checking for the existence of these libraries, which will be absent when libpcap is absent. Is there a way to have the abi-check skip these libraries if they are not built?
> Or better question: How does the abi-check even know about these libraries if they are never built?
>
> Thanks!
> Dylan
>
>
> ________________________________
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Monday, June 30, 2025 8:28 AM
> To: Dylan Schneider <schneide@qti.qualcomm.com>
> Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
>
> WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
>
> Sorry I did not investigate, but there is probably a different installation of the pcap library.
>
> I have this in a config file:
>
> pcaparm=$deps/libpcap/build-aarch64/install # requires big changes in DPDK
> #export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$pcaparm/lib/pkgconfig
>
> I don't remember what are the big changes required, and why it is disabled.
>
> Checking Meson, libpcap is indeed not found on aarch64:
>
> Run-time dependency libpcap found: NO (tried pkgconfig)
> Library pcap found: NO
>
> Can you check whether the error can be related to the absence of libpcap?
>
>
>
> 30/06/2025 15:50, Dylan Schneider:
> > Hey Thomas, just wanted to confirm, I see the ARM build passing in CI. Is there a reason it would pass there but not on your dev machine?
> >
> >
> > ________________________________
> > From: Dylan Schneider <schneide@qti.qualcomm.com>
> > Sent: Friday, June 27, 2025 11:46 AM
> > To: Thomas Monjalon <thomas@monjalon.net>
> > Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> > Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
> >
> >
> > WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
> >
> > Hey Thomas,
> > Thanks for the reply.
> > Can you tell me the build command you're using to produce those errors? I have ran the builds on my test machine and cannot reproduce these. Thanks!
> > Dylan
> > ________________________________
> > From: Thomas Monjalon <thomas@monjalon.net>
> > Sent: Friday, June 27, 2025 11:39 AM
> > To: Dylan Schneider <schneide@qti.qualcomm.com>
> > Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> > Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
> >
> > WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
> >
> > 09/06/2025 23:19, Schneide:
> > > From: Dylan Schneider <schneide@qti.qualcomm.com>
> > >
> > > Allow the user to specify protocol link type when creating pcapng files.
> > > This change is needed to specify the protocol type in the pcapng file,
> > > DLT_EN10MB specifies ethernet packets only. This will allow dissectors
> > > for other protocols to be used on files generated by pcapng.
> > >
> > > Includes a breaking change to rte_pcapng_add_interface to add link_type
> > > parameter. Existing calls to the function have been updated to pass
> > > DLT_EN10MB for the link type argument.
> > >
> > > Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
> > > Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
> > > Cc: stephen@networkplumber.org
> >
> > I doesn't pass compilation test on my machine:
> >
> > Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> >
> >
> >
> >
>
>
>
>
>
>
I did a clean build on system where libpcap was NOT installed.
My changes make rte_pcapng lib depend on libpcap (this is for libpcaps DLT_USER Macros).
So now, in turn, everything that depends on rte_pcapng also depends on libpcap. Dumpcap, rte_graph and rte_pdump all depend on rte_pcapng, so I think we may need to add the libpcap dependency to all of these? We would then need to add the libpcap dependency to any libraries that depend on these, which seems like a slippery slope. Maybe that's not the best approach though. Can you say whether it is okay to add libpcap dependency to all of these libraries? Or maybe there's a better way to enforce the dependency for DPDK build? Or is it altogether incorrect to have rte_pcapng depend on libpcap in the first place?
Thanks,
Dylan
03/07/2025 18:29, Dylan Schneider:
> I did a clean build on system where libpcap was NOT installed.
>
> My changes make rte_pcapng lib depend on libpcap (this is for libpcaps DLT_USER Macros).
> So now, in turn, everything that depends on rte_pcapng also depends on libpcap. Dumpcap, rte_graph and rte_pdump all depend on rte_pcapng, so I think we may need to add the libpcap dependency to all of these? We would then need to add the libpcap dependency to any libraries that depend on these, which seems like a slippery slope. Maybe that's not the best approach though. Can you say whether it is okay to add libpcap dependency to all of these libraries? Or maybe there's a better way to enforce the dependency for DPDK build? Or is it altogether incorrect to have rte_pcapng depend on libpcap in the first place?
The best is to have only rte_pcapng to depend on libpcap, as you did.
If the problem is only in ABI check, this is what we need to fix.
I'm not sure how to fix this.
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Thursday, July 3, 2025 7:27 AM
> To: Dylan Schneider <schneide@qti.qualcomm.com>
> Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
>
> WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
>
> Please can you compare which libraries are built before/after your patch?
>
>
> 02/07/2025 21:30, Dylan Schneider:
> > Hey Thomas,
> > I retried a build when libpcap was absent and was able to reproduce the same errors as you did.
> >
> > Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> >
> > These Errors are coming from ABI check: dpdk/devtools/check-abi.sh:49
> >
> > I see in this function that it is checking for the existence of these libraries, which will be absent when libpcap is absent. Is there a way to have the abi-check skip these libraries if they are not built?
> > Or better question: How does the abi-check even know about these libraries if they are never built?
> >
> > Thanks!
> > Dylan
> >
> >
> > ________________________________
> > From: Thomas Monjalon <thomas@monjalon.net>
> > Sent: Monday, June 30, 2025 8:28 AM
> > To: Dylan Schneider <schneide@qti.qualcomm.com>
> > Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> > Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
> >
> > WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
> >
> > Sorry I did not investigate, but there is probably a different installation of the pcap library.
> >
> > I have this in a config file:
> >
> > pcaparm=$deps/libpcap/build-aarch64/install # requires big changes in DPDK
> > #export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$pcaparm/lib/pkgconfig
> >
> > I don't remember what are the big changes required, and why it is disabled.
> >
> > Checking Meson, libpcap is indeed not found on aarch64:
> >
> > Run-time dependency libpcap found: NO (tried pkgconfig)
> > Library pcap found: NO
> >
> > Can you check whether the error can be related to the absence of libpcap?
> >
> >
> >
> > 30/06/2025 15:50, Dylan Schneider:
> > > Hey Thomas, just wanted to confirm, I see the ARM build passing in CI. Is there a reason it would pass there but not on your dev machine?
> > >
> > >
> > > ________________________________
> > > From: Dylan Schneider <schneide@qti.qualcomm.com>
> > > Sent: Friday, June 27, 2025 11:46 AM
> > > To: Thomas Monjalon <thomas@monjalon.net>
> > > Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> > > Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
> > >
> > >
> > > WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
> > >
> > > Hey Thomas,
> > > Thanks for the reply.
> > > Can you tell me the build command you're using to produce those errors? I have ran the builds on my test machine and cannot reproduce these. Thanks!
> > > Dylan
> > > ________________________________
> > > From: Thomas Monjalon <thomas@monjalon.net>
> > > Sent: Friday, June 27, 2025 11:39 AM
> > > To: Dylan Schneider <schneide@qti.qualcomm.com>
> > > Cc: dev@dpdk.org <dev@dpdk.org>; Reshma Pattan <reshma.pattan@intel.com>; Stephen Hemminger <stephen@networkplumber.org>; Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> > > Subject: Re: [PATCH v2] pcapng: allow any protocol link type for the interface block
> > >
> > > WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.
> > >
> > > 09/06/2025 23:19, Schneide:
> > > > From: Dylan Schneider <schneide@qti.qualcomm.com>
> > > >
> > > > Allow the user to specify protocol link type when creating pcapng files.
> > > > This change is needed to specify the protocol type in the pcapng file,
> > > > DLT_EN10MB specifies ethernet packets only. This will allow dissectors
> > > > for other protocols to be used on files generated by pcapng.
> > > >
> > > > Includes a breaking change to rte_pcapng_add_interface to add link_type
> > > > parameter. Existing calls to the function have been updated to pass
> > > > DLT_EN10MB for the link type argument.
> > > >
> > > > Fixes: d1da6d0d04c7 ("pcapng: require per-interface information")
> > > > Signed-off-by: Dylan Schneider <schneide@qti.qualcomm.com>
> > > > Cc: stephen@networkplumber.org
> > >
> > > I doesn't pass compilation test on my machine:
> > >
> > > Error: cannot find librte_pcapng.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > > Error: cannot find librte_graph.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > > Error: cannot find librte_node.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
> > > Error: cannot find librte_pdump.so.25.1 in dpdk-build/build-arm64-generic-gcc/install
@@ -390,6 +390,7 @@ Dukai Yuan <dukaix.yuan@intel.com>
Dumitru Ceara <dceara@redhat.com> <dumitru.ceara@gmail.com>
Duncan Bellamy <dunk@denkimushi.com>
Dustin Lundquist <dustin@null-ptr.net>
+Dylan Schneider <schneide@qti.qualcomm.com>
Dzmitry Sautsa <dzmitryx.sautsa@intel.com>
Ed Czeck <ed.czeck@atomicrules.com>
Eduard Serra <eserra@vmware.com>
@@ -800,8 +800,8 @@ static dumpcap_out_t create_output(void)
free(os);
TAILQ_FOREACH(intf, &interfaces, next) {
- if (rte_pcapng_add_interface(ret.pcapng, intf->port, intf->ifname,
- intf->ifdescr, intf->opts.filter) < 0)
+ if (rte_pcapng_add_interface(ret.pcapng, intf->port, DLT_EN10MB,
+ intf->ifname, intf->ifdescr, intf->opts.filter) < 0)
rte_exit(EXIT_FAILURE, "rte_pcapng_add_interface %u failed\n",
intf->port);
}
@@ -345,7 +345,7 @@ test_add_interface(void)
}
/* Add interface to the file */
- ret = rte_pcapng_add_interface(pcapng, port_id,
+ ret = rte_pcapng_add_interface(pcapng, port_id, DLT_EN10MB,
NULL, NULL, NULL);
if (ret < 0) {
fprintf(stderr, "can not add port %u\n", port_id);
@@ -353,7 +353,7 @@ test_add_interface(void)
}
/* Add interface with ifname and ifdescr */
- ret = rte_pcapng_add_interface(pcapng, port_id,
+ ret = rte_pcapng_add_interface(pcapng, port_id, DLT_EN10MB,
"myeth", "Some long description", NULL);
if (ret < 0) {
fprintf(stderr, "can not add port %u with ifname\n", port_id);
@@ -361,7 +361,7 @@ test_add_interface(void)
}
/* Add interface with filter */
- ret = rte_pcapng_add_interface(pcapng, port_id,
+ ret = rte_pcapng_add_interface(pcapng, port_id, DLT_EN10MB,
NULL, NULL, "tcp port 8080");
if (ret < 0) {
fprintf(stderr, "can not add port %u with filter\n", port_id);
@@ -406,7 +406,7 @@ test_write_packets(void)
}
/* Add interface to the file */
- ret = rte_pcapng_add_interface(pcapng, port_id,
+ ret = rte_pcapng_add_interface(pcapng, port_id, DLT_EN10MB,
NULL, NULL, NULL);
if (ret < 0) {
fprintf(stderr, "can not add port %u\n", port_id);
@@ -109,6 +109,10 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* pcapng: Changed the API for adding interfaces to include a link type argument.
+ The link type was previously hardcoded to the ethernet link type in the API.
+ This argument is added to ``rte_pcapng_add_interface``.
+ These functions are versioned to retain binary compatibility until the next LTS release.
ABI Changes
-----------
@@ -11,6 +11,8 @@
#include <rte_mbuf.h>
#include <rte_pcapng.h>
+#include <pcap/pcap.h>
+
#include "rte_graph_worker.h"
#include "graph_pcap_private.h"
@@ -117,7 +119,7 @@ graph_pcap_file_open(const char *filename)
/* Add the configured interfaces as possible capture ports */
RTE_ETH_FOREACH_DEV(portid) {
- ret = rte_pcapng_add_interface(pcapng_fd, portid,
+ ret = rte_pcapng_add_interface(pcapng_fd, portid, DLT_EN10MB,
NULL, NULL, NULL);
if (ret < 0) {
graph_err("Graph rte_pcapng_add_interface port %u failed: %d",
@@ -1,7 +1,14 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2019 Microsoft Corporation
+if not dpdk_conf.has('RTE_HAS_LIBPCAP')
+ build = false
+ reason = 'missing dependency, "libpcap"'
+endif
+
sources = files('rte_pcapng.c')
headers = files('rte_pcapng.h')
deps += ['ethdev']
+
+use_function_versioning = true
@@ -29,6 +29,7 @@
#include <rte_reciprocal.h>
#include <rte_time.h>
+#include "pcap/dlt.h"
#include "pcapng_proto.h"
/* conversion from DPDK speed to PCAPNG */
@@ -200,11 +201,10 @@ pcapng_section_block(rte_pcapng_t *self,
}
/* Write an interface block for a DPDK port */
-RTE_EXPORT_SYMBOL(rte_pcapng_add_interface)
-int
-rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port,
- const char *ifname, const char *ifdescr,
- const char *filter)
+RTE_DEFAULT_SYMBOL(26, int, rte_pcapng_add_interface,
+ (rte_pcapng_t *self, uint16_t port, uint16_t link_type,
+ const char *ifname, const char *ifdescr,
+ const char *filter))
{
struct pcapng_interface_block *hdr;
struct rte_eth_dev_info dev_info;
@@ -274,7 +274,7 @@ rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port,
hdr = (struct pcapng_interface_block *)buf;
*hdr = (struct pcapng_interface_block) {
.block_type = PCAPNG_INTERFACE_BLOCK,
- .link_type = 1, /* DLT_EN10MB - Ethernet */
+ .link_type = link_type,
.block_length = len,
};
@@ -319,6 +319,16 @@ rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port,
return write(self->outfd, buf, len);
}
+RTE_VERSION_SYMBOL(25, int, rte_pcapng_add_interface,
+ (rte_pcapng_t *self, uint16_t port,
+ const char *ifname, const char *ifdescr,
+ const char *filter))
+{
+ /* Call the new version with a default link_type (Ethernet) */
+ return rte_pcapng_add_interface(self, port, DLT_EN10MB,
+ ifname, ifdescr, filter);
+}
+
/*
* Write an Interface statistics block at the end of capture.
*/
@@ -71,6 +71,8 @@ rte_pcapng_close(rte_pcapng_t *self);
* The handle to the packet capture file
* @param port
* The Ethernet port to report stats on.
+ * @param link_type
+ * The link type (e.g., DLT_EN10MB).
* @param ifname (optional)
* Interface name to record in the file.
* If not specified, name will be constructed from port
@@ -84,7 +86,7 @@ rte_pcapng_close(rte_pcapng_t *self);
* must be added.
*/
int
-rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port,
+rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port, uint16_t link_type,
const char *ifname, const char *ifdescr,
const char *filter);