HomeFreeBSD

protosw: cleanup protocols that existed merely to provide pr_input

Description

protosw: cleanup protocols that existed merely to provide pr_input

Since 4.4BSD the protosw was used to implement socket types created
by socket(2) syscall and at the same to demultiplex incoming IPv4
datagrams (later copied to IPv6). This story ended with 78b1fc05b20.

These entries (e.g. IPPROTO_ICMP) in inetsw that were added to catch
packets in ip_input(), they would also be returned by pffindproto()
if user says socket(AF_INET, SOCK_RAW, IPPROTO_ICMP). Thus, for raw
sockets to work correctly, all the entries were pointing at raw_usrreq
differentiating only in the value of pr_protocol.

With 78b1fc05b20 all these entries are no longer needed, as ip_protox
is independent of protosw. Any socket syscall requesting SOCK_RAW type
would end up with rip_protosw. And this protosw has its pr_protocol
set to 0, allowing to mark socket with any protocol.

For IPv6 raw socket the change required two small fixes:
o Validate user provided protocol value
o Always use protocol number stored in inp in rip6_attach, instead

of protosw value, which is now always 0.

Differential revision: https://reviews.freebsd.org/D36380

Details

Provenance
glebiusAuthored on Aug 30 2022, 10:09 PM
Differential Revision
D36380: protosw: cleanup protocols that existed merely to provide pr_input
Parents
rG8624f4347e81: divert: declare PF_DIVERT domain and stop abusing PF_INET
Branches
Unknown
Tags
Unknown