Home | History | Annotate | Download | only in netinet
History log of /src/sys/netinet/tcp_usrreq.c
RevisionDateAuthorComments
 1.238  04-Nov-2022  ozaki-r inpcb: rename functions to in6pcb_*
 1.237  04-Nov-2022  ozaki-r inpcb: rename functions to inpcb_*

Inspired by rmind-smpnet patches.
 1.236  30-Oct-2022  ozaki-r tcp: restore NULL check for inp in tcp_ctloutput
 1.235  29-Oct-2022  ozaki-r tcp: restore NULL checks for inp
 1.234  28-Oct-2022  ozaki-r inpcb: separate inpcb again to reduce the size of PCB for IPv4

The data size of PCB for IPv4 increased because of the merge of
struct in6pcb. The change decreases the size to the original size by
separating struct inpcb (again). struct in4pcb and in6pcb that embed
struct inpcb are introduced.

Even after the separation, users don't need to realize the separation
and only have to use some macros to access dedicated data. For example,
inp->inp_laddr is now accessed through in4p_laddr(inp).
 1.233  28-Oct-2022  ozaki-r inpcb: integrate data structures of PCB into one

Data structures of network protocol control blocks (PCBs), i.e.,
struct inpcb, in6pcb and inpcb_hdr, are not organized well. Users of
the data structures have to handle them separately and thus the code
is cluttered and duplicated.

The commit integrates the data structures into one, struct inpcb. As a
result, users of PCBs only have to handle just one data structure, so
the code becomes simple.

One drawback is that the data size of PCB for IPv4 increases by 40 bytes
(from 248 bytes to 288 bytes).
 1.232  20-Sep-2022  ozaki-r tcp: separate syn cache stuffs into tcp_syncache.[ch] files

No functional change.
 1.231  28-Jun-2022  riastradh tcp(4): Bail early on sendoob if not connected.

XXX Not sure if testing tp->t_template is the right way to discern
this -- I just reached for it because the downstream crash is a panic
on tp->t_template == NULL in tcp_output.

XXX In principle this could try connecting to the address, except
it's not passed down from the logic in uipc_socket.c to tcp_sendoob.

Reported-by: syzbot+a01f4cfec72790855ce2@syzkaller.appspotmail.com
 1.230  04-Aug-2021  christos Get the value of the right variable (from RVP)
 1.229  08-Mar-2021  christos Remove the unused "addin" argument (it was always 0) and go back using
a random iss by default (instead of rfc1948)
 1.228  23-Nov-2020  chs Restore correct functioning of SIOCATMARK by removing the previous
change that was done to fix poll(POLLPRI | POLLRDBAND) and instead
add a separate flag to track when poll() should indicate that a
MSG_OOB byte is available. Re-fixes PR 54435 properly.
 1.227  17-Oct-2020  mlelstv branches: 1.227.2;
Fix RTT values reported by TCP_INFO.
 1.226  13-Apr-2020  maxv hardclock_ticks -> getticks()
 1.225  06-Aug-2019  riastradh branches: 1.225.6;
Clamp tcp timer quantities to reasonable ranges.

Reported-by: syzbot+259675123340bf46a6de@syzkaller.appspotmail.com
 1.224  05-Feb-2019  mrg branches: 1.224.4;
adjust fallthru comments to appease gcc7.
 1.223  28-Jan-2019  martin Fix memory leaks pointed out by Ilja Van Sprundel: all
sendoob() functions are expted to free both passed
mbuf chains.
 1.222  16-Dec-2018  christos sbspace() does not return negative values anymore and that broke OOB data
sending. Instead of depending on negative values, account for the 1024
bytes sosend() adds so that it can use all the space here in a separate
function sbspace_oob(). Idea from mlelstv@
 1.221  24-Nov-2018  maxv KNF, no functional change.
 1.220  24-Nov-2018  maxv Fix kernel pointer leaks in sysctl_inpcblist.
 1.219  03-May-2018  maxv branches: 1.219.2;
Remove now unused tcpip.h includes. Some were already unused before.
 1.218  07-Apr-2018  maxv Remove dead code.
 1.217  29-Mar-2018  maxv Remove #ifdef INET. Same as tcp_input.c. Makes the code easier to
understand.

Also make tcp6_mtudisc() static in tcp_subr.c.
 1.216  15-Aug-2017  christos branches: 1.216.2;
add some more getsockopt(2) params
 1.215  28-Jul-2017  maxv Remove TCP_COMPAT_42. This feature is a workaround for a bug in the TCP
stack of BSD4.2. Having such features just does not make any sense, and
looking at the code, I'm not sure it actually works.
 1.214  24-Jan-2017  ozaki-r branches: 1.214.6;
Tweak softnet_lock and NET_MPSAFE

- Don't hold softnet_lock in some functions if NET_MPSAFE
- Add softnet_lock to sysctl_net_inet_icmp_redirtimeout
- Add softnet_lock to expire_upcalls of ip_mroute.c
- Restore softnet_lock for in{,6}_pcbpurgeif{,0} if NET_MPSAFE
- Mark some softnet_lock for future work
 1.213  18-Nov-2016  knakahara branches: 1.213.2;
fix: "ifconfig destory" can stalls when "ifconfig" is done parallel.
This problem occurs only if NET_MPSAFE on.

ifconfig destroy side:
kernel entry point is ifioctl => if_clone_destroy.
pr_purgeif() acquires softnet_lock, and then ifa_remove() calls
pserialize_perform() holding softnet_lock.
ifconfig side:
kernel entry point is socreate.
pr_attach()(udp_attach_wrapper()) calls sosetlock(). In this call path,
sosetlock() try to acquire softnet_lock.
These can cause dead lock.
 1.212  26-Apr-2016  ozaki-r branches: 1.212.2;
Sweep unnecessary route.h inclusions
 1.211  15-Feb-2016  rtr Reduce code duplication.

Split creation of IPv4-Mapped IPv6 addresses into its own function
and use it.

No functional change intended. As posted to tech-net@
 1.210  14-Feb-2016  rtr remove duplicated #include of <netinet/in.h>
 1.209  24-Aug-2015  pooka sprinkle _KERNEL_OPT
 1.208  02-May-2015  rtr make connect syscall use sockaddr_big and modify pr_{send,connect}
nam parameter type from buf * to sockaddr *.

final commit for parameter type changes to protocol user requests

* bump kernel version to 7.99.15 for parameter type changes to pr_{send,connect}
 1.207  26-Apr-2015  rtr remove pr_generic from struct pr_usrreqs and all implementations of
pr_generic in protocols.

bump to 7.99.13

approved by rmind@
 1.206  24-Apr-2015  rtr make accept, getsockname and getpeername syscalls use sockaddr_big and modify
pr_{accept,sockname,peername} nam parameter type from mbuf * to sockaddr *.

* retained use of mbuftypes[MT_SONAME] for now.
* bump to netbsd version 7.99.12 for parameter type change.

patch posted to tech-net@ 2015/04/19
 1.205  03-Apr-2015  rtr * change pr_bind to accept struct sockaddr * instead of struct mbuf *
* update protocol bind implementations to use/expect sockaddr *
instead of mbuf *
* introduce sockaddr_big struct for storage of addr data passed via
sys_bind; sockaddr_big is of sufficient size and alignment to
accommodate all addr data sizes received.
* modify sys_bind to allocate sockaddr_big instead of using an mbuf.
* bump kernel version to 7.99.9 for change to pr_bind() parameter type.

Patch posted to tech-net@
http://mail-index.netbsd.org/tech-net/2015/03/15/msg005004.html

The choice to use a new structure sockaddr_big has been retained since
changing sockaddr_storage size would lead to unnecessary ABI change. The
use of the new structure does not preclude future work that increases
the size of sockaddr_storage and at that time sockaddr_big may be
trivially replaced.

Tested by mrg@ and myself, discussed with rmind@, posted to tech-net@
 1.204  31-Mar-2015  ozaki-r Remove unnecessary opt_ipsec.h inclusions
 1.203  14-Feb-2015  he Port over the TCP_INFO socket option from FreeBSD, originally from
the Linux 2.6 TCP API. This permits the caller to query certain information
about a TCP connection, and is used by pkgsrc's net/iperf3 test program
if available.

This extends struct tcbcb with three fields to count retransmits,
out-of-sequence receives and zero window announcements, and will
therefore warrant a kernel revision bump (done separately).
 1.202  10-Nov-2014  maxv branches: 1.202.2;
Do not uselessly include <sys/malloc.h>.
 1.201  18-Oct-2014  snj src is too big these days to tolerate superfluous apostrophes. It's
"its", people!
 1.200  09-Aug-2014  rtr branches: 1.200.2;
split PRU_CONNECT2 & PRU_PURGEIF function out of pr_generic() usrreq
switches and put into separate functions

- always KASSERT(solocked(so)) even if not implemented
(for PRU_CONNECT2 only)

- replace calls to pr_generic() with req = PRU_CONNECT2 with calls to
pr_connect2()

- replace calls to pr_generic() with req = PRU_PURGEIF with calls to
pr_purgeif()

