Messages in this thread | | | From | David Laight <> | Subject | RE: Listening on a TCP socket from a Kernel Module | Date | Mon, 17 May 2021 12:50:30 +0000 |
| |
From: Neal Cardwell > Sent: 17 May 2021 02:55 > > On Sun, May 16, 2021 at 7:20 PM louisrossberg > <louisrossberg@protonmail.com> wrote: > > > > Hello, can somebody point me in the right direction for > > what I would use to listen on a TCP socket from the > > kernel? I am working on a kernel module and have spent the > > past day looking through include/net and include/linux for > > something that would allow me to do so. I know TCP > > listening is typically done in userspace, but it should be > > possible at the kernel level right? tcp_diag looks > > promising, but it seems like that is mainly for monitoring > > sockets, and I'm not sure if I would be able to provide > > responses from it. > > > > Louis Rossberg, > > Warped Technologies > > Perhaps kernel_listen() and related functions (kernel_bind(), > kernel_accept(), etc.) in net/socket.c might do the trick for your use > case? Looking at how the callers of these functions structure their > code might give you enough to go on.
They should work. There are a couple of issues though: - There is no getsockopt() support in current kernels. - You may need to use __sock_create() rather than sock_create_kern() in order to hold a reference to the network namespace. It may be possible to use the wakeup callbacks that select/poll use. But it is probably safer to use blocking operations from a separate kernel thread.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |