[v2] pcapng: allow any protocol link type for the interface block

Message ID 20250609211937.345620-1-schneide@qti.qualcomm.com (mailing list archive)
State Superseded
Delegated to: Thomas Monjalon
Headers
Series [v2] pcapng: allow any protocol link type for the interface block |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/github-robot: build success github build: passed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-abi-testing warning Testing issues
ci/iol-compile-amd64-testing warning Testing issues
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS
ci/aws-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS

Commit Message

Schneide June 9, 2025, 9:19 p.m. UTC
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

Stephen Hemminger June 16, 2025, 6:05 p.m. UTC | #1
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
  
Stephen Hemminger June 26, 2025, 1:57 p.m. UTC | #2
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>
  
Thomas Monjalon June 27, 2025, 4:05 p.m. UTC | #3
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.
  
Thomas Monjalon June 27, 2025, 5:39 p.m. UTC | #4
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
  
Schneide June 27, 2025, 5:46 p.m. UTC | #5
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
  
Thomas Monjalon June 27, 2025, 6:27 p.m. UTC | #6
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
  
Schneide June 30, 2025, 1:50 p.m. UTC | #7
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?
  
Thomas Monjalon June 30, 2025, 2:28 p.m. UTC | #8
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
> 
> 
> 
>
  
Schneide July 2, 2025, 7:30 p.m. UTC | #9
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
  
Thomas Monjalon July 3, 2025, 1:27 p.m. UTC | #10
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
> >
> >
> >
> >
> 
> 
> 
> 
> 
>
  
Schneide July 3, 2025, 4:29 p.m. UTC | #11
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
  
Thomas Monjalon July 3, 2025, 4:41 p.m. UTC | #12
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
  

Patch

diff --git a/.mailmap b/.mailmap
index 91e08f4a1f..a585124832 100644
--- a/.mailmap
+++ b/.mailmap
@@ -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>
diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c
index 3d3c0dbc66..e0e2b26269 100644
--- a/app/dumpcap/main.c
+++ b/app/dumpcap/main.c
@@ -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);
 		}
diff --git a/app/test/test_pcapng.c b/app/test/test_pcapng.c
index 8f2cff36c3..bcf99724fa 100644
--- a/app/test/test_pcapng.c
+++ b/app/test/test_pcapng.c
@@ -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);
diff --git a/doc/guides/rel_notes/release_25_07.rst b/doc/guides/rel_notes/release_25_07.rst
index 6b070801de..5f8a472928 100644
--- a/doc/guides/rel_notes/release_25_07.rst
+++ b/doc/guides/rel_notes/release_25_07.rst
@@ -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
 -----------
diff --git a/lib/graph/graph_pcap.c b/lib/graph/graph_pcap.c
index 89525f1220..13d86b7a18 100644
--- a/lib/graph/graph_pcap.c
+++ b/lib/graph/graph_pcap.c
@@ -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",
diff --git a/lib/pcapng/meson.build b/lib/pcapng/meson.build
index 4549925d41..d1ace87feb 100644
--- a/lib/pcapng/meson.build
+++ b/lib/pcapng/meson.build
@@ -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
diff --git a/lib/pcapng/rte_pcapng.c b/lib/pcapng/rte_pcapng.c
index cacbefdc50..9db8813696 100644
--- a/lib/pcapng/rte_pcapng.c
+++ b/lib/pcapng/rte_pcapng.c
@@ -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.
  */
diff --git a/lib/pcapng/rte_pcapng.h b/lib/pcapng/rte_pcapng.h
index 48f2b57564..cce141e3f4 100644
--- a/lib/pcapng/rte_pcapng.h
+++ b/lib/pcapng/rte_pcapng.h
@@ -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);