Date: Fri, 12 Sep 2025 16:29:00 GMT From: Warner Losh <imp@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 9fadaee7ecce - main - ng_device: enable setting the device to non-blocking mode Message-ID: <202509121629.58CGT0Yl019423@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=9fadaee7ecce02ab11cfbb18ea63b9bf1fb11bfc commit 9fadaee7ecce02ab11cfbb18ea63b9bf1fb11bfc Author: Quentin Thébault <quentin.thebault@defenso.fr> AuthorDate: 2025-08-28 08:19:41 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2025-09-12 16:24:38 +0000 ng_device: enable setting the device to non-blocking mode Return success when FIONBIO or FIOASYNC ioctl are received in order to support being set to non-blocking through fcntl(2). We return an error on FIOASYNC with non-zero data argument since we do not support O_ASYNC. Signed-off-by: Quentin Thébault <quentin.thebault@defenso.fr> Reviewed by: imp, jhb Pull Request: https://github.com/freebsd/freebsd-src/pull/1827 --- sys/netgraph/ng_device.c | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/sys/netgraph/ng_device.c b/sys/netgraph/ng_device.c index 79cae9933a5a..eca3a916a59f 100644 --- a/sys/netgraph/ng_device.c +++ b/sys/netgraph/ng_device.c @@ -38,20 +38,21 @@ #endif #include <sys/param.h> +#include <sys/systm.h> #include <sys/conf.h> +#include <sys/epoch.h> +#include <sys/fcntl.h> +#include <sys/filio.h> #include <sys/ioccom.h> #include <sys/kernel.h> #include <sys/malloc.h> #include <sys/mbuf.h> #include <sys/poll.h> #include <sys/proc.h> -#include <sys/epoch.h> #include <sys/queue.h> #include <sys/socket.h> #include <sys/syslog.h> -#include <sys/systm.h> #include <sys/uio.h> -#include <sys/fcntl.h> #include <net/ethernet.h> #include <net/if.h> @@ -135,9 +136,7 @@ static d_close_t ngdclose; static d_open_t ngdopen; static d_read_t ngdread; static d_write_t ngdwrite; -#if 0 static d_ioctl_t ngdioctl; -#endif static d_poll_t ngdpoll; static struct cdevsw ngd_cdevsw = { @@ -146,9 +145,7 @@ static struct cdevsw ngd_cdevsw = { .d_close = ngdclose, .d_read = ngdread, .d_write = ngdwrite, -#if 0 .d_ioctl = ngdioctl, -#endif .d_poll = ngdpoll, .d_name = NG_DEVICE_DEVNAME, }; @@ -397,6 +394,36 @@ ngdclose(struct cdev *dev, int flag, int mode, struct thread *td) return(0); } +/* + * Process IOCTLs + * + * At this stage we only return success on FIONBIO to allow setting the device + * as non-blocking. + * + */ +static int +ngdioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, + struct thread *td) +{ + int error; + + switch (cmd) { + case FIONBIO: + error = 0; + break; + case FIOASYNC: + if (*(int *)data != 0) + error = EINVAL; + else + error = 0; + break; + default: + error = ENOTTY; + } + + return (error); +} + #if 0 /* * The ioctl is transformed into netgraph control message. * We do not process them, yet.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202509121629.58CGT0Yl019423>