put common code from unp_connect2() (used by unp_connect() into
unp_connect1() and call out to it when needed

patch only briefly reviewed by rmind@
 1.199  08-Aug-2014  rtr split PRU_RCVD function out of pr_generic() usrreq switches and put into
separate functions

- always KASSERT(solocked(so)) even if not implemented

- replace calls to pr_generic() with req = PRU_RCVD with calls to
pr_rcvd()
 1.198  05-Aug-2014  rtr split PRU_SEND function out of pr_generic() usrreq switches and put into
separate functions

xxx_send(struct socket *, struct mbuf *, struct mbuf *,
struct mbuf *, struct lwp *)

- always KASSERT(solocked(so)) even if not implemented

- replace calls to pr_generic() with req = PRU_SEND with calls to
pr_send()

rename existing functions that operate on PCB for consistency (and to
free up their names for xxx_send() PRUs

- l2cap_send() -> l2cap_send_pcb()
- sco_send() -> sco_send_pcb()
- rfcomm_send() -> rfcomm_send_pcb()

patch reviewed by rmind
 1.197  05-Aug-2014  rtr get_tcppcb() is nearly always called upon entry to usrreqs so
KASSERT(solocked(so)) inside it and remove the redundant KASSERT
everywhere we are using tcp_getpcb()
 1.196  05-Aug-2014  rtr revert the removal of struct lwp * parameter from bind, listen and connect
user requests.

this should resolve the issue relating to nfs client hangs presented
recently by wiz on current-users@
 1.195  02-Aug-2014  rtr restore splsoftnet() in various usrreqs that were removed during the PRU
splits. we will properly review removal after the PRU split work is
complete.
 1.194  31-Jul-2014  rtr split PRU_DISCONNECT, PRU_SHUTDOWN and PRU_ABORT function out of
pr_generic() usrreq switches and put into separate functions

xxx_disconnect(struct socket *)
xxx_shutdown(struct socket *)
xxx_abort(struct socket *)

- always KASSERT(solocked(so)) even if not implemented
- replace calls to pr_generic() with req =
PRU_{DISCONNECT,SHUTDOWN,ABORT}
with calls to pr_{disconnect,shutdown,abort}() respectively

rename existing internal functions used to implement above functionality
to permit use of the names for xxx_{disconnect,shutdown,abort}().

- {l2cap,sco,rfcomm}_disconnect() ->
{l2cap,sco,rfcomm}_disconnect_pcb()
- {unp,rip,tcp}_disconnect() -> {unp,rip,tcp}_disconnect1()
- unp_shutdown() -> unp_shutdown1()

patch reviewed by rmind
 1.193  30-Jul-2014  rtr split PRU_CONNECT function out of pr_generic() usrreq switches and put
into seaparate functions

xxx_listen(struct socket *, struct mbuf *)

- always KASSERT(solocked(so)) and KASSERT(nam != NULL)
- replace calls to pr_generic() with req = PRU_CONNECT with
pr_connect()
- rename existin {l2cap,sco,rfcomm}_connect() to
{l2cap,sco,rfcomm}_connect_pcb() respectively to permit
naming consistency with other protocols functions.
- drop struct lwp * parameter from unp_connect() and at_pcbconnect()
and use curlwp instead where appropriate.

patch reviewed by rmind
 1.192  30-Jul-2014  rtr put boilerplate extraction of inpcb or in6pcb and tcpcb performed in tcp
usrreqs into a function that can be called instead of cut & pasting it
to every single usrreq function.

tcp_getpcb(struct socket *, struct inpcb **, struct in6pcb **, struct tcpcb **)

* examines the family of the provided socket and fills in either inpcb
or in6pcb and tcpcb.
* if the pcb is not present for the family of the socket EINVAL is
returned, if the family is not AF_INET{,6} EAFNOSUPPORT is returned.

signature provided by and patch reviewed by rmind
 1.191  24-Jul-2014  rtr cleanup after last commit

- add KASSERT(req != PRU_BIND) and KASSERT(req != PRU_LISTEN) inside
tcp_usrreq() as these reqs should no longer reach here.
- remove (now unreachable) PRU_LISTEN case in switch.
 1.190  24-Jul-2014  rtr split PRU_BIND and PRU_LISTEN function out of pr_generic() usrreq
switches and put into separate functions
xxx_bind(struct socket *, struct mbuf *)
xxx_listen(struct socket *)

- always KASSERT(solocked(so)) even if not implemented

- replace calls to pr_generic() with req = PRU_BIND with call to
pr_bind()

- replace calls to pr_generic() with req = PRU_LISTEN with call to
pr_listen()

- drop struct lwp * parameter from at_pcbsetaddr(), in_pcbbind() and
unp_bind() and always use curlwp.

rename existing functions that operate on PCB for consistency (and to
free up their names for xxx_{bind,listen}() PRUs

- l2cap_{bind,listen}() -> l2cap_{bind,listen}_pcb()
- sco_{bind,listen}() -> sco_{bind,listen}_pcb()
- rfcomm_{bind,listen}() -> rfcomm_{bind,listen}_pcb()

patch reviewed by rmind

welcome to netbsd 6.99.48
 1.189  23-Jul-2014  rtr split PRU_SENDOOB and PRU_RCVOOB function out of pr_generic() usrreq
switches and put into separate functions
xxx_sendoob(struct socket *, struct mbuf *, struct mbuf *)
xxx_recvoob(struct socket *, struct mbuf *, int)

- always KASSERT(solocked(so)) even if request is not implemented

- replace calls to pr_generic() with req = PRU_{SEND,RCV}OOB with
calls to pr_{send,recv}oob() respectively.

there is still some tweaking of m_freem(m) and m_freem(control) to come
for consistency. not performed with this commit for clarity.

reviewed by rmind
 1.188  14-Jul-2014  rtr pr_generic() for req = PRU_RCVOOB is always called with control == NULL
so don't bother with a conditional block that handles non-NULL, it
doesn't happen.
 1.187  10-Jul-2014  rmind tcp_accept: simplify a little.
 1.186  09-Jul-2014  rtr * split PRU_ACCEPT function out of pr_generic() usrreq switches and put
into a separate function xxx_accept(struct socket *, struct mbuf *)

note: future cleanup will take place to remove struct mbuf parameter
type and replace it with a more appropriate type.

patch reviewed by rmind
 1.185  09-Jul-2014  rtr * split PRU_PEERADDR and PRU_SOCKADDR function out of pr_generic()
usrreq switches and put into separate functions
xxx_{peer,sock}addr(struct socket *, struct mbuf *).

- KASSERT(solocked(so)) always in new functions even if request
is not implemented

- KASSERT(pcb != NULL) and KASSERT(nam) if the request is
implemented and not for tcp.

* for tcp roll #ifdef KPROF and #ifdef DEBUG code from tcp_usrreq() into
easier to cut & paste functions tcp_debug_capture() and
tcp_debug_trace()

- functions provided by rmind
- remaining use of PRU_{PEER,SOCK}ADDR #define to be removed in a
future commit.

* rename netbt functions to permit consistency of pru function names
(as has been done with other requests already split out).

- l2cap_{peer,sock}addr() -> l2cap_{peer,sock}_addr_pcb()
- rfcomm_{peer,sock}addr() -> rfcomm_{peer,sock}_addr_pcb()
- sco_{peer,sock}addr() -> sco_{peer,sock}_addr_pcb()

* split/refactor do_sys_getsockname(lwp, fd, which, nam) into
two functions do_sys_get{peer,sock}name(fd, nam).

- move PRU_PEERADDR handling into do_sys_getpeername() from
do_sys_getsockname()
- have svr4_stream directly call do_sys_get{sock,peer}name()
respectively instead of providing `which' & fix a DPRINTF string
that incorrectly wrote "getpeername" when it meant "getsockname"
- fix sys_getpeername() and sys_getsockname() to call
do_sys_get{sock,peer}name() without `which' and `lwp' & adjust
comments
- bump kernel version for removal of lwp & which parameters from
do_sys_getsockname()

note: future cleanup to remove struct mbuf * abuse in
xxx_{peer,sock}name()
still to come, not done in this commit since it is easier to do post
split.

patch reviewed by rmind

welcome to 6.99.47
 1.184  07-Jul-2014  rtr * sprinkle KASSERT(solocked(so)); in all pr_stat() functions.
* fix remaining inconsistent struct socket parameter names.
 1.183  07-Jul-2014  rtr backout change that made pr_stat return EOPNOTSUPP for protocols that
were not filling in struct stat.

decision made after further discussion with rmind and investigation of
how other operating systems behave. soo_stat() is doing just enough to
be able to call what gets returned valid and thus justifys a return of
success.

additional review will be done to determine of the pr_stat functions
that were already returning EOPNOTSUPP can be considered successful with
what soo_stat() is doing.
 1.182  07-Jul-2014  rtr * have pr_stat return EOPNOTSUPP consistently for all protocols that do
not fill in struct stat instead of returning success.

* in pr_stat remove all checks for non-NULL so->so_pcb except where the
pcb is actually used (i.e. cases where we don't return EOPNOTSUPP).

proposed on tech-net@
 1.181  06-Jul-2014  rtr * split PRU_SENSE functionality out of xxx_usrreq() switches and place into
separate xxx_stat(struct socket *, struct stat *) functions.
* replace calls using pr_generic with req == PRU_SENSE with pr_stat().

further change will follow that cleans up the pattern used to extract the
pcb and test for its presence.

reviewed by rmind
 1.180  01-Jul-2014  rtr fix parameter types in pr_ioctl, called xx_control() functions and remove
abuse of pointer to struct mbuf type.

param2 changed to u_long type and uses parameter name 'cmd' (ioctl command)
param3 changed to void * type and uses parameter name 'data'
param4 changed to struct ifnet * and uses parameter name 'ifp'
param5 has been removed (formerly struct lwp *) and uses of 'l' have been
replaced with curlwp from curproc(9).

callers have had (now unnecessary) casts to struct mbuf * removed, called
code has had (now unnecessary) casts to u_long, void * and struct ifnet *
respectively removed.

reviewed by rmind@
 1.179  23-Jun-2014  rtr where appropriate rename xxx_ioctl() struct mbuf * parameters from
`control' to `ifp' after split from xxx_usrreq().

sys_socket.c
fix wrapping of arguments to be consistent with other function calls
in the file after replacing pr_usrreq() call with pr_ioctl() which
required one less argument.

link_proto.c
fix indentation of parameters in link_ioctl() prototype to be
consistent with the rest of the file.

discussed with rmind@
 1.178  22-Jun-2014  rtr * split PRU_CONTROL functionality out of xxx_userreq() switches and place
into separate xxx_ioctl() functions.
* place KASSERT(req != PRU_CONTROL) inside xxx_userreq() as it is now
inappropriate for req = PRU_CONTROL in xxx_userreq().
* replace calls to pr_generic() with req = PRU_CONTROL with pr_ioctl().
* remove & fixup references to PRU_CONTROL xxx_userreq() function comments.
* fix various comments references for xxx_userreq() that mentioned
PRU_CONTROL as xxx_userreq() no longer handles the request.

a further change will follow to fix parameter and naming inconsistencies
retained from original code.

Reviewed by rmind@
 1.177  22-May-2014  rmind tcp_usrreq: fix the previous - the assert is still not true (but PRU_SENSE
case will handle it); eventually, pr_usrreq should not be called without
PCB attached.
 1.176  21-May-2014  rmind tcp_usrreq: fix the previous correctly - restore the assert logic,
but move it after the PRU_SENSE check.
 1.175  21-May-2014  pgoyette Restore original sense of the check, and allow both inp and in6p to be
NULL. This case is explicitly handled below.
 1.174  20-May-2014  rmind Adjust PR_WRAP_USRREQS() to include the attach/detach functions.
We still need the kernel-lock for some corner cases.
 1.173  19-May-2014  rmind - Split off PRU_ATTACH and PRU_DETACH logic into separate functions.
- Replace malloc with kmem and eliminate M_PCB while here.
- Sprinkle more asserts.
 1.172  18-May-2014  rmind Add struct pr_usrreqs with a pr_generic function and prepare for the
dismantling of pr_usrreq in the protocols; no functional change intended.
PRU_ATTACH/PRU_DETACH changes will follow soon.

Bump for struct protosw. Welcome to 6.99.62!
 1.171  25-Feb-2014  pooka branches: 1.171.2;
Ensure that the top level sysctl nodes (kern, vfs, net, ...) exist before
the sysctl link sets are processed, and remove redundancy.

Shaves >13kB off of an amd64 GENERIC, not to mention >1k duplicate
lines of code.
 1.170  02-Dec-2013  kefren Update TCP CB with new values on rfc1323 and mssdflt sysctl updates
From yasuoka@iij.ad.jp in kern/44254
 1.169  23-Nov-2013  christos convert from CIRCLEQ to TAILQ.
 1.168  04-Oct-2013  christos PR/48098: Brian Marcotte: Avoid kernel assertion for embryonic sockets that
don't have credentials yet.
XXX: pullup-6
 1.167  15-Sep-2013  martin Remove unused variables
 1.166  10-Apr-2013  christos branches: 1.166.4;
Limit the tcp initial window setting to 10, leaving it by default to 4
and simplifying the code in process. Per draft-ietf-initcwnd-08.txt.
 1.165  02-Jun-2012  dsl branches: 1.165.2;
Add some pre-processor magic to verify that the type of the data item
passed to sysctl_createv() actually matches the declared type for
the item itself.
In the places where the caller specifies a function and a structure
address (typically the 'softc') an explicit (void *) cast is now needed.
Fixes bugs in sys/dev/acpi/asus_acpi.c sys/dev/bluetooth/bcsp.c
sys/kern/vfs_bio.c sys/miscfs/syncfs/sync_subr.c and setting
AcpiGbl_EnableAmlDebugObject.
(mostly passing the address of a uint64_t when typed as CTLTYPE_INT).
I've test built quite a few kernels, but there may be some unfixed MD
fallout. Most likely passing &char[] to char *.
Also add CTLFLAG_UNSIGNED for unsiged decimals - not set yet.
 1.164  22-Mar-2012  drochner remove KAME IPSEC, replaced by FAST_IPSEC
 1.163  17-Mar-2012  christos PR/46077: M. Nunberg: Stat should not fial on connecting socket.
 1.162  02-Feb-2012  tls branches: 1.162.2;
Entropy-pool implementation move and cleanup.

1) Move core entropy-pool code and source/sink/sample management code
to sys/kern from sys/dev.

2) Remove use of NRND as test for presence of entropy-pool code throughout
source tree.

3) Remove use of RND_ENABLED in device drivers as microoptimization to
avoid expensive operations on disabled entropy sources; make the
rnd_add calls do this directly so all callers benefit.

4) Fix bug in recent rnd_add_data()/rnd_add_uint32() changes that might
have lead to slight entropy overestimation for some sources.

5) Add new source types for environmental sensors, power sensors, VM
system events, and skew between clocks, with a sample implementation
for each.

