From nobody Sat Oct 31 18:58:37 2026 X-Original-To: dev-commits-src-branches@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 4jH6gd6ZnSz6x62V for ; Sat, 31 Oct 2026 18:58:37 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jH6gd5CpBz3J5l for ; Sat, 31 Oct 2026 18:58:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793473117; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=yGTcWkzOswJU2KU96q5tEKwxrT4t3NGDXdF8Tc6KGAc=; b=l5uIYCZV+481RBztCtkCSynoQ+s0ZB8ZrrlFShbZ/7Whkag4CoPIhGf77ijmSmDqcV9Eyw BUP5hWDIuCZLy5O+D5/9Sx3M+4FbiUJHMYsBTU7ohR7MXehfQYJb5VCv8BdWVNG81chmFP ayWdU5Sd61F4pheUKeqZLCgVOOSduHe0nTpBTW5IDXk0bNhHV14wkB8/Dmr8UHR5rEwrMD xhEwytogXGol4PffiVchscjsrXTVrlzY5euIvduUCIHHxjKK5w4Jz9N6ONBO79YDiess6h YvFDalf32odL/6OaRxEZW2oBXL2C8r1mAX2GqT0hbtnDj6Gs1Lvin0ORdx81Gw== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793473117; b=COZOOsc1yS2QexP6AnhZ272YzMalM0XINCFVkkySlLVNTord/7fzwy33sSvoi902NuOdFz VIHeYHY9L++EdqurmEItYzHM0GYHNsETtbCvEBGgPJlw7Ghoh0iCyBEXsJke/VlVWBAhBU G3RwZa39Xvm7XXCJGsNH1fMrzCOY7wHMFzmDh3XWND34TrD32CFYdO527hDzk2U4wuWYbl wJpxYWs8qrSJXG75fOuJUpHYyOjy22PNE7UZG7HQBGgsjmbyjHmtEhiIa282QmEJxgdRaa gz4YvrTXOVz1qnTc+WV6OaoD+k2NVxlbYZ4r0itD+F6I6y4iWHIcrZsSKZ+VhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793473117; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=yGTcWkzOswJU2KU96q5tEKwxrT4t3NGDXdF8Tc6KGAc=; b=vEfyovA9c3K0Z6O2WohAf/KabefQf3oTKW6UhKUWbunKz3V5I0Z7IIEMC+7tddUXL9G+hc GqbqNmgL+hlWJ6v4trstD4VJDWoxevOqnK5qeGvwpXfasEe0LEnfcYclgN8sADJq3dxqnO 5Lh0pDNWAsd6fxtHbzSJCJiEpJGzf2JUqh4k5NVtBanUFLzp/cB7blV7PP63YlpwK0Hm+m R0k9QLeAJJ+bdC1mG4kHaUFWpBILywWYgbQeK1sIFuKE74ZTrAsUMK8335SbHE+Q+Df4sq jkp/NqbgxjYgSj9m4IuqkMQBic/e3Ag+ou9UMAr4B+jtNS95hjvUbh6nTowLbw== 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 4jH6gd4tPxzPCL for ; Sat, 31 Oct 2026 18:58:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21a57 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 31 Oct 2026 18:58:37 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Pouria Mousavizadeh Tehrani From: Kevin Bowling Subject: git: c5b58592b57b - stable/15 - ifconfig: Add netlink support for reading ifgroup List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: Commits to the stable branches of the FreeBSD src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: c5b58592b57b05de41d10d8e6763768b54ffbc3a Auto-Submitted: auto-generated Date: Sat, 31 Oct 2026 18:58:37 +0000 Message-Id: <6ae63a5d.21a57.678d4322@gitrepo.freebsd.org> The branch stable/15 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=c5b58592b57b05de41d10d8e6763768b54ffbc3a commit c5b58592b57b05de41d10d8e6763768b54ffbc3a Author: Pouria Mousavizadeh Tehrani AuthorDate: 2026-08-27 13:01:11 +0000 Commit: Kevin Bowling CommitDate: 2026-10-31 18:57:03 +0000 ifconfig: Add netlink support for reading ifgroup Read interface groups from IFLAF_GROUP netlink attribute. Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58644 (cherry picked from commit 901a242269b208613a3e4fc02f78c52b7eeed828) --- sbin/ifconfig/ifconfig_netlink.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/sbin/ifconfig/ifconfig_netlink.c b/sbin/ifconfig/ifconfig_netlink.c index b5badfd585b8..457aa9227bdb 100644 --- a/sbin/ifconfig/ifconfig_netlink.c +++ b/sbin/ifconfig/ifconfig_netlink.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -252,6 +253,41 @@ prepare_ifaddrs(struct snl_state *ss, struct ifmap *ifmap) } } +/* + * Returns true if an interface should be listed because any its groups + * matches shell pattern "match" and none of groups matches pattern "nomatch". + * If any pattern is NULL, corresponding condition is skipped. + */ +static bool +group_member_nl(if_link_t *link, const char *match, const char *nomatch) +{ + bool matched, nomatched; + + /* Sanity checks. */ + if (match == NULL && nomatch == NULL) + return (true); + if (link == NULL) + return (false); + + /* Perform matching. */ + matched = false; + nomatched = true; + for (uint32_t i = 0; i < link->iflaf_groups.count; i++) { + char *ifgroup = link->iflaf_groups.items[i]; + + if (match && !matched) + matched = !fnmatch(match, ifgroup, 0); + if (nomatch && nomatched) + nomatched = fnmatch(nomatch, ifgroup, 0); + } + + if (match && !nomatch) + return (matched); + if (!match && nomatch) + return (nomatched); + return (matched && nomatched); +} + static bool match_iface(struct ifconfig_args *args, struct iface *iface) { @@ -263,7 +299,7 @@ match_iface(struct ifconfig_args *args, struct iface *iface) if (!match_if_flags(args, link->ifi_flags)) return (false); - if (!group_member(link->ifla_ifname, args->matchgroup, args->nogroup)) + if (!group_member_nl(link, args->matchgroup, args->nogroup)) return (false); if (args->afp == NULL)