Problems with netgraph

Bruce M. Simpson bms at incunabulum.net
Thu May 8 02:52:17 UTC 2008


Oleksandr Samoylyk wrote:
>>
>> looks like UDP in PPP in GRE
>
> I think so. Should we hope for some progress in this direction in future?

Probably not, unless someone is willing to come up to the table and 
commit to writing and maintaining a Netgraph node to demux GRE, although 
this is only shuffling the fanout elsewhere.

If MPD is relying on raw sockets to demultiplex GRE, then this is what 
it's up against in terms of performance -- repeated acquisitions of the 
INP sleep lock, and context switches when the socket buffer low water 
mark is passed. It might have improved slightly in HEAD since the move 
to rwlocks.

Like udp_input(), rip_input() suffers from the fact that the stack has 
to deal with delivering datagrams to potentially more than one socket, 
and there is no intermediate data structure to handle the fan-out -- it 
walks the entire inp list every time. If you look at the comments in 
udp_input() it's pretty clear this is a historical weakness in the BSD 
implementation.

Windows, by the way, forces socket clients to explicitly request 
reception of broadcast datagrams as of Windows Server 2003, and 
multicasts are strictly delivered to group members only, which 
eliminates that problematic loop -- you can always maintain a tree of 
receivers that way.

I'm happy to review patches if someone else commits to fixing it.

cheers
BMS


More information about the freebsd-net mailing list