Honestly, I am not familiar enough in this subject domain so I cannot give any authoritative advice. But it seems to me that the latter idea of introducing and supporting LINUX_AF_PACKET may be less effort and more in line with what Charles did. I am not familiar with BPF so I do not know if it would even make sense for OSv nor how much effort it would be to support it.
Waldek On Thursday, July 16, 2020 at 9:43:14 AM UTC-4 [email protected] wrote: > Hi, > > I think that the type of raw sockets (SOCK_RAW) works well in OSv, it is > possible to hook L3 packets (assuming an INET domain) with no problems. I > guess that BSD does not support the PACKET domain, thus the OSv does not > support too. If I remember well, we can hook frames in BSD by using > libpcap, which in turn uses bpf (alternatively, we can use bpf directly). > However, the bsd/sys/net in OSv does not have the FreeBSD's bpf > implementation. Maybe one interesting way to enable L2 packet hooking is by > migrating the bpf from sys/net of FreeBSD to the bsd/sys/net of OSv (what > do you think about that guys?). Another possibility is to create a kind of > PACKET domain support (similar to NETLINK support provided by Charles > Meyers in the Spirent fork), but in that case, we will need to hook the > bytes of frames straightforward from the mbuffs. > > Regards, > Vinicius > > Em quinta-feira, 16 de julho de 2020 às 02:57:52 UTC-3, Pekka Enberg > escreveu: > >> Hi, >> >> On Wed, Jul 15, 2020 at 6:13 PM Waldek Kozaczuk <[email protected]> >> wrote: >> >>> Hi, >>> >>> Unfortunately, I have no idea what it would take to add raw sockets >>> support. Please be aware that we maintain another IPV6 branch - >>> https://github.com/cloudius-systems/osv/tree/ipv6 - which besides IPV6 >>> might have better networking support but I doubt it supports raw sockets. >>> >>> I am also adding Charles Meyers from Spirent who wrote original IPV6 >>> support to this thread. He may have some thoughts on this matter. Also, >>> Spirent has also its own OSv fork - https://github.com/SpirentOrion/osv - >>> which has extra stuff/fixes to networking stack (I would like to port some >>> of those to the mainline OSv at some point). >>> >> >> The TCP/IP stack supports raw sockets (it's the FreeBSD stack after all). >> >> One potential issue is that the Linux socket() compatibility layer is >> incorrect. I see that linux_socket() (called by socket() function) has some >> support for raw sockets: >> >> >> https://github.com/cloudius-systems/osv/blob/master/bsd/sys/compat/linux/linux_socket.cc#L619 >> >> >> However, it's bit picky on the "domain" and "protocol" and will ignore >> what Frederic attempted to do: >> >> fd=socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL)); >> >> I assume if you fix up linux_socket() to do what Linux does, things will >> work fine. >> >> - Pekka >> > -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/osv-dev/397b053e-b06b-467e-89b8-75d9dd6d117an%40googlegroups.com.
