From nobody Thu Aug 27 13:27:40 2026 X-Original-To: dev-commits-src-main@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 4hW2Pn2t1Xz6pxWy for ; Thu, 27 Aug 2026 13:27:41 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hW2Pn0YHnz3ZQj for ; Thu, 27 Aug 2026 13:27:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787837261; 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=Mv+vYs1ZeMefvbVe0QOuDGH5tYfPOHIXi1XM4y5wo7c=; b=TVZ2XcgdhDNb5TDBDKWwad0VnxQsh/4B9wQKILYDIelkubqKkeU0yavabe2+YMyXfRsMyH 8DWzibKOWlPax8F74QDRhhInq7+59QUJ2eUs5NBjYLdHMhoiVl+um0YRsbU589/5ouY8zg cnxyTvQmrknqRhjoCaSgB8jH8Hhzpmm6Zpblil66JJYKILS0tw6+cibqzY73PNCXAXeUSI 1LLAQQnMc4zq8b0iaJzI976dZTmBmcKPKEDi8Usv0LmH30yGW/nRlps6679OP0nbLq3WFf FuvW+6yCIy85ysS7iL2i0qQ4Luw+wwUqrGdcjKFMUktleuUMMqyI2Ir4fqTRyg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787837261; a=rsa-sha256; cv=none; b=xkGmaiPsd5cVWwJJ0xiAGTyzpWMp3Yf1MtNzvlJwb+etCsXEx7KAnYY/IpfwGimdYKxFoI aAfLY8M+0a0xgIheNEyvHZ7H3XxeOTKm/DY6lJOMzlLlparXTBsGNlb84YSh3bmVhbHVb1 +4OqHe5HADKbpHBbpS77qOfsvqhn+S16+76KeULQkgFY/l0sh2HTReLPbCz3MUueqf+qf3 c3NynZOiClHd+3HedYkPtAKlF3eDMGbwH9F3s0VAJvq3V48iT9kGP8wFcG9J1b7s8/6Zr1 U7RK2vWfXNgJnNsyMWRFjxX3dJPiCaX62uJNKiSKt/4gDT7sG5MVAhod1jKWjQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787837261; 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=Mv+vYs1ZeMefvbVe0QOuDGH5tYfPOHIXi1XM4y5wo7c=; b=lesVrAzwb4s7MOeEHWw4THNt9zPa1UdzrPrFYrlWSGIzTjOJDhPIhwX8tTZ2ZcmFh/62t7 YjIhpkaQnbhGCLwV3UXnz6iA92kYeq+YK5at0mQEqM8swhFN6SJQlcnnKhN1ED+QutnABG 72OxGA55P/s55gHmuq0C1ngUqXcFtXtHOfVfF2hnx1UjqoteKv0+Dki+KNG4RZN/Le7dC1 OWjw6gNdKCZFB0M426yvH3AvsAGdPCefQ8tGTZ5o/ccqHgEh0kx1AI7PITKsf6d2Rd+hBI QfhjrYy3YdQSJhl0n5DDa5yxlpYuJAybM9Z1fODMVibGa2fNvIlyt9Yg7RW2jA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hW2Pm4qL8z9CD for ; Thu, 27 Aug 2026 13:27:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22860 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 27 Aug 2026 13:27:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Pouria Mousavizadeh Tehrani Subject: git: 901a242269b2 - main - ifconfig: Add netlink support for reading ifgroup List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: 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: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 901a242269b208613a3e4fc02f78c52b7eeed828 Auto-Submitted: auto-generated Date: Thu, 27 Aug 2026 13:27:40 +0000 Message-Id: <6a903b4c.22860.6e460bf8@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=901a242269b208613a3e4fc02f78c52b7eeed828 commit 901a242269b208613a3e4fc02f78c52b7eeed828 Author: Pouria Mousavizadeh Tehrani AuthorDate: 2026-08-27 13:01:11 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-08-27 13:04:55 +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 --- 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 c37108737379..38e3edb3e597 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)