Date: Wed, 30 Apr 2025 21:14:42 GMT From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: aba6f33275e7 - main - sockets: provide protocol method pr_kqfilter Message-ID: <202504302114.53ULEgU1027863@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=aba6f33275e72b9de8b4936cd8c00dd671e5d6e8 commit aba6f33275e72b9de8b4936cd8c00dd671e5d6e8 Author: Gleb Smirnoff <glebius@FreeBSD.org> AuthorDate: 2025-04-30 21:13:58 +0000 Commit: Gleb Smirnoff <glebius@FreeBSD.org> 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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202504302114.53ULEgU1027863>