Full list of types is here https://www.tcpdump.org/linktypes.html On Thu, May 29, 2025, 10:16 Schneide wrote: > From: Dylan Schneider > > 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 > Cc: stephen@networkplumber.org > --- > > diff --git a/.mailmap b/.mailmap > index d9423aa..7ef0964 100644 > --- a/.mailmap > +++ b/.mailmap > @@ -388,6 +388,7 @@ > Dumitru Ceara > Duncan Bellamy > Dustin Lundquist > +Dylan Schneider > Dzmitry Sautsa > Ed Czeck > Eduard Serra > diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c > index 3d3c0db..e0e2b26 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 8f2cff3..bcf9972 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/lib/graph/graph_pcap.c b/lib/graph/graph_pcap.c > index 89525f1..46fab8c 100644 > --- a/lib/graph/graph_pcap.c > +++ b/lib/graph/graph_pcap.c > @@ -117,7 +117,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/rte_pcapng.c b/lib/pcapng/rte_pcapng.c > index 16485b2..bed1e14 100644 > --- a/lib/pcapng/rte_pcapng.c > +++ b/lib/pcapng/rte_pcapng.c > @@ -205,7 +205,7 @@ 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, > +rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port, uint16_t > link_type, > const char *ifname, const char *ifdescr, > const char *filter) > { > @@ -277,7 +277,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, > }; > > diff --git a/lib/pcapng/rte_pcapng.h b/lib/pcapng/rte_pcapng.h > index 48f2b57..0a35ec9 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 protocol link type of the packets > * @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); > >