Re: SOCK_RAW and in_pcb.c

Gleb Smirnoff <[email protected]> Thu, 19 Mar 2026 09:37:01 -0700
Newsgroups gmane.os.freebsd.architechture
Message-ID <[email protected]>
On Thu, Mar 19, 2026 at 03:53:11AM -0400, Mark Johnston wrote:
M> I believe, before your SMRification change, there was no lock.  We
M> relied on the network epoch section to synchronize lookups.  Can we
M> avoid re-introducing a lock on the input path?  AFAIR the use of SMR was
M> motivated by needing to be able to recycle inpcbs quickly, but for raw
M> sockets this is probably not much of a concern...?
M> 
M> > Here is the plan:
M> > - a shared code between IPv4 and IPv6
M> > - rawpcb database per VNET that has: a list of unbound pcbs and tree of
M> >   src-bound pcbs.  We could have also a tree of dst-bound and src+dst-bound,
M> >   but I would speculate that practical hosts/routers that have a large
M> >   (local IP address count * raw socket count) product do not exist.  The
M> >   current hash that serves only the src+dst+proto-bound pcbs, IMHO, is too
M> >   restrictive and supposedly only mpd5 benefits from it.  I'd speculate that
M> >   src-bound lookup database will not degrade mpd5 performance, but will
M> >   provide improvements for other raw users.
M> > - the database is protected by rwlock, that is rlocked on the fast path and
M> >   wlocked by socket(2), bind(2) and connect(2).
M> > - setsockopt(2) needs to take care to not use raw's so_pcb as inpcb any more
M> > 
M> > Any comments?
M> 
M> I don't really like the rwlock and prefer to rely on the network epoch
M> instead.  Other than that I think this is ok.

I'm thinking of using a tree for src-bound sockets and we don't have CK ready
tree.  The benefit of a tree is the autotuning.  Most hosts will not spend any
memory on the raw pcb databasem, while heavy VPN concentrators running mpd5
will have a decently fast lookup.  Maybe rmlock(9) will be a good compromise?

-- 
Gleb Smirnoff