Move IPv4 & IPv6 incoming/forwarding path, PIPEX ppp processing and
authormpi <mpi@openbsd.org>
Wed, 31 May 2017 05:59:09 +0000 (05:59 +0000)
committermpi <mpi@openbsd.org>
Wed, 31 May 2017 05:59:09 +0000 (05:59 +0000)
commit4cf8e8383e7f0c0459159a8c35086c3e2c6f0084
treeaa99df69e66c4fb6d588a98c0725d183c8368de1
parent0b384f75f7e25e1c15650a56e53f29a1c453c91d
Move IPv4 & IPv6 incoming/forwarding path, PIPEX ppp processing and
IPv4 & IPv6 dispatch functions outside the KERNEL_LOCK().

We currently rely on the NET_LOCK() serializing access to most global
data structures for that.  IP input queues are no longer used in the
forwarding case.  They still exist as boundary between the network and
transport layers because TCP/UDP & friends still need the KERNEL_LOCK().

Since we do not want to grab the NET_LOCK() for every packet, the
softnet thread will do it once before processing a batch.  That means
the L2 processing path, which is currently running without lock, will
now run with the NET_LOCK().

IPsec isn't ready to run without KERNEL_LOCK(), so the softnet thread
will grab the KERNEL_LOCK() as soon as ``ipsec_in_use'' is set.

Tested by Hrvoje Popovski.

ok visa@, bluhm@, henning@
sys/net/if.c
sys/net/if_ethersubr.c
sys/net/if_switch.c
sys/netinet/ip_input.c
sys/netinet/ip_var.h
sys/netinet6/ip6_input.c
sys/netinet6/ip6_var.h