NetBSD/sys/netinet
ozaki-r 9c4cd06355 Introduce softint-based if_input
This change intends to run the whole network stack in softint context
(or normal LWP), not hardware interrupt context. Note that the work is
still incomplete by this change; to that end, we also have to softint-ify
if_link_state_change (and bpf) which can still run in hardware interrupt.

This change softint-ifies at ifp->if_input that is called from
each device driver (and ieee80211_input) to ensure Layer 2 runs
in softint (e.g., ether_input and bridge_input). To this end,
we provide a framework (called percpuq) that utlizes softint(9)
and percpu ifqueues. With this patch, rxintr of most drivers just
queues received packets and schedules a softint, and the softint
dequeues packets and does rest packet processing.

To minimize changes to each driver, percpuq is allocated in struct
ifnet for now and that is initialized by default (in if_attach).
We probably have to move percpuq to softc of each driver, but it's
future work. At this point, only wm(4) has percpuq in its softc
as a reference implementation.

Additional information including performance numbers can be found
in the thread at tech-kern@ and tech-net@:
http://mail-index.netbsd.org/tech-kern/2016/01/14/msg019997.html

Acknowledgment: riastradh@ greatly helped this work.
Thank you very much!
2016-02-09 08:32:07 +00:00
..
Makefile Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
accept_filter.h
accf_data.c include "ioconf.h" to get the 'void <driver>attach(int count);' prototype. 2015-08-20 14:40:16 +00:00
accf_http.c include "ioconf.h" to get the 'void <driver>attach(int count);' prototype. 2015-08-20 14:40:16 +00:00
cpu_in_cksum.c
dccp.h Add DCCP protocol support from KAME. 2015-02-10 19:11:52 +00:00
dccp_cc_sw.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
dccp_cc_sw.h Add DCCP protocol support from KAME. 2015-02-10 19:11:52 +00:00
dccp_tcplike.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
dccp_tcplike.h Add DCCP protocol support from KAME. 2015-02-10 19:11:52 +00:00
dccp_tfrc.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
dccp_tfrc.h Add DCCP protocol support from KAME. 2015-02-10 19:11:52 +00:00
dccp_tfrc_lookup.h Add DCCP protocol support from KAME. 2015-02-10 19:11:52 +00:00
dccp_usrreq.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
dccp_var.h make connect syscall use sockaddr_big and modify pr_{send,connect} 2015-05-02 17:18:03 +00:00
files.ipfilter
files.netinet Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
icmp6.h
icmp_private.h
icmp_var.h PR/49676: Ryo Shimizu: ICMP_STATINC() buffer overflows 2015-02-18 17:00:15 +00:00
if_arp.c Remove unnecessary LLE_REMREF 2016-01-25 10:15:38 +00:00
if_atm.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
if_atm.h
if_ether.h
if_inarp.h Make arp_init, in_revarpinput and revarprequest static 2015-05-21 09:26:18 +00:00
igmp.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
igmp.h
igmp_var.h
in.c Fix build dependency of if_llatbl.c 2015-11-26 01:41:20 +00:00
in.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
in4_cksum.c Only check that the offset < sizeof(struct ip) if nxt != 0, i.e. in the 2014-11-30 18:15:41 +00:00
in_cksum.c
in_gif.c eliminate variable argument in encapsw 2016-01-26 06:00:10 +00:00
in_gif.h eliminate variable argument in encapsw 2016-01-26 06:00:10 +00:00
in_ifattach.h
in_offload.c Pull out route lookups from L2 output routines 2015-06-04 09:19:59 +00:00
in_offload.h
in_pcb.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
in_pcb.h remove transitional functions in{,6}_pcbconnect_m() that were used in 2015-05-24 15:43:45 +00:00
in_pcb_hdr.h
in_print.c add routines to print in_addr and sockaddr_in (in_print and sin_print) 2014-12-02 19:35:27 +00:00
in_proto.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
in_proto.h Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
in_selsrc.c Make this compile again 2015-09-21 13:32:26 +00:00
in_selsrc.h Hook up lltable/llentry with the kernel (and rumpkernel) 2015-08-31 08:02:44 +00:00
in_systm.h
in_var.h Replace ARP cache (llinfo) with lltable/llentry 2015-08-31 08:05:20 +00:00
ip.h
ip6.h
ip_carp.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
ip_carp.h
ip_ecn.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
ip_ecn.h
ip_encap.c implement encapsw instead of protosw and uniform prototype. 2016-01-26 05:58:05 +00:00
ip_encap.h eliminate variable argument in encapsw 2016-01-26 06:00:10 +00:00
ip_etherip.c Introduce softint-based if_input 2016-02-09 08:32:07 +00:00
ip_etherip.h
ip_flow.c Add RTF_BROADCAST to mark routes used for the broadcast address when 2015-03-23 18:33:17 +00:00
ip_icmp.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
ip_icmp.h PR/49676: Ryo Shimizu: ICMP_STATINC() buffer overflows 2015-02-18 17:00:15 +00:00
ip_id.c
ip_input.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
ip_mroute.c eliminate variable argument in encapsw 2016-01-26 06:00:10 +00:00
ip_mroute.h
ip_output.c Give proper prototype to ip_output. 2016-01-20 22:12:22 +00:00
ip_private.h
ip_reass.c
ip_var.h Give proper prototype to ip_output. 2016-01-20 22:12:22 +00:00
pim.h
pim_var.h
portalgo.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
portalgo.h
raw_ip.c Revert previous: ran cvs commit when I meant cvs diff. Sorry! 2016-01-21 15:41:29 +00:00
sctp.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_asconf.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_asconf.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_constants.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_crc32.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_crc32.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_hashdriver.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_hashdriver.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_header.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_indata.c PR/50528: David Binderman: remove sizeof(sizeof(x)) 2015-12-13 18:53:57 +00:00
sctp_indata.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_input.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_input.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_output.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_output.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_pcb.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_pcb.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_peeloff.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_peeloff.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_structs.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_timer.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_timer.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_uio.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctp_usrreq.c PR/50529: David Binderman: Remove double sizeof 2015-12-13 18:58:13 +00:00
sctp_var.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctputil.c Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
sctputil.h Add core networking support for SCTP. 2015-10-13 21:28:34 +00:00
tcp.h Port over the TCP_INFO socket option from FreeBSD, originally from 2015-02-14 12:57:52 +00:00
tcp_congctl.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_congctl.h
tcp_debug.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_debug.h
tcp_fsm.h
tcp_input.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_output.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_private.h
tcp_sack.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_seq.h
tcp_subr.c Refactor tcp_mtudisc 2015-09-07 01:56:50 +00:00
tcp_timer.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_timer.h
tcp_usrreq.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_var.h Change the new counter variables in struct tcpcb to uint32_t, as 2015-02-14 22:09:53 +00:00
tcp_vtw.c sprinkle _KERNEL_OPT 2015-08-24 22:21:26 +00:00
tcp_vtw.h
tcpip.h
udp.h
udp_private.h
udp_usrreq.c Give proper prototype to udp_output. 2016-01-20 22:01:18 +00:00
udp_var.h Give proper prototype to udp_output. 2016-01-20 22:01:18 +00:00