Hi, On Wed, Jun 9, 2021 at 12:48 PM Jakub Kicinski <kuba@xxxxxxxxxx> wrote: > > On Tue, 8 Jun 2021 15:33:49 -0700 Stephen Hemminger wrote: > > On Tue, 8 Jun 2021 17:03:16 -0400 > > > > With having the fuse-like socket before it should be trivial to switch > > > > between the implementations. > > > > > > So a good starting point would be to have such a "fuse-like socket" > > > component? What about having a simple example for that at first > > > without having quic involved. The kernel calls some POSIX-like socket > > > interface which triggers a communication to a user space application. > > > This user space application will then map everything to a user space > > > generated socket. This would be a map from socket struct > > > "proto/proto_ops" to user space and vice versa. The kernel application > > > probably can use the kernel_FOO() (e.g. kernel_recvmsg()) socket api > > > directly then. Exactly like "fuse" as you mentioned just for sockets. > > > > > > I think two veth interfaces can help to test something like that, > > > either with a "fuse-like socket" on the other end or an user space > > > application. Just doing a ping-pong example. > > > > > > Afterwards we can look at how to replace the user generated socket > > > application with any $LIBQUIC e.g. msquic implementation as second > > > step. > > > > Socket state management is complex and timers etc in userspace are hard. > > +1 seeing the struggles fuse causes in storage land "fuse for sockets" > is not an exciting temporary solution IMHO.. What about an in-kernel sunrpc client which forwards "in-kernel proxy socket syscall functions" to a user server who executes those on a user socket? Does this sound like a better approach? Sure there may be more problems, but maybe we could try it with something simple at first to discover all those problems. - Alex