Skip site navigation (1)Skip section navigation (2)
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>