RE: Listening on a TCP socket from a Kernel Module
flat view
From: David Laight <hidden>
Date: 2021-05-17 12:50:42
Also in:
lkml
From: Neal Cardwell
Sent: 17 May 2021 02:55 On Sun, May 16, 2021 at 7:20 PM louisrossberg [off-list ref] wrote:quoted
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 TechnologiesPerhaps 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)