ok releng to go in before the branch due to the difficulty of later
pullup (widespread #ifdef removal and moved files). Tested with release
builds on amd64 and evbarm and live testing on amd64.
 1.161  19-Dec-2011  drochner rename the IPSEC in-kernel CPP variable and config(8) option to
KAME_IPSEC, and make IPSEC define it so that existing kernel
config files work as before
Now the default can be easily be changed to FAST_IPSEC just by
setting the IPSEC alias to FAST_IPSEC.
 1.160  06-Jun-2011  dyoung branches: 1.160.2; 1.160.6;
Don't allocate resources for vtw until/unless it is enabled. This will
further help those machines where memory is in short supply.

TBD: release resources after vtw is disabled and all entries have
expired.
 1.159  03-May-2011  dyoung branches: 1.159.2;
Reduces the resources demanded by TCP sessions in TIME_WAIT-state using
methods called Vestigial Time-Wait (VTW) and Maximum Segment Lifetime
Truncation (MSLT).

MSLT and VTW were contributed by Coyote Point Systems, Inc.

Even after a TCP session enters the TIME_WAIT state, its corresponding
socket and protocol control blocks (PCBs) stick around until the TCP
Maximum Segment Lifetime (MSL) expires. On a host whose workload
necessarily creates and closes down many TCP sockets, the sockets & PCBs
for TCP sessions in TIME_WAIT state amount to many megabytes of dead
weight in RAM.

Maximum Segment Lifetimes Truncation (MSLT) assigns each TCP session to
a class based on the nearness of the peer. Corresponding to each class
is an MSL, and a session uses the MSL of its class. The classes are
loopback (local host equals remote host), local (local host and remote
host are on the same link/subnet), and remote (local host and remote
host communicate via one or more gateways). Classes corresponding to
nearer peers have lower MSLs by default: 2 seconds for loopback, 10
seconds for local, 60 seconds for remote. Loopback and local sessions
expire more quickly when MSLT is used.

Vestigial Time-Wait (VTW) replaces a TIME_WAIT session's PCB/socket
dead weight with a compact representation of the session, called a
"vestigial PCB". VTW data structures are designed to be very fast and
memory-efficient: for fast insertion and lookup of vestigial PCBs,
the PCBs are stored in a hash table that is designed to minimize the
number of cacheline visits per lookup/insertion. The memory both
for vestigial PCBs and for elements of the PCB hashtable come from
fixed-size pools, and linked data structures exploit this to conserve
memory by representing references with a narrow index/offset from the
start of a pool instead of a pointer. When space for new vestigial PCBs
runs out, VTW makes room by discarding old vestigial PCBs, oldest first.
VTW cooperates with MSLT.

It may help to think of VTW as a "FIN cache" by analogy to the SYN
cache.

A 2.8-GHz Pentium 4 running a test workload that creates TIME_WAIT
sessions as fast as it can is approximately 17% idle when VTW is active
versus 0% idle when VTW is inactive. It has 103 megabytes more free RAM
when VTW is active (approximately 64k vestigial PCBs are created) than
when it is inactive.
 1.158  30-Dec-2009  elad branches: 1.158.4; 1.158.6;
Get the uid from the socket's credentials.
 1.157  16-Sep-2009  pooka Replace a large number of link set based sysctl node creations with
calls from subsystem constructors. Benefits both future kernel
modules and rump.

no change to sysctl nodes on i386/MONOLITHIC & build tested i386/ALL
 1.156  09-Sep-2009  darran Make tcp msl (max segment life) tunable via sysctl net.inet.tcp.msl.
Okayed by tls@.
 1.155  07-Jun-2009  rmind sysctl_inpcblist: fix a lock leak in error path (hi <matt>).
 1.154  17-Apr-2009  elad Pass the lwp argument to in6_pcbbind() for the INET6 PRU_LISTEN and
PRU_CONNECT cases of tcp_usrreq(). It seems they were forgotten a long
time ago.

Similar code in FreeBSD and OpenBSD passes the thread (credentials)/proc.
 1.153  15-Apr-2009  elad Remove a few KAUTH_GENERIC_ISSUSER in favor of more descriptive
alternatives.

Discussed on tech-kern:

http://mail-index.netbsd.org/tech-kern/2009/04/11/msg004798.html

Input from ad@, christos@, dyoung@, tsutsui@.

Okay ad@.
 1.152  11-Mar-2009  mrg like KERN_FILE2: *do* update "needed" when there is no count. we want
userland to know what sort of size to provide..

while here, slightly normalise the previous to init_sysctl.c.
 1.151  18-Feb-2009  yamt sysctl_net_inet_ip_ports: fix ipv6 sysctls.
 1.150  06-Nov-2008  dyoung branches: 1.150.4;
Cosmetic: change (type *)0 to NULL.
 1.149  11-Oct-2008  pooka branches: 1.149.2; 1.149.4; 1.149.6;
Move uidinfo to its own module in kern_uidinfo.c and include in rump.
No functional change to uidinfo.
 1.148  20-Aug-2008  matt Make the sysctl routines take out softnet_lock before dealing with
any data structures.

Change inet6ctlerrmap and zeroin6_addr to const.
 1.147  06-Aug-2008  plunky Convert socket options code to use a sockopt structure
instead of laying everything into an mbuf.

approved by core
 1.146  04-May-2008  thorpej branches: 1.146.2; 1.146.6;
Simplify the interface to netstat_sysctl() and allocate space for
the collated counters using kmem_alloc().

PR kern/38577
 1.145  28-Apr-2008  martin Remove clause 3 and 4 from TNF licenses
 1.144  24-Apr-2008  ad branches: 1.144.2;
Merge the socket locking patch:

- Socket layer becomes MP safe.
- Unix protocols become MP safe.
- Allows protocol processing interrupts to safely block on locks.
- Fixes a number of race conditions.

With much feedback from matt@ and plunky@.
 1.143  23-Apr-2008  thorpej Make IPSEC and FAST_IPSEC stats per-cpu. Use <net/net_stats.h> and
netstat_sysctl().
 1.142  12-Apr-2008  thorpej branches: 1.142.2;
Make IP, TCP, UDP, and ICMP statistics per-CPU. The stats are collated
when the user requests them via sysctl.
 1.141  08-Apr-2008  thorpej Change TCP stats from a structure to an array of uint64_t's.

Note: This is ABI-compatible with the old tcpstat structure; old netstat
binaries will continue to work properly.
 1.140  16-Dec-2007  elad branches: 1.140.6;
Really fix low port allocation, by always passing a valid lwp to
in_pcbbind().

Okay dyoung@.

Note that the network code is another candidate for major cleanup... also
note that this issue is likely to be present in netinet6 code, too.
 1.139  27-Nov-2007  christos branches: 1.139.2; 1.139.6;
require that the options argument is the right size, not that it is greater
or equal to the requested size. Suggested by Matt Thomas.
 1.138  04-Nov-2007  rmind branches: 1.138.2;
Pick the smallest possible TCP window scaling factor that will still allow
us to scale up to sb_max. This might fix the problems with some firewalls.

Taken from FreeBSD (silby).
OK by <dyoung>.
 1.137  19-Sep-2007  dyoung branches: 1.137.4;
1) Introduce a new socket option, (SOL_SOCKET, SO_NOHEADER), that
tells a socket that it should both add a protocol header to tx'd
datagrams and remove the header from rx'd datagrams:

int onoff = 1, s = socket(...);
setsockopt(s, SOL_SOCKET, SO_NOHEADER, &onoff);

2) Add an implementation of (SOL_SOCKET, SO_NOHEADER) for raw IPv4
sockets.

3) Reorganize the protocols' pr_ctloutput implementations a bit.
Consistently return ENOPROTOOPT when an option is unsupported,
and EINVAL if a supported option's arguments are incorrect.
Reorganize the flow of code so that it's more clear how/when
options are passed down the stack until they are handled.

Shorten some pr_ctloutput staircases for readability.

4) Extract common mbuf code into subroutines, add new sockaddr
methods, and introduce a new subroutine, fsocreate(), for reuse
later; use it first in sys_socket():

struct mbuf *m_getsombuf(struct socket *so)

Create an mbuf and make its owner the socket `so'.

struct mbuf *m_intopt(struct socket *so, int val)

Create an mbuf, make its owner the socket `so', put the
int `val' into it, and set its length to sizeof(int).


int fsocreate(..., int *fd)

Create a socket, a la socreate(9), put the socket into the
given LWP's descriptor table, return the descriptor at `fd'
on success.

void *sockaddr_addr(struct sockaddr *sa, socklen_t *slenp)
const void *sockaddr_const_addr(const struct sockaddr *sa, socklen_t *slenp)

Extract a pointer to the address part of a sockaddr. Write
the length of the address part at `slenp', if `slenp' is
not NULL.

socklen_t sockaddr_getlen(const struct sockaddr *sa)

Return the length of a sockaddr. This just evaluates to
sa->sa_len. I only add this for consistency with code that
appears in a portable userland library that I am going to
import.

const struct sockaddr *sockaddr_any(const struct sockaddr *sa)

Return the "don't care" sockaddr in the same family as
`sa'. This is the address a client should sobind(9) if it
does not care the source address and, if applicable, the
port et cetera that it uses.

const void *sockaddr_anyaddr(const struct sockaddr *sa, socklen_t *slenp)

Return the "don't care" sockaddr in the same family as
`sa'. This is the address a client should sobind(9) if it
does not care the source address and, if applicable, the
port et cetera that it uses.
 1.136  02-Aug-2007  rmind branches: 1.136.2; 1.136.4; 1.136.6;
TCP socket buffers automatic sizing - ported from FreeBSD.
http://mail-index.netbsd.org/tech-net/2007/02/04/0006.html

! Disabled by default, marked as experimental. Testers are very needed.
! Someone should thoroughly test this, and improve if possible.

Discussed on <tech-net>:
http://mail-index.netbsd.org/tech-net/2007/07/12/0002.html
Thanks Greg Troxel for comments.

OK by the long silence on <tech-net>.
 1.135  28-Jun-2007  christos branches: 1.135.2;
Handle mapped and scoped ipv6 addresses. From Anon Ymous.
 1.134  26-Jun-2007  xtraeme Protect inet6_ident_core() with #ifdef INET6, fixes building without
options INET6.
 1.133  25-Jun-2007  christos tcpdrop kernel bits (from anon ymous)
 1.132  20-Jun-2007  christos - per socket keepalive settings
- settable connection establishment timeout
 1.131  04-Mar-2007  christos branches: 1.131.2; 1.131.4;
Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.130  06-Dec-2006  yamt branches: 1.130.2;
add some more tcp mowners.
 1.129  10-Nov-2006  yamt branches: 1.129.2; 1.129.4; 1.129.8;
tcp_ctloutput: when called for a socket which is not AF_INET or AF_INET6,
panic rather than returning possibly leaking an mbuf.
 1.128  19-Oct-2006  rpaulo Use a better way to create sysctl subtrees for ECN and Congctl.
Inspired on ABC subtree.
 1.127  19-Oct-2006  yamt implement RFC3465 appropriate byte counting.
from Kentaro A. Kurahone, with minor adjustments by me.
the ack prediction part of the original patch was omitted because
it's a separate change. reviewed by Rui Paulo.
 1.126  16-Oct-2006  rpaulo Export the tcp_do_rfc1948 variable to userland via sysctl.
The code to generate an ISS via an MD5 hash has been present in the
NetBSD kernel since 2001, but it wasn't even exported to userland at
that time. It was agreed on tech-net with the original author <thorpej>
that we should let the user decide if he wants to enable it or not.
Not enabled by default.
 1.125  13-Oct-2006  elad Introduce KAUTH_REQ_NETWORK_SOCKET_CANSEE. Since we're not gonna be having
credentials on sockets, at least not anytime soon, this is a way to check
if we can "look" at a socket. Later on when (and if) we do have socket
credentials, the interface usage remains the same because we pass the
socket.

This also fixes sysctl for inet/inet6 pcblist.
 1.124  09-Oct-2006  rpaulo Modular (I tried ;-) TCP congestion control API. Whenever certain conditions
happen in the TCP stack, this interface calls the specified callback to
handle the situation according to the currently selected congestion
control algorithm.
A new sysctl node was created: net.inet.tcp.congctl.{available,selected}
with obvious meanings.
The old net.inet.tcp.newreno MIB was removed.
The API is discussed in tcp_congctl(9).

In the near future, it will be possible to selected a congestion control
algorithm on a per-socket basis.

Discussed on tech-net and reviewed by <yamt>.
 1.123  05-Oct-2006  tls Protect calls to pool_put/pool_get that may occur in interrupt context
with spl used to protect other allocations and frees, or datastructure
element insertion and removal, in adjacent code.

It is almost unquestionably the case that some of the spl()/splx() calls
added here are superfluous, but it really seems wrong to see:

s=splfoo();
/* frob data structure */
splx(s);
pool_put(x);

and if we think we need to protect the first operation, then it is hard
to see why we should not think we need to protect the next. "Better
safe than sorry".

