From nobody Wed Apr 30 21:14:42 2025 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 4Znqh30m7kz5v1XJ; Wed, 30 Apr 2025 21:14:43 +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 4Znqh26wDjz40wS; Wed, 30 Apr 2025 21:14:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746047683; 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=QCcavTguDcKUwrDondfjP8dlY5ecP/7QbBowY944F1w=; b=EE66BiIZgCbuliQHsvkOwqo2BKlRmbC8UDPv0qIbxz5rCEblrMQnah/s5SiKYIx2K650wj 1WpOCAERURqKxTK7g4nsjAppJCxsvosOqaIVBSPd+RPLgPmrK8xvKPn+pNE1nAQxXTWr81 ZIlzO62tgEIYMwEQcoCSJ86ydPPTT9hwsdaDIb005rF0v3Kizuh4iNG8fTHirYKJeYx9Jc NsaSxMF6PWozDqQ7sb4apgmI17rCh02lHSsDNhr4z081jL8t6KxC75H41hvx6QbS5jBKqv O6ux7Xmh+TZl3IJXDqOqtqMEL+QZCTdSrUkXmzz2tXndPi7VygaiBm6J+4NEmw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746047683; a=rsa-sha256; cv=none; b=RkF8sO34FmnYZVVlJUfg9g+6Y0ZynUtNgONRoO33SDx7SuRdA2bM/uXo5sLEIPDjBoqnT6 qnJnMC4g7kE1irbh8gcDSD99ZU2udTzjMLJFk0+uPg70AeCc+c9TtLd1/9trpCvBTUQKAE hXJYMQgS5V12/1Py6syXc2ZHDxT5zE7rZEl8OVqHMkGmW6kxgu3w1gmGphAqcrLS50pv5h 16fuwp4h4pgu5j4dN65+M6uU9A82MbR4XByOUDRhRtIZlQKacGHS7ZWH33Ax3RP4+t4EeU 73UU76nqPiKGnC+nNvLtWD0JZnmoem8K+YYGQUD4f8fpqufSqpGPcW6Ewn4lNA== 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=1746047683; 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=QCcavTguDcKUwrDondfjP8dlY5ecP/7QbBowY944F1w=; b=OvmLhv3PqIw5XFFIrhBDCFPUr0Au3xrec73EY/aK8AyDkUr4h4DAnvLNF/kQ/nNDmkWMNV gX+uLLo9MoTsHgetkBA1OcqrMvkKdfXJgZiwVLrPLV7Tpm3ZCU4Oojwip2IrpbH0oobBov aeh5EeLIpeQ5KbIDDxa6TICMiAYrn1dNn4GSi3WhW5c+WzlhGSqeZz5lVJ2qZDHGGbUgT3 4ZQnht1DgiiYw9upsllmFBYEjOVsbPhpnzLRCGkJbLH/EV0K0rWo1/oxkyaMjDUv5dUUHW WiEX27NHNaMYEDTb6DEUsf1PYsMWdGbZw4f4I6EoUyzPMSL6XvduoFPJ/8f6wA== 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 4Znqh26NZbz6nV; Wed, 30 Apr 2025 21:14:42 +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 53ULEgiu027866; Wed, 30 Apr 2025 21:14:42 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53ULEgU1027863; Wed, 30 Apr 2025 21:14:42 GMT (envelope-from git) Date: Wed, 30 Apr 2025 21:14:42 GMT Message-Id: <202504302114.53ULEgU1027863@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: aba6f33275e7 - main - sockets: provide protocol method pr_kqfilter 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 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: aba6f33275e72b9de8b4936cd8c00dd671e5d6e8 Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=aba6f33275e72b9de8b4936cd8c00dd671e5d6e8 commit aba6f33275e72b9de8b4936cd8c00dd671e5d6e8 Author: Gleb Smirnoff AuthorDate: 2025-04-30 21:13:58 +0000 Commit: Gleb Smirnoff CommitDate: 2025-04-30 21:13:58 +0000 sockets: provide protocol method pr_kqfilter Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D48919 --- sys/kern/sys_socket.c | 10 +++++++++- sys/kern/uipc_domain.c | 1 + sys/kern/uipc_socket.c | 4 +--- sys/sys/protosw.h | 3 +++ sys/sys/socketvar.h | 1 + 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c index 456d93ff0d68..c221106ae067 100644 --- a/sys/kern/sys_socket.c +++ b/sys/kern/sys_socket.c @@ -87,7 +87,7 @@ static fo_rdwr_t soo_read; static fo_rdwr_t soo_write; static fo_ioctl_t soo_ioctl; static fo_poll_t soo_poll; -extern fo_kqfilter_t soo_kqfilter; +static fo_kqfilter_t soo_kqfilter; static fo_stat_t soo_stat; static fo_close_t soo_close; static fo_chmod_t soo_chmod; @@ -291,6 +291,14 @@ soo_poll(struct file *fp, int events, struct ucred *active_cred, return (so->so_proto->pr_sopoll(so, events, td)); } +static int +soo_kqfilter(struct file *fp, struct knote *kn) +{ + struct socket *so = fp->f_data; + + return (so->so_proto->pr_kqfilter(so, kn)); +} + static int soo_stat(struct file *fp, struct stat *ub, struct ucred *active_cred) { diff --git a/sys/kern/uipc_domain.c b/sys/kern/uipc_domain.c index 2d68e11b9f0a..3f31f8ba421c 100644 --- a/sys/kern/uipc_domain.c +++ b/sys/kern/uipc_domain.c @@ -191,6 +191,7 @@ pr_init(struct domain *dom, struct protosw *pr) DEFAULT(pr_sopoll, sopoll_generic); DEFAULT(pr_setsbopt, sbsetopt); DEFAULT(pr_aio_queue, soaio_queue_generic); + DEFAULT(pr_kqfilter, sokqfilter_generic); #define NOTSUPP(foo) if (pr->foo == NULL) pr->foo = foo ## _notsupp NOTSUPP(pr_accept); diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 10f81a959147..03a2c532f053 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -186,7 +186,6 @@ static int filt_soread(struct knote *kn, long hint); static void filt_sowdetach(struct knote *kn); static int filt_sowrite(struct knote *kn, long hint); static int filt_soempty(struct knote *kn, long hint); -fo_kqfilter_t soo_kqfilter; static const struct filterops soread_filtops = { .f_isfd = 1, @@ -4488,9 +4487,8 @@ sopoll_generic(struct socket *so, int events, struct thread *td) } int -soo_kqfilter(struct file *fp, struct knote *kn) +sokqfilter_generic(struct socket *so, struct knote *kn) { - struct socket *so = kn->kn_fp->f_data; struct sockbuf *sb; sb_which which; struct knlist *knl; diff --git a/sys/sys/protosw.h b/sys/sys/protosw.h index 2f74148efa1d..4808f136cabf 100644 --- a/sys/sys/protosw.h +++ b/sys/sys/protosw.h @@ -51,6 +51,7 @@ struct stat; struct ucred; struct uio; struct kaiocb; +struct knote; enum shutdown_how; /* USE THESE FOR YOUR PROTOTYPES ! */ @@ -89,6 +90,7 @@ typedef int pr_sosend_t(struct socket *, struct sockaddr *, struct uio *, typedef int pr_soreceive_t(struct socket *, struct sockaddr **, struct uio *, struct mbuf **, struct mbuf **, int *); typedef int pr_sopoll_t(struct socket *, int, struct thread *); +typedef int pr_kqfilter_t(struct socket *, struct knote *); typedef void pr_sosetlabel_t(struct socket *); typedef void pr_close_t(struct socket *); typedef int pr_bindat_t(int, struct socket *, struct sockaddr *, @@ -138,6 +140,7 @@ struct protosw { pr_sosetlabel_t *pr_sosetlabel; /* MAC, XXXGL: remove */ pr_setsbopt_t *pr_setsbopt; /* Socket buffer ioctls */ pr_chmod_t *pr_chmod; /* fchmod(2) */ + pr_kqfilter_t *pr_kqfilter; /* kevent(2) */ }; #endif /* defined(_KERNEL) || defined(_WANT_PROTOSW) */ #ifdef _KERNEL diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h index 02d0ca139fa4..8e70ada24259 100644 --- a/sys/sys/socketvar.h +++ b/sys/sys/socketvar.h @@ -527,6 +527,7 @@ struct socket * struct socket * sopeeloff(struct socket *); int sopoll_generic(struct socket *so, int events, struct thread *td); +int sokqfilter_generic(struct socket *so, struct knote *kn); int soaio_queue_generic(struct socket *so, struct kaiocb *job); int soreceive(struct socket *so, struct sockaddr **paddr, struct uio *uio, struct mbuf **mp0, struct mbuf **controlp, int *flagsp);