From nobody Fri Sep 06 17:19:56 2024 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 4X0jf54c0rz5VXhW; Fri, 06 Sep 2024 17:19:57 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4X0jf52Nhlz47Qg; Fri, 6 Sep 2024 17:19:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1725643197; 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=0Q4JkzE8jPR5YdS/CwpVPgF2n9vfiQMKBGVY6y7zCVk=; b=VH26Ksbpj6u5ZzwkV7j0PWsl6AGUWoZi4iZAKsa/EafhLeru6GrZwbTqAhpTPSJ4gRl70b fuPFLZwNHUAx/NGWh+wvdCbqv4pIH7eAU6vUnv9kb2gtyqdqhcq9iiV0dTgOrC0qs/3q6h EuEEUuhrmfGa7gqIdZkgtYj3CrhGqVJmO8lRYyNOFubFpNLazCLpxugS6rub1jxPkMR+lC D6QNhrmQYrBMw9eVVCz6gQeVTfau71KsAsdQu73uE8MJdXJddZgSQlhkLfe17hJA/mVZ88 oqJP0qHlxFTR+PrFCC87CwNouhrxZI2Os5IqQ/Np8u91X/qCUoN8YmGDzNT4uA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1725643197; a=rsa-sha256; cv=none; b=VwvruKOhWyJy1k/kO+j2eOsoJIaoQxaCb+l8NRK9cL5e9ZRawRPVOfv/nEOUjLO52qdnra dWk7bgTcjmwRadpzd4lWAWKcekgW0bAd3jsugEZ6nqJch7PhnO2Gj2BM+9Qk7BmfN5WUcS 09m6MbNbIlmsLBM8hgGfpGWJmvzZGrwUsEQLDd12oyljNagkbCh7gmn6Sm+mpfZ2CjLd29 H4u4khJ5DhWqJHvK4sE8ORwuzghwnaLuxgUmBhuLnro67Hfwk9oWVPQQ/0njIwIvBEzwNu hjsm4QFt3qovjPjlE3O2Ag+3MjDAAk4B7dj+pZP8y1nnC4cIRdSiQwB0KAdbUg== 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=1725643197; 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=0Q4JkzE8jPR5YdS/CwpVPgF2n9vfiQMKBGVY6y7zCVk=; b=iSK6RXE0yE+3DXPVzgdS2Lpj0AGOfMvht4ddiAkbCU9VY2LG+gaMWi8RhLxbpMTv8D6EyF NEhFjEAK0uGpe+QvGJ98HISGYkt3AHhArj3u1WDyy5AKtPtJyg5FckN9YMrFk+tJuF6cDs Qq1GFkJ6UNVYmdukJf3gmwmH6/6oAeEdhBaanTYm60u1B45zxJuzdUFzj9do0QqMzEKktF 8z6NbNnxDUp/an18lKm/RW0BFnRGHjCL17HVK7K45n6ugz+XDlblFEHAVDJvziU4hZ//5O wiICBtRGmVM6UFjf9jSlVPQkjwusDjp8hlaDR3+Ab3G4ohFeWocrIPojaIwTPQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4X0jf46mHcz10d2; Fri, 6 Sep 2024 17:19:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 486HJuHf074902; Fri, 6 Sep 2024 17:19:56 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 486HJudP074899; Fri, 6 Sep 2024 17:19:56 GMT (envelope-from git) Date: Fri, 6 Sep 2024 17:19:56 GMT Message-Id: <202409061719.486HJudP074899@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 58f194223ab8 - main - ifnet: Add handling for toggling IFF_ALLMULTI in ifhwioctl() 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: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 58f194223ab8578269772a6874a8444e5e03afaf Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=58f194223ab8578269772a6874a8444e5e03afaf commit 58f194223ab8578269772a6874a8444e5e03afaf Author: Mark Johnston AuthorDate: 2024-09-06 16:55:42 +0000 Commit: Mark Johnston CommitDate: 2024-09-06 16:58:44 +0000 ifnet: Add handling for toggling IFF_ALLMULTI in ifhwioctl() IFF_ALLMULTI has an associated activation counter and so needs special treatment, like IFF_PROMISC. Introduce IFF_PALLMULTI, akin to IFF_PPROMISC, which indicates that userspace requested allmulti mode, and handle it specially in ifhwioctl(). Reviewed by: zlei, glebius MFC after: 2 weeks Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D46524 --- sys/net/if.c | 16 ++++++++++++++-- sys/net/if.h | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/sys/net/if.c b/sys/net/if.c index 4458d710d826..ebad5c5d16e5 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -2611,7 +2611,12 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td) (ifp->if_flags & IFF_UP) == 0) { do_ifup = 1; } - /* See if permanently promiscuous mode bit is about to flip */ + + /* + * See if the promiscuous mode or allmulti bits are about to + * flip. They require special handling because in-kernel + * consumers may indepdently toggle them. + */ if ((ifp->if_flags ^ new_flags) & IFF_PPROMISC) { if (new_flags & IFF_PPROMISC) ifp->if_flags |= IFF_PROMISC; @@ -2622,6 +2627,12 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td) ((new_flags & IFF_PPROMISC) ? "enabled" : "disabled")); } + if ((ifp->if_flags ^ new_flags) & IFF_PALLMULTI) { + if (new_flags & IFF_PALLMULTI) + ifp->if_flags |= IFF_ALLMULTI; + else if (ifp->if_amcount == 0) + ifp->if_flags &= ~IFF_ALLMULTI; + } ifp->if_flags = (ifp->if_flags & IFF_CANTCHANGE) | (new_flags &~ IFF_CANTCHANGE); if (ifp->if_ioctl) { @@ -3383,7 +3394,8 @@ int if_allmulti(struct ifnet *ifp, int onswitch) { - return (if_setflag(ifp, IFF_ALLMULTI, 0, &ifp->if_amcount, onswitch)); + return (if_setflag(ifp, IFF_ALLMULTI, IFF_PALLMULTI, &ifp->if_amcount, + onswitch)); } struct ifmultiaddr * diff --git a/sys/net/if.h b/sys/net/if.h index 5c4b0637b25a..d54190f6ccf8 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -160,7 +160,7 @@ struct if_data { #define IFF_STICKYARP 0x100000 /* (n) sticky ARP */ #define IFF_DYING 0x200000 /* (n) interface is winding down */ #define IFF_RENAMING 0x400000 /* (n) interface is being renamed */ -#define IFF_SPARE 0x800000 +#define IFF_PALLMULTI 0x800000 /* (n) user-requested allmulti mode */ #define IFF_NETLINK_1 0x1000000 /* (n) used by netlink */ /*