It is also almost unquestionably the case that I missed some pool
gets/puts from interrupt context with my strategy for finding these
calls; use of PR_NOWAIT is a strong hint that a pool may be used from
interrupt context but many callers in the kernel pass a "can wait/can't
wait" flag down such that my searches might not have found them. One
notable area that needs to be looked at is pf.

See also:

http://mail-index.netbsd.org/tech-kern/2006/07/19/0003.html
http://mail-index.netbsd.org/tech-kern/2006/07/19/0009.html
 1.122  13-Sep-2006  elad branches: 1.122.2;
Don't use KAUTH_RESULT_* where it's not applicable.
Prompted by yamt@.
 1.121  08-Sep-2006  elad First take at security model abstraction.

- Add a few scopes to the kernel: system, network, and machdep.

- Add a few more actions/sub-actions (requests), and start using them as
opposed to the KAUTH_GENERIC_ISSUSER place-holders.

- Introduce a basic set of listeners that implement our "traditional"
security model, called "bsd44". This is the default (and only) model we
have at the moment.

- Update all relevant documentation.

- Add some code and docs to help folks who want to actually use this stuff:

* There's a sample overlay model, sitting on-top of "bsd44", for
fast experimenting with tweaking just a subset of an existing model.

This is pretty cool because it's *really* straightforward to do stuff
you had to use ugly hacks for until now...

* And of course, documentation describing how to do the above for quick
reference, including code samples.

All of these changes were tested for regressions using a Python-based
testsuite that will be (I hope) available soon via pkgsrc. Information
about the tests, and how to write new ones, can be found on:

http://kauth.linbsd.org/kauthwiki

NOTE FOR DEVELOPERS: *PLEASE* don't add any code that does any of the
following:

- Uses a KAUTH_GENERIC_ISSUSER kauth(9) request,
- Checks 'securelevel' directly,
- Checks a uid/gid directly.

(or if you feel you have to, contact me first)

This is still work in progress; It's far from being done, but now it'll
be a lot easier.

Relevant mailing list threads:

http://mail-index.netbsd.org/tech-security/2006/01/25/0011.html
http://mail-index.netbsd.org/tech-security/2006/03/24/0001.html
http://mail-index.netbsd.org/tech-security/2006/04/18/0000.html
http://mail-index.netbsd.org/tech-security/2006/05/15/0000.html
http://mail-index.netbsd.org/tech-security/2006/08/01/0000.html
http://mail-index.netbsd.org/tech-security/2006/08/25/0000.html

Many thanks to YAMAMOTO Takashi, Matt Thomas, and Christos Zoulas for help
stablizing kauth(9).

Full credit for the regression tests, making sure these changes didn't break
anything, goes to Matt Fleming and Jaime Fournier.

Happy birthday Randi! :)
 1.120  05-Sep-2006  rpaulo branches: 1.120.2;
Import of TCP ECN algorithm for congestion control.
Both available for IPv4 and IPv6.
Basic implementation test results are available at
http://netbsd-soc.sourceforge.net/projects/ecn/testresults.html.

Work sponsored by the Google Summer of Code project 2006.
Special thanks to Kentaro Kurahone, Allen Briggs and Matt Thomas for their
help, comments and support during the project.
 1.119  23-Jul-2006  ad Use the LWP cached credentials where sane.
 1.118  16-Jul-2006  elad get rid of CURTAIN() macro. inline the last use of it, together
with a nice XXX comment (assigned to me of course) that we should
be doing this differently.
 1.117  14-May-2006  elad integrate kauth.
 1.116  15-Apr-2006  christos Move pf2 assignment after we've assigned pf.
 1.115  14-Apr-2006  christos Coverity CID 1154: Prevent NULL deref.
 1.114  14-Apr-2006  christos Coverity CID 738: Fix the query size vs. result returning setup.
 1.113  11-Dec-2005  christos branches: 1.113.4; 1.113.6; 1.113.8; 1.113.10; 1.113.12;
merge ktrace-lwp.
 1.112  15-Nov-2005  dsl Pass the current process structure to in_pcbconnect() so that it can
pass it to in_pcbbind() so that can allocate a low numbered port
if setsockopt() has been used to set IP_PORTRANGE to IP_PORTRANGE_LOW.
While there, fail in_pcbconnect() if the in_pcbbind() fails - rather
than sending the request out from a port of zero.
This has been largely broken since the socket option was added in 1998.
 1.111  07-Sep-2005  elad branches: 1.111.6;
Implement curtain for AF_INET{,6} PCB lists.
 1.110  06-Sep-2005  rpaulo Correct SYSCTL_DESCR for tcp.debx.
 1.109  06-Sep-2005  rpaulo Implement tcp.inet{,6}.tcp{,6}.(debug|debx) when TCP_DEBUG is set. They
can be used to ``transliterate protocol trace'' like trpt(8) does.
 1.108  10-Aug-2005  yamt move {tcp,udp}_do_loopback_cksum back to tcp/udp
so that they can be referenced by ipv6.
 1.107  05-Aug-2005  elad Add sysctls for IP, ICMP, TCP, and UDP statistics.
 1.106  20-Jun-2005  atatat branches: 1.106.2;
Change the rest of the sysctl subsystem to use const consistently.
The __UNCONST macro is now used only where necessary and the RW macros
are gone. Most of the changes here are consumers of the
sysctl_createv(9) interface that now takes a pair of const pointers
which used not to be.
 1.105  09-Jun-2005  atatat Properly fix the constipated lossage wrt -Wcast-qual and the sysctl
code. I know it's not the prettiest code, but it seems to work rather
well in spite of itself.
 1.104  29-May-2005  christos - add const
- remove bogus casts
- avoid nested variables
 1.103  07-May-2005  christos PR/30154: YAMAMOTO Takashi: tcp_close locking botch
chgsbsize() as mentioned in the PR can be called from an interrupt context
via tcp_close(). Avoid calling uid_find() in chgsbsize().
- Instead of storing so_uid in struct socketvar, store *so_uidinfo
- Add a simple lock to struct uidinfo.
 1.102  05-Apr-2005  kurahone Added sysctl tunable limits for the number of maximum SACK holes
per connection and per system.

Idea taken from FreeBSD.
 1.101  30-Mar-2005  yamt s of sack is selective, not selection. pointed by Michael Eriksson.
 1.100  11-Mar-2005  atatat branches: 1.100.2;
Revert the change that made kern.file2 and net.*.*.pcblist into nodes
instead of structs. It had other deleterious side-effects that are
rather nasty. Another solution must be found.
 1.99  10-Mar-2005  atatat Make this build without INET6 xor INET (hah!) again.
 1.98  10-Mar-2005  atatat Change types of kern.file2 and net.*.*.pcblist to NODE
 1.97  09-Mar-2005  atatat Add the following nodes to the sysctl tree:

net.local.stream.pcblist
net.local.dgram.pcblist
net.inet.tcp.pcblist
net.inet.udp.pcblist
net.inet.raw.pcblist
net.inet6.tcp6.pcblist
net.inet6.udp6.pcblist
net.inet6.raw6.pcblist

which allow retrieval of the pcbs in use for those protocols. The
struct involved is 32/64 bit clean and incorporates parts of struct
inpcb, struct unpcb, a bit of struct tcpcb, and two socket addresses.
 1.96  06-Mar-2005  yamt update SYSCTL_DESCR; sack is implemented.
 1.95  02-Mar-2005  mycroft Copyright maintenance.
 1.94  03-Feb-2005  perry ANSIfy function declarations
 1.93  15-Dec-2004  thorpej branches: 1.93.2; 1.93.4;
Don't perform checksums on loopback interfaces. They can be reenabled with
the net.inet.*.do_loopback_cksum sysctl.

Approved by: groo
 1.92  25-May-2004  atatat Sysctl descriptions under net subtree (net.key not done)
 1.91  18-May-2004  itojun fix MD5 signature support to actually validate inbound signature, and
drop packet if fails.
 1.90  25-Apr-2004  jonathan Initial commit of a port of the FreeBSD implementation of RFC 2385
(MD5 signatures for TCP, as used with BGP). Credit for original
FreeBSD code goes to Bruce M. Simpson, with FreeBSD sponsorship
credited to sentex.net. Shortening of the setsockopt() name
attributed to Vincent Jardin.

This commit is a minimal, working version of the FreeBSD code, as
MFC'ed to FreeBSD-4. It has received minimal testing with a ttcp
modified to set the TCP-MD5 option; BMS's additions to tcpdump-current
(tcpdump -M) confirm that the MD5 signatures are correct. Committed
as-is for further testing between a NetBSD BGP speaker (e.g., quagga)
and industry-standard BGP speakers (e.g., Cisco, Juniper).


NOTE: This version has two potential flaws. First, I do see any code
that verifies recieved TCP-MD5 signatures. Second, the TCP-MD5
options are internally padded and assumed to be 32-bit aligned. A more
space-efficient scheme is to pack all TCP options densely (and
possibly unaligned) into the TCP header ; then do one final padding to
a 4-byte boundary. Pre-existing comments note that accounting for
TCP-option space when we add SACK is yet to be done. For now, I'm
punting on that; we can solve it properly, in a way that will handle
SACK blocks, as a separate exercise.

In case a pullup to NetBSD-2 is requested, this adds sys/netipsec/xform_tcp.c
,and modifies:

sys/net/pfkeyv2.h,v 1.15
sys/netinet/files.netinet,v 1.5
sys/netinet/ip.h,v 1.25
sys/netinet/tcp.h,v 1.15
sys/netinet/tcp_input.c,v 1.200
sys/netinet/tcp_output.c,v 1.109
sys/netinet/tcp_subr.c,v 1.165
sys/netinet/tcp_usrreq.c,v 1.89
sys/netinet/tcp_var.h,v 1.109
sys/netipsec/files.netipsec,v 1.3
sys/netipsec/ipsec.c,v 1.11
sys/netipsec/ipsec.h,v 1.7
sys/netipsec/key.c,v 1.11
share/man/man4/tcp.4,v 1.16
lib/libipsec/pfkey.c,v 1.20
lib/libipsec/pfkey_dump.c,v 1.17
lib/libipsec/policy_token.l,v 1.8
sbin/setkey/parse.y,v 1.14
sbin/setkey/setkey.8,v 1.27
sbin/setkey/token.l,v 1.15

Note that the preceding two revisions to tcp.4 will be
required to cleanly apply this diff.
 1.89  20-Apr-2004  matt export tcpstates for _KERNEL and remove tcp_usrreq.c's incorrect
declartion.
 1.88  29-Mar-2004  atatat Make these compile without INET. tcp_input probably needs a lot more
work...
 1.87  24-Mar-2004  atatat branches: 1.87.2;
Tango on sysctl_createv() and flags. The flags have all been renamed,
and sysctl_createv() now uses more arguments.
 1.86  04-Dec-2003  atatat Dynamic sysctl.

Gone are the old kern_sysctl(), cpu_sysctl(), hw_sysctl(),
vfs_sysctl(), etc, routines, along with sysctl_int() et al. Now all
nodes are registered with the tree, and nodes can be added (or
removed) easily, and I/O to and from the tree is handled generically.

Since the nodes are registered with the tree, the mapping from name to
number (and back again) can now be discovered, instead of having to be
hard coded. Adding new nodes to the tree is likewise much simpler --
the new infrastructure handles almost all the work for simple types,
and just about anything else can be done with a small helper function.

All existing nodes are where they were before (numerically speaking),
so all existing consumers of sysctl information should notice no
difference.

PS - I'm sorry, but there's a distinct lack of documentation at the
moment. I'm working on sysctl(3/8/9) right now, and I promise to
watch out for buses.
 1.85  22-Oct-2003  thorpej Rather than zeroing a tcpcb structure and filling in all the fields
