From nobody Mon Dec 15 21:45:32 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dVYWx3kFXz6LNfh for ; Mon, 15 Dec 2025 21:45:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dVYWw5s4Bz3pcX for ; Mon, 15 Dec 2025 21:45:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765835132; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=MvFF3uhq19bzCQWVOBlil192FJYu7r/+PKr0nhXp+Dw=; b=Z4zyEa0d6vOBMprkBKAhkKZeMgse1dP/F8yk5C//SrUZcyBbKQjNDFd3WEg03tb5p5ph9E PyKfuJzKk7CN0r0urYlpCxKL9TUb85V4jxkUReTOrDtNvDXuvDBX35TG1UH4gWBFlOuFIZ UGcH2rSPBZSNV69QUfP1z8WXgVWWZrlLT1wHtF9TBojZiwXrbxxPEOIULewOaL7nH7gPKe KvMb2VJ+kYDfvC70YQpvDUSYtYZ1USaNQTs+Oo+N5zTHoTlGxmtRoBeLKh/KWswVk+SavE zAyf0KP1QkZLIUTvKLt23UIJPkVnAWuLnStcrGUW8e9yn2kVXgEIZfZbQCelOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765835132; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=MvFF3uhq19bzCQWVOBlil192FJYu7r/+PKr0nhXp+Dw=; b=c7cnRhJMaD1mE7HcxJmtlIqWaxpl2UUcs+hoMCYe1fpAG0MibsV/1bl6nKJhLQpCjIDDGh gQM0WDa1OeNJN0i7iGy58TArZQUaSJtl1FkCdZOu4sLqizNDX7uzLCSkRlPrKtuSWQLBIm vmh8kHSv9ZUHHmCFfeTmn2xdyrOMtZIV8VL5PQwPKoWCtIXAhuszreJYds23D21WU1qp5y vXuARN3Onala0hSPJuKQjyxLfM4csJKfwve79AxGv396353BDgQ/EoEkgqcB6dnV/SmHxU w14TlQIvoIbsz5jwSiO4Li3WYV5RaveCAFjyJDUwtXiMEiEvUT/TkWh7Y9nPvg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1765835132; a=rsa-sha256; cv=none; b=JHivK9by/E+LkbAx87KapbIbSZXYzUND0+9CfsSdGA2+4XTk+ALml5KUPeLgH9V5vLwLkW rc3XOL4okNvuwlf653AzBqSGp2oKOfTrC9c5jfl3TK+6fm4lESCrE0HfGHwFfYWpRy3Pxs 5kL06x4krp5ETXdjtL0Xg2c4sk7h20koZKtW8Acmvaz7iS6Q+sFeuc9qSeSiuMmr0JbcYQ rPD7gRh4cnJbNBI3wVw5wcPswOZxTag0hk+GJ/dh9ycMpp58CiuTLrf08nMyE+/0Ubq+gy 0MtRqmk+vbpOL+kM0KzT5hqq3ND9NdCmuiuwR5lSG57nPUgqmNHqxEZ5AURKPQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dVYWw2fB6zdZv for ; Mon, 15 Dec 2025 21:45:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41bb7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 15 Dec 2025 21:45:32 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 94b76ea9d136 - main - libpcap: obtain list of bpf tap points with BIOCGETIFLIST List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 94b76ea9d136723d6f05c42f450c802fb4a91600 Auto-Submitted: auto-generated Date: Mon, 15 Dec 2025 21:45:32 +0000 Message-Id: <6940817c.41bb7.26d54227@gitrepo.freebsd.org> The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=94b76ea9d136723d6f05c42f450c802fb4a91600 commit 94b76ea9d136723d6f05c42f450c802fb4a91600 Author: Gleb Smirnoff AuthorDate: 2025-12-15 20:51:34 +0000 Commit: Gleb Smirnoff CommitDate: 2025-12-15 20:51:34 +0000 libpcap: obtain list of bpf tap points with BIOCGETIFLIST Differential Revision: https://reviews.freebsd.org/D53874 --- contrib/libpcap/pcap-bpf.c | 56 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/contrib/libpcap/pcap-bpf.c b/contrib/libpcap/pcap-bpf.c index b9e84e65f634..3767dd099d2c 100644 --- a/contrib/libpcap/pcap-bpf.c +++ b/contrib/libpcap/pcap-bpf.c @@ -2864,18 +2864,50 @@ check_bpf_bindable(const char *name) return (1); } -#if defined(__FreeBSD__) && defined(SIOCIFCREATE2) +#if defined(__FreeBSD__) static int -get_usb_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_) +get_flags_stub(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_) { - /* - * XXX - if there's a way to determine whether there's something - * plugged into a given USB bus, use that to determine whether - * this device is "connected" or not. - */ return (0); } +#if __FreeBSD_version >= 1600006 +static int +finddevs_bpf(pcap_if_list_t *devlistp, char *errbuf) +{ + struct bpf_iflist bi; + const char *name; + int fd; + + if ((fd = bpf_open(errbuf)) < 0) + return (-1); + + memset(&bi, 0, sizeof(bi)); + if (ioctl(fd, BIOCGETIFLIST, (caddr_t)&bi) != 0 || bi.bi_size == 0) + return (-1); + + if ((bi.bi_ubuf = malloc(bi.bi_size)) == NULL) + return (-1); + + if (ioctl(fd, BIOCGETIFLIST, (caddr_t)&bi) != 0) + return (-1); + + for (name = bi.bi_ubuf; bi.bi_count > 0; + bi.bi_count--, name += strlen(name) + 1) + /* + * Add only those devices that were not added via the + * getifaddrs() loop in pcapint_findalldevs_interfaces(). + */ + if (pcapint_find_or_add_dev(devlistp, name, PCAP_IF_UP, + get_flags_stub, NULL, errbuf) == NULL) { + free(bi.bi_ubuf); + return (-1); + } + + free(bi.bi_ubuf); + return (0); +} +#else static int finddevs_usb(pcap_if_list_t *devlistp, char *errbuf) { @@ -2940,7 +2972,7 @@ finddevs_usb(pcap_if_list_t *devlistp, char *errbuf) * for each bus. */ if (pcapint_find_or_add_dev(devlistp, name, PCAP_IF_UP, - get_usb_if_flags, NULL, errbuf) == NULL) { + get_flags_stub, NULL, errbuf) == NULL) { free(name); closedir(usbdir); return (PCAP_ERROR); @@ -2951,6 +2983,7 @@ finddevs_usb(pcap_if_list_t *devlistp, char *errbuf) return (0); } #endif +#endif /* FreeBSD */ /* * Get additional flags for a device, using SIOCGIFMEDIA. @@ -3093,9 +3126,14 @@ pcapint_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf) return (-1); #endif -#if defined(__FreeBSD__) && defined(SIOCIFCREATE2) +#if defined(__FreeBSD__) +#if __FreeBSD_version >= 1600006 + if (finddevs_bpf(devlistp, errbuf) == -1) + return (-1); +#else if (finddevs_usb(devlistp, errbuf) == -1) return (-1); +#endif #endif return (0);