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.

Reply via email to