individually, create a tcpcb template pre-initialized (and pre-zero'd)
with the static and mostly-static tcpcb parameters. The template is
now copied into the new tcpcb, which zeros and initializes most of the
tcpcb in one pass. The template is kept up-to-date as TCP sysctl
variables are changed.

Combined with the previous sb_max change, TCP socket creation is now
25% faster.
 1.84  29-Sep-2003  tls Increase default socket-buffer sizes from 16K to 32K. This increases
throughput significantly in a wide variety of test cases, including
local gigabit ethernet with both jumbo and standard frames,
transcontinental (U.S.) connections with e2e bandwidths ranging from
10Mbit/sec to 155Mbit/sec, and on a variety of test connections
between the NetBSD Project public servers and machines in Australia.

The impact of this change is less dramatic for high-delay connections
when Path MTU is in use but still measurable.

For optimal performance on local gigabit networks, a higher socket
buffer size (at least 64K) will still yield a substantial improvement
in performance, but 32K gets us most of the way there in my test
cases, with only a cost of _doubling_ memory use per socket rather
than _quadrupling_ it.

N.B. Windows NT, at least since Win2k SP2, uses a default socket buffer
size (or their analogue thereof) of 64K, which is a useful data
point.
 1.83  04-Sep-2003  itojun revamp inpcb/in6pcb so that they are more aligned with each other.
in6pcb lookup now uses hash(9).
 1.82  07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22364, verified by myself.
 1.81  29-Jun-2003  fvdl branches: 1.81.2;
Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
 1.80  29-Jun-2003  simonb Fix a nit in a comment.
 1.79  28-Jun-2003  darrenr Pass lwp pointers throughtout the kernel, as required, so that the lwpid can
be inserted into ktrace records. The general change has been to replace
"struct proc *" with "struct lwp *" in various function prototypes, pass
the lwp through and use l_proc to get the process pointer when needed.

Bump the kernel rev up to 1.6V
 1.78  26-Jun-2003  christos abuse the mib instead of abusing the new pointer. Idea from simon burge.
It allows the tcp_sysctl_ident to run by non-super-users. No backwards
compatibility provided.
 1.77  23-Jun-2003  martin Make sure to include opt_foo.h if a defflag option FOO is used.
 1.76  19-Apr-2003  christos PR/2352: Tor Egge: Add sysctl to get uid of connected socket.
 1.75  26-Feb-2003  matt Add MBUFTRACE kernel option.
Do a little mbuf rework while here. Change all uses of MGET*(*, M_WAIT, *)
to m_get*(M_WAIT, *). These are not performance critical and making them
call m_get saves considerable space. Add m_clget analogue of MCLGET and
make corresponding change for M_WAIT uses.
Modify netinet, gem, fxp, tulip, nfs to support MBUFTRACE.
Begin to change netstat to use sysctl.
 1.74  22-Oct-2002  simonb Guard use of "ostate" with #ifdef TCP_DEBUG in tcp_usrreq().
Don't put semicolons at the end of "#define token value".
 1.73  03-Jul-2002  thorpej Rename sbappend_stream() to sbappendstream(), per suggestion from
Jonathan Stone.
 1.72  03-Jul-2002  thorpej Make insertion of data into socket buffers O(C):
* Keep pointers to the first and last mbufs of the last record in the
socket buffer.
* Use the sb_lastrecord pointer in the sbappend*() family of functions
to avoid traversing the packet chain to find the last record.
* Add a new sbappend_stream() function for stream protocols which
guarantee that there will never be more than one record in the
socket buffer. This function uses the sb_mbtail pointer to perform
the data insertion. Make TCP use sbappend_stream().

On a profiling run, this makes sbappend of a TCP transmission using
a 1M socket buffer go from 50% of the time to .02% of the time.

Thanks to Bill Sommerfeld and YAMAMOTO Takashi for their debugging
assistance!
 1.71  09-Jun-2002  itojun whitespace
 1.70  11-Mar-2002  martin branches: 1.70.4;
KNFify my last change.
 1.69  28-Feb-2002  martin Enforce a lower bound of 32 for tcp_mssdflt.

This avoids kernel crashes when we don't handle nonsensial values
like 0 gracefully. Better check here once beforehand than having to
check for non meaningful values in time critical paths (like tcp_output).

Fixes PR 15709.
 1.68  20-Nov-2001  lukem - replace "defopt" with "defparam" for options which must take a value,
as config(8) will warn for value-less defparam options
- minor whitespace/formatting cleanup
- consolidate opt_tcp_recvspace.h and opt_tcp_sendspace.h into opt_tcp_space.h
 1.67  13-Nov-2001  lukem add RCSIDs
 1.66  29-Oct-2001  simonb Don't need to include <uvm/uvm_extern.h> just to include <sys/sysctl.h>
anymore.
 1.65  10-Sep-2001  thorpej branches: 1.65.2;
Split tcp_timers() into multiple functions, one for each timer,
and call it directly from tcp_slowtimo() (via a table) rather
than going through tcp_userreq().

This will allow us to call TCP timers directly from callouts,
in a future revision.
 1.64  25-Jul-2001  itojun branches: 1.64.2;
allocate ipsec policy buffer attached to pcb in in*_pcballoc, before
giving anyone accesses to pcb (do not reveal an inconsistent ones).
sync with kame
 1.63  08-Jul-2001  abs branches: 1.63.2;
Rename TCPDEBUG to TCP_DEBUG, defopt TCP_DEBUG and TCP_NDEBUG, and
make all usage of tcp_trace dependent on TCP_DEBUG - resulting in
a 31K saving on an INET enabled i386 kernel.
 1.62  03-Jul-2001  itojun call in{,6}_pcbpurgeif0() before in{,6}_purgeif().
 1.61  20-Mar-2001  thorpej Two changes, designed to make us even more resilient against TCP
ISS attacks (which we already fend off quite well).

1. First-cut implementation of RFC1948, Steve Bellovin's cryptographic
hash method of generating TCP ISS values. Note, this code is experimental
and disabled by default (experimental enough that I don't export the
variable via sysctl yet, either). There are a couple of issues I'd
like to discuss with Steve, so this code should only be used by people
who really know what they're doing.

2. Per a recent thread on Bugtraq, it's possible to determine a system's
uptime by snooping the RFC1323 TCP timestamp options sent by a host; in
4.4BSD, timestamps are created by incrementing the tcp_now variable
at 2 Hz; there's even a company out there that uses this to determine
web server uptime. According to Newsham's paper "The Problem With
Random Increments", while NetBSD's TCP ISS generation method is much
better than the "random increment" method used by FreeBSD and OpenBSD,
it is still theoretically possible to mount an attack against NetBSD's
method if the attacker knows how many times the tcp_iss_seq variable
has been incremented. By not leaking uptime information, we can make
that much harder to determine. So, we avoid the leak by giving each
TCP connection a timebase of 0.
 1.60  11-Feb-2001  itojun branches: 1.60.2;
make sure we call tcp_output() only if we have template.
 1.59  18-Jan-2001  jdolecek constify
 1.58  11-Dec-2000  itojun make sure t_family has the correct protocol family, after connect(2)
and/or bind(2). sync with kame
 1.57  17-Oct-2000  itojun allow INET6-less build.
From: smd@ebone.net (Sean Doran)
 1.56  17-Oct-2000  itojun be more friendly with INET-less build.
XXX we need to do more to do a working INET-less build
 1.55  06-Oct-2000  enami Cosmetic changes to previous commit; indent break statement sanely.
 1.54  06-Oct-2000  enami Just call matching purgeif/pcbpurgeif routine for the protocol family.
Without this, if a v6 address is placed before a v4 address in if_addrlist,
a PRU_PURGEIF request for v6 tcp protocol purges also v4 addresses and,
as a result, if_detach fails to request PRU_PURGEIF for v4 protocols
other than tcp.
 1.53  28-Jul-2000  itojun nuke the following sysctl variables. "ppsratelimit" should work better.
need to recompile sbin/sysctl after updating /usr/include.
net.inet.tcp.rstratelimit
net.inet.icmp.errratelimit
net.inet6.icmp6.errratelimit
 1.52  28-Jun-2000  mrg <vm/vm.h> -> <uvm/uvm_extern.h>
 1.51  05-Jun-2000  itojun branches: 1.51.2;
pass struct proc * down to udp6_output and in6_pcbbind.
 1.50  22-May-2000  itojun branches: 1.50.2;
disallow negative numbers for ratelimit interval (tcp, icmp, icmp6).
 1.49  30-Mar-2000  augustss Remove register declarations.
 1.48  15-Feb-2000  thorpej Add support for rate-limiting RSTs sent in response to no socket for
an incoming packet. Default minimum interval is 10ms. The interval
is changeable via the "net.inet.tcp.rstratelimit" sysctl variable.
 1.47  04-Feb-2000  itojun avoid calling in6_control(SIOCDIFADDR_IN6) from interrupt context.
it is not supposed to work.
logging fix: add "\n" to some of log() in in6_prefix.c.

improve in6_ifdetach(). now almost all structure depend on ifnet
will be cleared up.
possible loose ends:
- cached route_in6 in static varaiables needs to be cleared as well
- there are ifaddr manipulation without reference counting,
which should be fixed
we still see panics after card removal, though... not sure what is left.

(sync with kame)
 1.46  02-Feb-2000  thorpej PRU_PURGEADDR -> PRU_PURGEIF, per a discussion w/ itojun. In the IPv4
and IPv6 code, also use this to traverse PCB tables, looking for cached
routes referencing the dying ifnet, forcing them to be refreshed.
 1.45  01-Feb-2000  thorpej First-draft if_detach() implementation, originally from Bill Studnemund,
although this version has been changed somewhat:
- reference counting on ifaddrs isn't as complete as Bill's original
work was. This is hard to get right, and we should attack one
protocol at a time.
- This doesn't do reference counting or dynamic allocation of ifnets yet.
- This version introduces a new PRU -- PRU_PURGEADDR, which is used to
purge an ifaddr from a protocol. The old method Bill used didn't work
on all protocols, and it only worked on some because it was Very Lucky.

This mostly works ... i.e. works for my USB Ethernet, except for a dangling
ifaddr reference left by the IPv6 code; have not yet tracked this down.
 1.44  31-Jan-2000  itojun bring in latest KAME ipsec tree.
- interop issues in ipcomp is fixed
- padding type (after ESP) is configurable
- key database memory management (need more fixes)
- policy specification is revisited

XXX m->m_pkthdr.rcvif is still overloaded - hope to fix it soon
 1.43  13-Dec-1999  itojun sync IPv6 part with latest KAME tree. IPsec part is left unmodified
due to massive changes in KAME side.
- IPv6 output goes through nd6_output
- faith can capture IPv4 packets as well - you can run IPv4-to-IPv6 translator
using heavily modified DNS servers
- per-interface statistics (required for IPv6 MIB)
- interface autoconfig is revisited
- udp input handling has a big change for mapped address support.
- introduce in4_cksum() for non-overwriting checksumming
- introduce m_pulldown()
- neighbor discovery cleanups/improvements
- netinet/in.h strictly conforms to RFC2553 (no extra defs visible to userland)
- IFA_STATS is fixed a bit (not tested)
- and more more more.

TODO:
- cleanup os-independency #ifdef
- avoid rcvif dual use (for IPsec) to help ifdetach

(sorry for jumbo commit, I can't separate this any more...)
 1.42  09-Jul-1999  thorpej branches: 1.42.2; 1.42.8;
defopt IPSEC and IPSEC_ESP (both into opt_ipsec.h).
 1.41  02-Jul-1999  itojun avoid "variable not initialized" warnings on some of the platforms.
 1.40  01-Jul-1999  itojun IPv6 kernel code, based on KAME/NetBSD 1.4, SNAP kit 19990628.
(Sorry for a big commit, I can't separate this into several pieces...)
Pls check sys/netinet6/TODO and sys/netinet6/IMPLEMENTATION for details.

- sys/kern: do not assume single mbuf, accept chained mbuf on passing
data from userland to kernel (or other way round).
- "midway" ATM card: ATM PVC pseudo device support, like those done in ALTQ
package (ftp://ftp.csl.sony.co.jp/pub/kjc/).
- sys/netinet/tcp*: IPv4/v6 dual stack tcp support.
- sys/netinet/{ip6,icmp6}.h, sys/net/pfkeyv2.h: IETF document assumes those
file to be there so we patch it up.
- sys/netinet: IPsec additions are here and there.
- sys/netinet6/*: most of IPv6 code sits here.
- sys/netkey: IPsec key management code
- dev/pci/pcidevs: regen

In my understanding no code here is subject to export control so it
should be safe.
 1.39  10-Sep-1998  tv branches: 1.39.8; 1.39.10;
egcs {brace} warning fix
 1.38  10-Sep-1998  mouse Create tcp.keepidle, tcp.keepintvl, tcp.keepcnt, tcp.slowhz sysctls.
 1.37  06-May-1998  thorpej Use macros from tcp_timer.h to manipulate TCP timers, so that their
implementation can be changed easily.
 1.36  29-Apr-1998  matt New TCP reassembly code. The new code reduces the memory needed by
out-of-order packets and builds the infrastructure needed for sending
SACK blocks (to be added shortly).
 1.35  13-Apr-1998  kml Fix to ensure that the correct MSS is advertised for loopback
TCP connections by using the MTU of the interface. Also added
a knob, mss_ifmtu, to force all connections to use the MTU of
the interface to calculate the advertised MSS.
 1.34  19-Feb-1998  thorpej Update copyright (sigh, should have done this long ago).
 1.33  05-Jan-1998  thorpej Finishing merging 4.4BSD-Lite2 netinet. At this point, the only changes
left were SCCS IDs and Copyright dates.
 1.32  05-Jan-1998  thorpej From 4.4BSD-Lite2 (noted by Frank van der Linden):
so_linger is used as an argument to tsleep(), so was stuffed with
clockticks for the TCP linger time. However, so_linger is set directly from
l_linger if the linger time is specified, and l_linger is seconds (although
this is not currently documented anywhere). Fix this to set the TCP
linger time in seconds, and multiply so_linger by hz when tsleep() is
called to actually perform the linger.
 1.31  13-Dec-1997  thorpej After further examination of traces of bulk transfers (with help from
Kevin Lahey), undo the "defer window update until next delayed ACK".
 1.30  11-Dec-1997  thorpej Implement an infrastructure to allow larger initial congestion windows.
The sysctl'able variable "tcp_init_win", when set to 0, selects an
auto-tuning algorithm for selecting the initial window, based on transmit
segment size, per discussion in the IETF tcpimpl working group.

Default initial window is still 1 segment, but will soon become 2 segments,
per discussion in tcpimpl.
 1.29  11-Dec-1997  thorpej In the PRU_RCVD entry point, if TF_DELACK is set, don't send the window
update now, since it will be sent within 200ms when the delayed ACK is
sent. Instrument how many hits we get on this optimization.
 1.28  08-Nov-1997  kml TCP MSS fixes to provide cleaner slow-start and recovery.
 1.27  10-Oct-1997  explorer branches: 1.27.2;
Add hooks to use the kernel random system to generate TCP sequence numbers.
 1.26  28-Jul-1997  thorpej branches: 1.26.2;
Generate dependencies for the TCP_SENDSPACE and TCP_RECVSPACE options.
 1.25  28-Jul-1997  thorpej Make the following tunable via sysctl, inspired by BSD/OS:
- tcp_sendspace
- tcp_recvspace
- tcp_mssdflt
- tcp_syn_cache_limit
- tcp_syn_bucket_limit
- tcp_syn_cache_timer
 1.24  12-Jun-1997  kleink Eliminate a superflouus `if' statement: when detaching the TCP protocol from
a socket, just calling tcp_disconnect() on the tcpcb will do the right thing.
From Thorsten Frueauf <frueauf@ira.uka.de> and W. Richard Stevens in PR/3738
resp. TCP/IP Illustrated, Vol. 2.
 1.23  23-May-1996  mycroft Make sure the control mbufs are freed in all cases.
 1.22  23-May-1996  mycroft Minor changes.
 1.21  22-May-1996  mycroft Pass a proc pointer down to the usrreq and pcbbind functions for PRU_ATTACH, PRU_BIND and
PRU_CONTROL. The usrreq interface really needs to be split up, but this will have to wait.
Remove SS_PRIV completely.
 1.20  13-Feb-1996  christos branches: 1.20.4;
netinet prototypes
 1.19  31-Jan-1996  mycroft Add a comment describing the previous.
 1.18  31-Jan-1996  mycroft If we close from FIN_WAIT_2 state, make sure we don't leave the socket
around forever if we don't get a final FIN. From Arne Juul, PR 1659.
 1.17  30-Sep-1995  thorpej branches: 1.17.2;
Implement tcp_sysctl(). Add a sysctl option to enable/disable RFC1323
extensions to TCP. From John Kohl <jtk@kolvir.blrc.ma.us>.
 1.16  12-Aug-1995  mycroft splnet --> splsoftnet
 1.15  12-Jun-1995  mycroft Various cleanup, including:
* Convert several data structures to use queue.h.
* Split in_pcbnotify() into two parts; one for notifying a specific PCB, and
one for notifying all PCBs for a particular foreign address.
 1.14  13-Apr-1995  cgd be a bit more careful and explicit with types. (basically a large no-op.)
 1.13  21-Mar-1995  glass Default linger time was 120 clock ticks instead of the intended
2 minutes.
[Bug pointed out by Wright/Stevens in TCP/IP Illustrated Vol II]
 1.12  14-Oct-1994  mycroft Don't return received data to the user until the initial handshake is complete.
Also use TCPS_HAVEESTABLISHED() in a few other places.
 1.11  13-Oct-1994  mycroft Increase the default window size to 16k.
 1.10  29-Jun-1994  cgd branches: 1.10.2;
New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD'
 1.9  13-May-1994  mycroft Update to 4.4-Lite networking code, with a few local changes.
 1.8  10-Jan-1994  mycroft Change the counters to be all the same type -- u_long.
 1.7  08-Jan-1994  mycroft Remove some extra prototypes.
 1.6  08-Jan-1994  mycroft Prototypes.
 1.5  18-Dec-1993  mycroft Canonicalize all #includes.
 1.4  15-Jun-1993  cgd branches: 1.4.4;
bump sendspace and recvspace up to 8k each; rod says
these should be safe values...
 1.3  22-May-1993  cgd add include of select.h if necessary for protos, or delete if extraneous
 1.2  18-May-1993  cgd make kernel select interface be one-stop shopping & clean it all up.
 1.1  21-Mar-1993  cgd branches: 1.1.1;
Initial revision
 1.1.1.3  05-Jan-1998  thorpej Import sys/netinet from 4.4BSD-Lite2 for reference purposes.
 1.1.1.2  05-Jan-1998  thorpej Import sys/netinet from 4.4BSD-Lite for reference purposes.
 1.1.1.1  21-Mar-1993  cgd initial import of 386bsd-0.1 sources
 1.4.4.1  24-Sep-1993  mycroft Make all files using spl*() #include cpu.h. Changes from trunk.
 1.10.2.1  13-Oct-1994  mycroft Update from trunk.
 1.17.2.1  02-Feb-1996  mycroft Bring in changes for mondo patch 2.
 1.20.4.1  11-Dec-1996  mycroft From trunk:
Eliminate SS_PRIV; instead, pass down a proc pointer to the usrreq methods
that need it.
Fix numerous memory leaks and bogus return values.
 1.26.2.1  14-Oct-1997  thorpej Update marc-pcmcia branch from trunk.
 1.27.2.2  09-May-1998  mycroft Pull up patch from kml.
 1.27.2.1  08-Nov-1997  thorpej Pull up from trunk: TCP MSS fixes to provide cleaner slow-start and recovery.
(kml)
 1.39.10.3  30-Nov-1999  itojun bring in latest KAME (as of 19991130, KAME/NetBSD141) into kame branch
just for reference purposes.
This commit includes 1.4 -> 1.4.1 sync for kame branch.

The branch does not compile at all (due to the lack of ALTQ and some other
source code). Please do not try to modify the branch, this is just for
referenre purposes.

synchronization to latest KAME will take place on HEAD branch soon.
 1.39.10.2  06-Jul-1999  itojun KAME/NetBSD 1.4, SNAP kit 1999/07/05.
NOTE: this branch is just for reference purposes (i.e. for taking cvs diff).
do not touch anything on the branch. actual work must be done on HEAD branch.
 1.39.10.1  28-Jun-1999  itojun KAME/NetBSD 1.4 SNAP kit, dated 19990628.

NOTE: this branch (kame) is used just for refernce. this may not compile
due to multiple reasons.
 1.39.8.2  02-Aug-1999  thorpej Update from trunk.
 1.39.8.1  01-Jul-1999  thorpej Sync w/ -current.
 1.42.8.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.42.2.4  27-Mar-2001  bouyer Sync with HEAD.
 1.42.2.3  11-Feb-2001  bouyer Sync with HEAD.
 1.42.2.2  13-Dec-2000  bouyer Sync with HEAD (for UBC fixes).
 1.42.2.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
 1.50.2.1  22-Jun-2000  minoura Sync w/ netbsd-1-5-base.
 1.51.2.2  09-Oct-2000  enami Pullup rev. 1.54 and 1.55 (approved by jhawk):
 1.51.2.1  16-Aug-2000  itojun pullup (approved by releng-1-5)

switch from net.inet*.*.*ratelimit to net.inet*.*.ppslimit.

(tags are rough estimate - we had some try-and-error in main trunc)
sys/netinet/icmp6.h 1.9 -> 1.11
sys/netinet/icmp_var.h 1.15 -> 1.17
sys/netinet/in_proto.c 1.39 -> 1.42
sys/netinet/ip_icmp.c 1.50 -> 1.51, 1.52 -> 1.54
sys/netinet/tcp_input.c 1.111 -> 1.112, 1.115 -> 1.117
sys/netinet/tcp_usrreq.c 1.52 -> 1.53
sys/netinet/tcp_var.h 1.72 -> 1.75
sys/netinet6/icmp6.c 1.34 -> 1.35, 1.36 -> 1.38
sys/netinet6/in6_proto.c 1.17 -> 1.19
 1.60.2.9  11-Nov-2002  nathanw Catch up to -current
 1.60.2.8  01-Aug-2002  nathanw Catch up to -current.
 1.60.2.7  20-Jun-2002  nathanw Catch up to -current.
 1.60.2.6  01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.60.2.5  08-Jan-2002  nathanw Catch up to -current.
 1.60.2.4  14-Nov-2001  nathanw Catch up to -current.
 1.60.2.3  21-Sep-2001  nathanw Catch up to -current.
 1.60.2.2  24-Aug-2001  nathanw Catch up with -current.
 1.60.2.1  09-Apr-2001  nathanw Catch up with -current.
 1.63.2.6  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.63.2.5  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.63.2.4  16-Mar-2002  jdolecek Catch up with -current.
 1.63.2.3  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.63.2.2  13-Sep-2001  thorpej Update the kqueue branch to HEAD.
 1.63.2.1  03-Aug-2001  lukem update to -current
 1.64.2.1  01-Oct-2001  fvdl Catch up with -current.
 1.65.2.1  12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.70.4.2  15-Jul-2002  gehenna catch up with -current.
 1.70.4.1  20-Jun-2002  gehenna catch up with -current.
 1.81.2.11  11-Dec-2005  christos Sync with head.
 1.81.2.10  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.81.2.9  01-Apr-2005  skrll Sync with HEAD.
 1.81.2.8  08-Mar-2005  skrll Sync with HEAD.
 1.81.2.7  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.81.2.6  04-Feb-2005  skrll Sync with HEAD.
 1.81.2.5  18-Dec-2004  skrll Sync with HEAD.
 1.81.2.4  21-Sep-2004  skrll Fix the sync with head I botched.
 1.81.2.3  18-Sep-2004  skrll Sync with HEAD.
 1.81.2.2  03-Aug-2004  skrll Sync with HEAD
 1.81.2.1  02-Jul-2003  darrenr Apply the aborted ktrace-lwp changes to a specific branch. This is just for
others to review, I'm concerned that patch fuziness may have resulted in some
errant code being generated but I'll look at that later by comparing the diff
from the base to the branch with the file I attempt to apply to it. This will,
at the very least, put the changes in a better context for others to review
them and attempt to tinker with removing passing of 'struct lwp' through
the kernel.
 1.87.2.1  28-May-2004  tron Pull up revision 1.92 (requested by atatat in ticket #391):
Sysctl descriptions under net subtree (net.key not done)
 1.93.4.2  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.93.4.1  12-Feb-2005  yamt sync with head.
 1.93.2.1  29-Apr-2005  kent sync with -current
 1.100.2.2  06-May-2005  tron Pull up revision 1.102 (requested by kurahone in ticket #199):
Added sysctl tunable limits for the number of maximum SACK holes
per connection and per system.
Idea taken from FreeBSD.
 1.100.2.1  01-May-2005  tron Pull up revision 1.101 (requested by yamt in ticket #221):
s of sack is selective, not selection. pointed by Michael Eriksson.
 1.106.2.7  21-Jan-2008  yamt sync with head
 1.106.2.6  07-Dec-2007  yamt sync with head
 1.106.2.5  15-Nov-2007  yamt sync with head.
 1.106.2.4  27-Oct-2007  yamt sync with head.
 1.106.2.3  03-Sep-2007  yamt sync with head.
 1.106.2.2  30-Dec-2006  yamt sync with head.
 1.106.2.1  21-Jun-2006  yamt sync with head.
 1.111.6.1  22-Nov-2005  yamt sync with head.
 1.113.12.1  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.113.10.3  06-May-2006  christos - Move kauth_cred_t declaration to <sys/types.h>
- Cleanup struct ucred; forward declarations that are unused.
- Don't include <sys/kauth.h> in any header, but include it in the c files
that need it.

Approved by core.
 1.113.10.2  19-Apr-2006  elad sync with head.
 1.113.10.1  08-Mar-2006  elad Adapt to kernel authorization KPI.
 1.113.8.3  14-Sep-2006  yamt sync with head.
 1.113.8.2  11-Aug-2006  yamt sync with head
 1.113.8.1  24-May-2006  yamt sync with head.
 1.113.6.2  01-Jun-2006  kardel Sync with head.
 1.113.6.1  22-Apr-2006  simonb Sync with head.
 1.113.4.3  09-Sep-2006  rpaulo sync with head
 1.113.4.2  05-Feb-2006  rpaulo in6pcb -> inpcb merge.
 1.113.4.1  05-Feb-2006  rpaulo <netinet6/in6_pcb.h> went away. Bye!
 1.120.2.2  12-Jan-2007  ad Sync with head.
 1.120.2.1  18-Nov-2006  ad Sync with head.
 1.122.2.2  10-Dec-2006  yamt sync with head.
 1.122.2.1  22-Oct-2006  yamt sync with head
 1.129.8.1  05-Sep-2009  bouyer Pull up following revision(s) (requested by mlelstv in ticket #1358):
sys/netinet/tcp_usrreq.c: revision 1.148 via patch
Make the sysctl routines take raise to splnet() before dealing with
any data structures.
 1.129.4.1  03-Jun-2008  skrll Sync with netbsd-4.
 1.129.2.3  05-Sep-2009  bouyer Pull up following revision(s) (requested by mlelstv in ticket #1358):
sys/netinet/tcp_usrreq.c: revision 1.148 via patch
Make the sysctl routines take raise to splnet() before dealing with
any data structures.
 1.129.2.2  29-Jan-2008  pavel Pull up following revision(s) (requested by joerg in ticket #1057):
sys/netinet/tcp_usrreq.c: revision 1.134
Protect inet6_ident_core() with #ifdef INET6, fixes building without
options INET6.
 1.129.2.1  21-Jan-2008  bouyer Pull up following revision(s) (requested by ghen in ticket #1039):
sys/netinet/tcp_var.h: revision 1.148
distrib/sets/lists/comp/mi: revision 1.1035
distrib/sets/lists/man/mi: revision 1.1010
usr.sbin/tcpdrop/Makefile: revision 1.1
usr.sbin/tcpdrop/tcpdrop.c: revision 1.1 - 1.3
usr.sbin/tcpdrop/tcpdrop.8: revision 1.1
usr.sbin/Makefile: revision 1.228 via patch
sys/netinet/tcp_usrreq.c: revision 1.133
distrib/sets/lists/base/mi: revision 1.712
Import tcpdrop(8) from OpenBSD
 1.130.2.1  12-Mar-2007  rmind Sync with HEAD.
 1.131.4.1  11-Jul-2007  mjf Sync with head.
 1.131.2.3  09-Oct-2007  ad Sync with head.
 1.131.2.2  20-Aug-2007  ad Sync with HEAD.
 1.131.2.1  15-Jul-2007  ad Sync with head.
 1.135.2.1  15-Aug-2007  skrll Sync with HEAD.
 1.136.6.2  02-Aug-2007  rmind TCP socket buffers automatic sizing - ported from FreeBSD.
http://mail-index.netbsd.org/tech-net/2007/02/04/0006.html

! Disabled by default, marked as experimental. Testers are very needed.
! Someone should thoroughly test this, and improve if possible.

Discussed on <tech-net>:
http://mail-index.netbsd.org/tech-net/2007/07/12/0002.html
Thanks Greg Troxel for comments.

OK by the long silence on <tech-net>.
 1.136.6.1  02-Aug-2007  rmind file tcp_usrreq.c was added on branch matt-mips64 on 2007-08-02 02:42:42 +0000
 1.136.4.2  09-Jan-2008  matt sync with HEAD
 1.136.4.1  06-Nov-2007  matt sync with HEAD
 1.136.2.3  03-Dec-2007  joerg Sync with HEAD.
 1.136.2.2  04-Nov-2007  jmcneill Sync with HEAD.
 1.136.2.1  02-Oct-2007  joerg Sync with HEAD.
 1.137.4.1  13-Nov-2007  bouyer Sync with HEAD
 1.138.2.2  27-Dec-2007  mjf Sync with HEAD.
 1.138.2.1  08-Dec-2007  mjf Sync with HEAD.
 1.139.6.1  02-Jan-2008  bouyer Sync with HEAD
 1.139.2.1  26-Dec-2007  ad Sync with head.
 1.140.6.3  17-Jan-2009  mjf Sync with HEAD.
 1.140.6.2  28-Sep-2008  mjf Sync with HEAD.
 1.140.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.142.2.1  18-May-2008  yamt sync with head.
 1.144.2.5  11-Mar-2010  yamt sync with head
 1.144.2.4  16-Sep-2009  yamt sync with head
 1.144.2.3  20-Jun-2009  yamt sync with head
 1.144.2.2  04-May-2009  yamt sync with head.
 1.144.2.1  16-May-2008  yamt sync with head.
 1.146.6.2  13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.146.6.1  19-Oct-2008  haad Sync with HEAD.
 1.146.2.1  18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.149.6.1  17-Jun-2009  bouyer branches: 1.149.6.1.2;
Pull up following revision(s) (requested by rmind in ticket #812):
sys/netinet/tcp_usrreq.c: revision 1.155
sysctl_inpcblist: fix a lock leak in error path (hi <matt>).
 1.149.6.1.2.1  21-Apr-2010  matt sync to netbsd-5
 1.149.4.2  26-Sep-2009  snj Pull up following revision(s) (requested by darran in ticket #950):
sys/netinet/tcp_input.c: revision 1.299
sys/netinet/tcp_usrreq.c: revision 1.156
sys/netinet/tcp_var.h: revision 1.161
Make tcp msl (max segment life) tunable via sysctl net.inet.tcp.msl.
Okayed by tls@.
 1.149.4.1  17-Jun-2009  bouyer Pull up following revision(s) (requested by rmind in ticket #812):
sys/netinet/tcp_usrreq.c: revision 1.155
sysctl_inpcblist: fix a lock leak in error path (hi <matt>).
 1.149.2.3  28-Apr-2009  skrll Sync with HEAD.
 1.149.2.2  03-Mar-2009  skrll Sync with HEAD.
 1.149.2.1  19-Jan-2009  skrll Sync with HEAD.
 1.150.4.2  23-Jul-2009  jym Sync with HEAD.
 1.150.4.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.158.6.1  06-Jun-2011  jruoho Sync with HEAD.
 1.158.4.2  12-Jun-2011  rmind sync with head
 1.158.4.1  31-May-2011  rmind sync with head
 1.159.2.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.160.6.2  05-Apr-2012  mrg sync to latest -current.
 1.160.6.1  18-Feb-2012  mrg merge to -current.
 1.160.2.3  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.160.2.2  30-Oct-2012  yamt sync with head
 1.160.2.1  17-Apr-2012  yamt sync with head
 1.162.2.3  14-Dec-2013  bouyer Pull up following revision(s) (requested by kefren in ticket #992):
sys/netinet/tcp_usrreq.c: revision 1.170
Update TCP CB with new values on rfc1323 and mssdflt sysctl updates
=46rom yasuoka-cj7TXg5MjN14Eiagz67IpQ@public.gmane.org in kern/44254
 1.162.2.2  20-Oct-2013  bouyer Pull up following revision(s) (requested by spz in ticket #967):
sys/netinet/tcp_usrreq.c: revision 1.168
PR/48098: Brian Marcotte: Avoid kernel assertion for embryonic sockets that
don't have credentials yet.
XXX: pullup-6
 1.162.2.1  17-Mar-2012  bouyer branches: 1.162.2.1.4; 1.162.2.1.6;
Pull up following revision(s) (requested by jruoho in ticket #124):
sys/netinet/tcp_usrreq.c: revision 1.163
PR/46077: M. Nunberg: Stat should not fial on connecting socket.
 1.162.2.1.6.1  20-Oct-2013  bouyer Pull up following revision(s) (requested by spz in ticket #967):
sys/netinet/tcp_usrreq.c: revision 1.168
PR/48098: Brian Marcotte: Avoid kernel assertion for embryonic sockets that
don't have credentials yet.
XXX: pullup-6
 1.162.2.1.4.1  20-Oct-2013  bouyer Pull up following revision(s) (requested by spz in ticket #967):
sys/netinet/tcp_usrreq.c: revision 1.168
PR/48098: Brian Marcotte: Avoid kernel assertion for embryonic sockets that
don't have credentials yet.
XXX: pullup-6
 1.165.2.3  03-Dec-2017  jdolecek update from HEAD
 1.165.2.2  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.165.2.1  23-Jun-2013  tls resync from head
 1.166.4.5  18-May-2014  rmind sync with head
 1.166.4.4  17-Oct-2013  rmind Eliminate some of the splsoftnet() calls, misc clean up.
 1.166.4.3  23-Sep-2013  rmind - Add some initial locking to the IPv4 PCB.
- Rename inpcb_lookup_*() routines to be more accurate and add comments.
- Add some comments about connection life-cycle WRT socket layer.
 1.166.4.2  28-Aug-2013  rmind Checkpoint work in progress:
- Initial split of the protocol user-request method into the following
methods: pr_attach, pr_detach and pr_generic for old the pr_usrreq.
- Adjust socreate(9) and sonewconn(9) to call pr_attach without the
socket lock held (as a preparation for the locking scheme adjustment).
- Adjust all pr_attach routines to assert that PCB is not set.
- Sprinkle various comments, document some routines and their locking.
- Remove M_PCB, replace with kmem(9).
- Fix few bugs spotted on the way.
 1.166.4.1  17-Jul-2013  rmind Checkpoint work in progress:
- Move PCB structures under __INPCB_PRIVATE, adjust most of the callers
and thus make IPv4 PCB structures mostly opaque. Any volunteers for
merging in6pcb with inpcb (see rpaulo-netinet-merge-pcb branch)?
- Move various global vars to the modules where they belong, make them static.
- Some preliminary work for IPv4 PCB locking scheme.
- Make raw IP code mostly MP-safe. Simplify some of it.
- Rework "fast" IP forwarding (ipflow) code to be mostly MP-safe. It should
run from a software interrupt, rather than hard.
- Rework tun(4) pseudo interface to be MP-safe.
- Work towards making some other interfaces more strict.
 1.171.2.1  10-Aug-2014  tls Rebase.
 1.200.2.4  29-Jan-2019  msaitoh Pull up following revision(s) (requested by martin in ticket #1676):
sys/net/link_proto.c 1.37
sys/netatalk/ddp_usrreq.c 1.72
sys/netbt/hci_socket.c 1.46
sys/netbt/l2cap_socket.c 1.36
sys/netbt/rfcomm_socket.c 1.38
sys/netbt/sco_socket.c 1.38
sys/netinet/tcp_usrreq.c 1.223 via patch
sys/netinet6/raw_ip6.c 1.173
sys/netinet6/udp6_usrreq.c 1.146
sys/netmpls/mpls_proto.c 1.32
sys/netnatm/natm.c patch

Fix memory leaks pointed out by Ilja Van Sprundel: all
sendoob() functions are expted to free both passed
mbuf chains.
 1.200.2.3  11-Sep-2017  snj Pull up following revision(s) (requested by jdolecek in ticket #1498):
sys/netinet/tcp_usrreq.c: revision 1.216
add some more getsockopt(2) params
 1.200.2.2  21-Feb-2015  martin branches: 1.200.2.2.2; 1.200.2.2.6;
Pull up following revision(s) (requested by he in ticket #530):
sys/netinet/tcp_output.c: revision 1.180
sys/netinet/tcp_input.c: revision 1.336
sys/netinet/tcp_usrreq.c: revision 1.203
share/man/man4/tcp.4: revision 1.30
sys/netinet/tcp.h: revision 1.31
sys/netinet/tcp_subr.c: revision 1.258
sys/netinet/tcp_var.h: revision 1.176
sys/netinet/tcp_var.h: revision 1.177
sys/sys/param.h: bump revision

Port over the TCP_INFO socket option from FreeBSD, originally from
the Linux 2.6 TCP API. This permits the caller to query certain information
about a TCP connection, and is used by pkgsrc's net/iperf3 test program
if available.

This extends struct tcbcb with three fields to count retransmits,
out-of-sequence receives and zero window announcements, and will
therefore warrant a kernel revision bump (done separately).

Change the new counter variables in struct tcpcb to uint32_t, as
per christos' comments.
 1.200.2.1  17-Jan-2015  martin Pull up following revision(s) (requested by maxv in ticket #427):
sys/compat/svr4/svr4_schedctl.c: revision 1.8
sys/netinet/tcp_timer.c: revision 1.88
sys/miscfs/genfs/layer_vfsops.c: revision 1.45
sys/compat/svr4/svr4_ioctl.c: revision 1.37
sys/ufs/chfs/chfs_vfsops.c: revision 1.14
sys/miscfs/fdesc/fdesc_vfsops.c: revision 1.91
sys/compat/linux/arch/i386/linux_ptrace.c: revision 1.30
sys/compat/common/kern_time_50.c: revision 1.28
sys/netinet6/ip6_forward.c: revision 1.74
sys/miscfs/umapfs/umap_vnops.c: revision 1.57
sys/compat/svr4/svr4_fcntl.c: revision 1.74
distrib/sets/lists/comp/mi: revision 1.1931
sys/netinet6/udp6_output.c: revision 1.46
sys/fs/puffs/puffs_compat.c: revision 1.3
sys/fs/udf/udf_rename.c: revision 1.11
sys/compat/svr4/svr4_filio.c: revision 1.24
sys/fs/udf/udf_rename.c: revision 1.12
sys/netinet/tcp_usrreq.c: revision 1.202
sys/miscfs/umapfs/umap_subr.c: revision 1.29
sys/compat/linux/common/linux_fadvise64.c: revision 1.3
sys/netinet/if_atm.c: revision 1.34
sys/miscfs/procfs/procfs_subr.c: revision 1.106
sys/miscfs/genfs/layer_subr.c: revision 1.37
sys/netinet/tcp_sack.c: revision 1.30
sys/compat/freebsd/freebsd_misc.c: revision 1.33
sys/compat/freebsd/freebsd_file.c: revision 1.33
sys/ufs/chfs/chfs_vnode.c: revision 1.12
sys/compat/svr4/svr4_ttold.c: revision 1.34
sys/compat/linux/common/linux_file.c: revision 1.114
sys/compat/linux/arch/mips/linux_machdep.c: revision 1.43
sys/compat/linux/common/linux_signal.c: revision 1.76
sys/compat/common/compat_util.c: revision 1.46
sys/compat/linux/arch/arm/linux_ptrace.c: revision 1.18
sys/compat/svr4/svr4_sockio.c: revision 1.36
sys/compat/linux/arch/arm/linux_machdep.c: revision 1.32
sys/compat/svr4/svr4_signal.c: revision 1.66
sys/kern/kern_exec.c: revision 1.410
sys/fs/puffs/puffs_vfsops.c: revision 1.115
sys/compat/svr4/svr4_exec_elf64.c: revision 1.15
sys/compat/linux/arch/i386/linux_machdep.c: revision 1.159
sys/compat/linux/arch/alpha/linux_machdep.c: revision 1.50
sys/compat/linux32/common/linux32_misc.c: revision 1.24
sys/netinet/in_pcb.c: revision 1.153
sys/sys/malloc.h: revision 1.116
sys/compat/common/if_43.c: revision 1.9
share/man/man9/Makefile: revision 1.380
sys/netinet/tcp_vtw.c: revision 1.12
sys/miscfs/umapfs/umap_vfsops.c: revision 1.95
sys/ufs/ext2fs/ext2fs_vfsops.c: revision 1.186
sys/compat/common/uipc_syscalls_43.c: revision 1.46
sys/ufs/ext2fs/ext2fs_vnops.c: revision 1.115
sys/fs/puffs/puffs_msgif.c: revision 1.97
sys/compat/svr4/svr4_ipc.c: revision 1.27
sys/compat/linux/common/linux_exec.c: revision 1.117
sys/ufs/ext2fs/ext2fs_readwrite.c: revision 1.66
sys/netinet/tcp_output.c: revision 1.179
sys/compat/svr4/svr4_termios.c: revision 1.28
sys/fs/udf/udf_strat_bootstrap.c: revision 1.4
sys/fs/puffs/puffs_subr.c: revision 1.67
sys/fs/puffs/puffs_node.c: revision 1.36
sys/miscfs/overlay/overlay_vnops.c: revision 1.21
sys/fs/cd9660/cd9660_node.c: revision 1.34
sys/netinet/raw_ip.c: revision 1.146
sys/sys/mallocvar.h: revision 1.13
sys/miscfs/overlay/overlay_vfsops.c: revision 1.63
share/man/man9/malloc.9: revision 1.50
sys/netinet6/dest6.c: revision 1.18
sys/compat/linux/common/linux_uselib.c: revision 1.33
sys/compat/linux/common/linux_socket.c: revision 1.120
share/man/man9/malloc.9: revision 1.51
sys/netinet/tcp_subr.c: revision 1.257
sys/compat/linux/common/linux_socketcall.c: revision 1.45
sys/compat/linux/common/linux_fadvise64_64.c: revision 1.3
sys/compat/freebsd/freebsd_ipc.c: revision 1.17
sys/compat/linux/common/linux_misc_notalpha.c: revision 1.109
sys/compat/linux/arch/alpha/linux_pipe.c: revision 1.17
sys/netinet6/in6_pcb.c: revision 1.132
sys/netinet6/in6_ifattach.c: revision 1.94
sys/compat/svr4/svr4_exec_elf32.c: revision 1.15
sys/miscfs/nullfs/null_vfsops.c: revision 1.90
sys/fs/cd9660/cd9660_util.c: revision 1.12
sys/compat/linux/arch/powerpc/linux_machdep.c: revision 1.48
sys/compat/freebsd/freebsd_exec_elf32.c: revision 1.20
sys/miscfs/procfs/procfs_vfsops.c: revision 1.94
sys/compat/linux/arch/powerpc/linux_ptrace.c: revision 1.28
sys/compat/linux/common/linux_sched.c: revision 1.67
sys/compat/linux/common/linux_exec_aout.c: revision 1.67
sys/compat/linux/common/linux_pipe.c: revision 1.67
sys/compat/linux/common/linux_llseek.c: revision 1.34
sys/compat/linux/arch/mips/linux_ptrace.c: revision 1.10
Do not uselessly include <sys/malloc.h>.
Cleanup:
- remove struct kmembuckets (dead)
- correctly deadify MALLOC_XX
- remove MALLOC_DEFINE_LIMIT and MALLOC_JUSTDEFINE_LIMIT (dead)
- remove malloc_roundup(), malloc_type_setlimit(), MALLOC_DEFINE_LIMIT()
and MALLOC_JUSTDEFINE_LIMIT() from man 9 malloc
New sentence, new line. Bump date for previous.
Obsolete malloc_roundup(9), malloc_type_setlimit(9) and MALLOC_DEFINE_LIMIT(9)
man pages.
 1.200.2.2.6.1  29-Jan-2019  msaitoh Pull up following revision(s) (requested by martin in ticket #1676):
sys/net/link_proto.c 1.37
sys/netatalk/ddp_usrreq.c 1.72
sys/netbt/hci_socket.c 1.46
sys/netbt/l2cap_socket.c 1.36
sys/netbt/rfcomm_socket.c 1.38
sys/netbt/sco_socket.c 1.38
sys/netinet/tcp_usrreq.c 1.223 via patch
sys/netinet6/raw_ip6.c 1.173
sys/netinet6/udp6_usrreq.c 1.146
sys/netmpls/mpls_proto.c 1.32
sys/netnatm/natm.c patch

Fix memory leaks pointed out by Ilja Van Sprundel: all
sendoob() functions are expted to free both passed
mbuf chains.
 1.200.2.2.2.1  29-Jan-2019  msaitoh Pull up following revision(s) (requested by martin in ticket #1676):
sys/net/link_proto.c 1.37
sys/netatalk/ddp_usrreq.c 1.72
sys/netbt/hci_socket.c 1.46
sys/netbt/l2cap_socket.c 1.36
sys/netbt/rfcomm_socket.c 1.38
sys/netbt/sco_socket.c 1.38
sys/netinet/tcp_usrreq.c 1.223 via patch
sys/netinet6/raw_ip6.c 1.173
sys/netinet6/udp6_usrreq.c 1.146
sys/netmpls/mpls_proto.c 1.32
sys/netnatm/natm.c patch

Fix memory leaks pointed out by Ilja Van Sprundel: all
sendoob() functions are expted to free both passed
mbuf chains.
 1.202.2.7  28-Aug-2017  skrll Sync with HEAD
 1.202.2.6  05-Feb-2017  skrll Sync with HEAD
 1.202.2.5  05-Dec-2016  skrll Sync with HEAD
 1.202.2.4  29-May-2016  skrll Sync with HEAD
 1.202.2.3  22-Sep-2015  skrll Sync with HEAD
 1.202.2.2  06-Jun-2015  skrll Sync with HEAD
 1.202.2.1  06-Apr-2015  skrll Sync with HEAD
 1.212.2.2  20-Mar-2017  pgoyette Sync with HEAD
 1.212.2.1  07-Jan-2017  pgoyette Sync with HEAD. (Note that most of these changes are simply $NetBSD$
tag issues.)
 1.213.2.1  21-Apr-2017  bouyer Sync with HEAD
 1.214.6.2  29-Jan-2019  msaitoh Pull up following revision(s) (requested by martin in ticket #1175):
sys/net/link_proto.c 1.37
sys/netatalk/ddp_usrreq.c 1.72
sys/netbt/hci_socket.c 1.46
sys/netbt/l2cap_socket.c 1.36
sys/netbt/rfcomm_socket.c 1.38
sys/netbt/sco_socket.c 1.38
sys/netinet/sctp_usrreq.c 1.14
sys/netinet/tcp_usrreq.c 1.223
sys/netinet6/raw_ip6.c 1.173
sys/netinet6/sctp6_usrreq.c 1.17
sys/netinet6/udp6_usrreq.c 1.146
sys/netmpls/mpls_proto.c 1.32
sys/netnatm/natm.c patch

Fix memory leaks pointed out by Ilja Van Sprundel: all
sendoob() functions are expted to free both passed
mbuf chains.
 1.214.6.1  25-Aug-2017  snj Pull up following revision(s) (requested by jdolecek in ticket #216):
sys/netinet/tcp_usrreq.c: revision 1.216
add some more getsockopt(2) params
 1.216.2.5  26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.216.2.4  26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.216.2.3  21-May-2018  pgoyette Sync with HEAD
 1.216.2.2  16-Apr-2018  pgoyette Sync with HEAD, resolve some conflicts
 1.216.2.1  30-Mar-2018  pgoyette Resolve conflicts between branch and HEAD
 1.219.2.3  21-Apr-2020  martin Sync with HEAD
 1.219.2.2  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.219.2.1  10-Jun-2019  christos Sync with HEAD
 1.224.4.1  10-Sep-2019  martin Pull up following revision(s) (requested by maxv in ticket #193):

sys/netinet/tcp_timer.h: revision 1.30
sys/netinet/tcp_input.c: revision 1.415
sys/netinet/tcp_usrreq.c: revision 1.225
sys/netinet/tcp_subr.c: revision 1.283

Clamp tcp timer quantities to reasonable ranges.
 1.225.6.1  20-Apr-2020  bouyer Sync with HEAD
 1.227.2.2  03-Apr-2021  thorpej Sync with HEAD.
 1.227.2.1  14-Dec-2020  thorpej Sync w/ HEAD.

RSS XML Feed