25da94eb3e
o Introduce a notion of "not ready" mbufs in socket buffers. These mbufs are now being populated by some I/O in background and are referenced outside. This forces following implications: - An mbuf which is "not ready" can't be taken out of the buffer. - An mbuf that is behind a "not ready" in the queue neither. - If sockbet buffer is flushed, then "not ready" mbufs shouln't be freed. o In struct sockbuf the sb_cc field is split into sb_ccc and sb_acc. The sb_ccc stands for ""claimed character count", or "committed character count". And the sb_acc is "available character count". Consumers of socket buffer API shouldn't already access them directly, but use sbused() and sbavail() respectively. o Not ready mbufs are marked with M_NOTREADY, and ready but blocked ones with M_BLOCKED. o New field sb_fnrdy points to the first not ready mbuf, to avoid linear search. o New function sbready() is provided to activate certain amount of mbufs in a socket buffer. A special note on SCTP: SCTP has its own sockbufs. Unfortunately, FreeBSD stack doesn't yet allow protocol specific sockbufs. Thus, SCTP does some hacks to make itself compatible with FreeBSD: it manages sockbufs on its own, but keeps sb_cc updated to inform the stack of amount of data in them. The new notion of "not ready" data isn't supported by SCTP. Instead, only a mechanical substitute is done: s/sb_cc/sb_ccc/. A proper solution would be to take away struct sockbuf from struct socket and allow protocols to implement their own socket buffers, like SCTP already does. This was discussed with rrs@. Sponsored by: Netflix Sponsored by: Nginx, Inc. |
||
---|---|---|
.. | ||
cmds.c | ||
cmdtab.c | ||
convtbl.c | ||
convtbl.h | ||
devs.c | ||
devs.h | ||
extern.h | ||
fetch.c | ||
icmp6.c | ||
icmp.c | ||
ifcmds.c | ||
ifstat.c | ||
iostat.c | ||
ip6.c | ||
ip.c | ||
keyboard.c | ||
main.c | ||
Makefile | ||
mode.c | ||
mode.h | ||
netcmds.c | ||
netstat.c | ||
pigs.c | ||
swap.c | ||
systat.1 | ||
systat.h | ||
tcp.c | ||
vmstat.c |