Home | History | Annotate | Download | only in netinet
History log of /src/sys/netinet/udp_var.h
RevisionDateAuthorComments
 1.48  03-Feb-2021  roy Sprinkle CTASSERT to enforce on-wire layout without __packed
 1.47  03-Feb-2021  roy Remove __packed from various network structures

They are already network aligned and adding the __packed attribute
just causes needless compiler warnings about accssing members of packed
objects.
 1.46  20-Aug-2020  riastradh branches: 1.46.2;
[ozaki-r] Changes to the kernel core for wireguard
 1.45  14-Sep-2018  maxv Use non-variadic function pointer in protosw::pr_input.
 1.44  22-Aug-2018  msaitoh - Cleanup for dynamic sysctl:
- Remove unused *_NAMES macros for sysctl.
- Remove unused *_MAXID for sysctls.
- Move CTL_MACHDEP sysctl definitions for m68k into m68k/include/cpu.h and
use them on all m68k machines.
 1.43  08-Feb-2018  maxv branches: 1.43.2; 1.43.4;
Style, and remove prototype of udp_sysctl (does not exist).
 1.42  10-Aug-2017  ryo Add support IP_PKTINFO for sendmsg(2).

The source address or output interface can be specified by adding IP_PKTINFO
to the control part of the message on a SOCK_DGRAM or SOCK_RAW socket.

Reviewed by ozaki-r@ and christos@. thanks.
 1.41  20-Jan-2016  riastradh branches: 1.41.10;
Give proper prototype to udp_output.
 1.40  18-May-2014  rmind branches: 1.40.4;
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.39  02-Jan-2014  pooka branches: 1.39.2;
Allow kernels compiled with INET+INET6 to be booted as IPv4-only or IPv6-only.
 1.38  22-Jun-2012  christos branches: 1.38.2; 1.38.4;
PR/46602: Move the rfc6056 port randomization to the IP layer.
 1.37  24-Sep-2011  christos branches: 1.37.2;
Add inet4 part of the rfc6056 code contributed by Vlad Balan as part of
Google SoC-2011
 1.36  06-Aug-2008  plunky Convert socket options code to use a sockopt structure
instead of laying everything into an mbuf.

approved by core
 1.35  12-Apr-2008  thorpej branches: 1.35.4; 1.35.6; 1.35.10;
Make IP, TCP, UDP, and ICMP statistics per-CPU. The stats are collated
when the user requests them via sysctl.
 1.34  06-Apr-2008  thorpej Change UDP stats from a structure to an array of uint64_t's.

Note: This is ABI-compatible with the old icmpstat structure; old netstat
binaries will continue to work properly.
 1.33  25-Dec-2007  perry branches: 1.33.6;
Convert many of the uses of __attribute__ to equivalent
__packed, __unused and __dead macros from cdefs.h
 1.32  17-Feb-2007  dyoung branches: 1.32.18; 1.32.24; 1.32.26; 1.32.30;
KNF: de-__P, bzero -> memset, bcmp -> memcmp. Remove extraneous
parentheses in return statements.

Cosmetic: don't open-code TAILQ_FOREACH().

Cosmetic: change types of variables to avoid oodles of casts: in
in6_src.c, avoid casts by changing several route_in6 pointers
to struct route pointers. Remove unnecessary casts to caddr_t
elsewhere.

Pave the way for eliminating address family-specific route caches:
soon, struct route will not embed a sockaddr, but it will hold
a reference to an external sockaddr, instead. We will set the
destination sockaddr using rtcache_setdst(). (I created a stub
for it, but it isn't used anywhere, yet.) rtcache_free() will
free the sockaddr. I have extracted from rtcache_free() a helper
subroutine, rtcache_clear(). rtcache_clear() will "forget" a
cached route, but it will not forget the destination by releasing
the sockaddr. I use rtcache_clear() instead of rtcache_free()
in rtcache_update(), because rtcache_update() is not supposed
to forget the destination.

Constify:

1 Introduce const accessor for route->ro_dst, rtcache_getdst().

2 Constify the 'dst' argument to ifnet->if_output(). This
led me to constify a lot of code called by output routines.

3 Constify the sockaddr argument to protosw->pr_ctlinput. This
led me to constify a lot of code called by ctlinput routines.

4 Introduce const macros for converting from a generic sockaddr
to family-specific sockaddrs, e.g., sockaddr_in: satocsin6,
satocsin, et cetera.
 1.31  11-Dec-2005  christos branches: 1.31.26;
merge ktrace-lwp.
 1.30  10-Dec-2005  elad Multiple inclusion protection, as suggested by christos@ on tech-kern@
few days ago.
 1.29  10-Aug-2005  yamt move {tcp,udp}_do_loopback_cksum back to tcp/udp
so that they can be referenced by ipv6.
 1.28  05-Aug-2005  elad Add sysctls for IP, ICMP, TCP, and UDP statistics.
 1.27  12-Feb-2005  manu branches: 1.27.6;
Add support for IPsec Network Address Translator traversal (NAT-T), as
described by RFC 3947 and 3948.
 1.26  21-Dec-2004  yamt branches: 1.26.2; 1.26.4;
factor out receive side tcp/udp checksum handling code so that they
can be used by eg. packet filters.

reviewed by Christos Zoulas on tech-net@.
(slightly tweaked since then to make tcp and udp similar.)
 1.25  15-Dec-2004  thorpej Don't perform checksums on loopback interfaces. They can be reenabled with
the net.inet.*.do_loopback_cksum sysctl.

Approved by: groo
 1.24  21-Apr-2004  itojun no space between function name and paren: foo (blah) -> foo(blah)
 1.23  18-Apr-2004  matt De __P()
 1.22  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.21  29-Jun-2003  fvdl branches: 1.21.2;
Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
 1.20  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.19  30-Jun-2002  thorpej Changes to allow the IPv4 and IPv6 layers to align headers themseves,
as necessary:
* Implement a new mbuf utility routine, m_copyup(), is is like
m_pullup(), except that it always prepends and copies, rather
than only doing so if the desired length is larger than m->m_len.
m_copyup() also allows an offset into the destination mbuf, which
allows space for packet headers, in the forwarding case.
* Add *_HDR_ALIGNED_P() macros for IP, IPv6, ICMP, and IGMP. These
macros expand to 1 if __NO_STRICT_ALIGNMENT is defined, so that
architectures which do not have strict alignment constraints don't
pay for the test or visit the new align-if-needed path.
* Use the new macros to check if a header needs to be aligned, or to
assert that it already is, as appropriate.

Note: This code is still somewhat experimental. However, the new
code path won't be visited if individual device drivers continue
to guarantee that packets are delivered to layer 3 already properly
aligned (which are rules that are already in use).
 1.18  12-May-2002  matt branches: 1.18.2;
Eliminate commons.
 1.17  20-Nov-1999  thorpej branches: 1.17.6; 1.17.8;
Add the `packed' attribute to structures which describe wire protocol data.
 1.16  19-Nov-1999  bouyer Update protocoles and interfaces stats counters to 64bit.
RTM_IFINFO is now 0xf, 0xe is RTM_OIFINFO which returns the old (if_msghdr14)
struct with 32bit counters (binary compat, conditioned on COMPAT_14).
Same for sysctl: node 3 is renamed NET_RT_OIFLIST, NET_RT_IFLIST is now node 4.
Change rt_msg1() to add an mbuf to the mbuf chain instead of just panic()
when the message is larger than MHLEN.
 1.15  10-Feb-1998  perry branches: 1.15.12; 1.15.14; 1.15.20;
add/cleanup multiple inclusion protection.
 1.14  28-Jul-1997  thorpej Make the following tunable via sysctl, inspired by BSD/OS:
- udp_sendspace
- udp_recvspace
 1.13  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.12  13-Feb-1996  christos branches: 1.12.4;
netinet prototypes
 1.11  31-Jan-1996  mycroft Build a hash table of PCBs. Hash function needs tweaking.
 1.10  21-Nov-1995  cgd make netinet work on systems where pointers and longs are 64 bits
(like the alpha). Biggest problem: IP headers were overlayed with
structure which included pointers, and which therefore didn't overlay
properly on 64-bit machines. Solution: instead of threading pointers
through IP header overlays, add a "queue element" structure to do
the threading, and point it at the ip headers.
 1.9  12-Jun-1995  mycroft branches: 1.9.2;
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.8  26-Mar-1995  jtc KERNEL -> _KERNEL
 1.7  29-Jun-1994  cgd New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD'
 1.6  13-May-1994  mycroft Update to 4.4-Lite networking code, with a few local changes.
 1.5  10-Jan-1994  mycroft Change the counters to be all the same type -- u_long.
 1.4  08-Jan-1994  mycroft Prototypes.
 1.3  20-May-1993  cgd more rcsid additions and file header cleanups
 1.2  19-Apr-1993  mycroft Add consistent multiple-inclusion protection.
 1.1  21-Mar-1993  cgd branches: 1.1.1;
Initial revision
 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.9.2.1  02-Feb-1996  mycroft Bring in changes for mondo patch 2.
 1.12.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.15.20.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.15.14.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
 1.15.12.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.15.12.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.15.12.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.17.8.2  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.17.8.1  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.17.6.2  01-Aug-2002  nathanw Catch up to -current.
 1.17.6.1  20-Jun-2002  nathanw Catch up to -current.
 1.18.2.1  15-Jul-2002  gehenna catch up with -current.
 1.21.2.9  11-Dec-2005  christos Sync with head.
 1.21.2.8  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.21.2.7  15-Feb-2005  skrll Sync with HEAD.
 1.21.2.6  17-Jan-2005  skrll Sync with HEAD.
 1.21.2.5  18-Dec-2004  skrll Sync with HEAD.
 1.21.2.4  21-Sep-2004  skrll Fix the sync with head I botched.
 1.21.2.3  18-Sep-2004  skrll Sync with HEAD.
 1.21.2.2  03-Aug-2004  skrll Sync with HEAD
 1.21.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.26.4.1  12-Feb-2005  yamt sync with head.
 1.26.2.1  29-Apr-2005  kent sync with -current
 1.27.6.3  21-Jan-2008  yamt sync with head
 1.27.6.2  26-Feb-2007  yamt sync with head.
 1.27.6.1  21-Jun-2006  yamt sync with head.
 1.31.26.1  27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.32.30.1  02-Jan-2008  bouyer Sync with HEAD
 1.32.26.1  26-Dec-2007  ad Sync with head.
 1.32.24.1  18-Feb-2008  mjf Sync with HEAD.
 1.32.18.1  09-Jan-2008  matt sync with HEAD
 1.33.6.2  28-Sep-2008  mjf Sync with HEAD.
 1.33.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.35.10.1  19-Oct-2008  haad Sync with HEAD.
 1.35.6.1  18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.35.4.1  04-May-2009  yamt sync with head.
 1.37.2.2  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.37.2.1  30-Oct-2012  yamt sync with head
 1.38.4.4  18-May-2014  rmind sync with head
 1.38.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.38.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.38.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.38.2.2  03-Dec-2017  jdolecek update from HEAD
 1.38.2.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.39.2.1  10-Aug-2014  tls Rebase.
 1.40.4.2  28-Aug-2017  skrll Sync with HEAD
 1.40.4.1  19-Mar-2016  skrll Sync with HEAD
 1.41.10.1  21-Dec-2017  snj Pull up following revision(s) (requested by ryo in ticket #445):
distrib/sets/lists/debug/mi: revision 1.222
distrib/sets/lists/tests/mi: revision 1.760
share/man/man4/ip.4: revision 1.38
sys/netinet/in.c: revision 1.207
sys/netinet/in.h: revision 1.101
sys/netinet/in_pcb.c: revision 1.179
sys/netinet/in_pcb.h: revision 1.64
sys/netinet/ip_output.c: revision 1.284, 1.286
sys/netinet/ip_var.h: revision 1.120-1.121
sys/netinet/raw_ip.c: revision 1.166-1.167
sys/netinet/udp_usrreq.c: revision 1.235-1.236
sys/netinet/udp_var.h: revision 1.42
tests/net/net/Makefile: revision 1.21
tests/net/net/t_pktinfo_send.c: revision 1.1-1.2
Add support IP_PKTINFO for sendmsg(2).
The source address or output interface can be specified by adding IP_PKTINFO
to the control part of the message on a SOCK_DGRAM or SOCK_RAW socket.
Reviewed by ozaki-r@ and christos@. thanks.
--
As is the case with IPV6_PKTINFO, IP_PKTINFO can be sent without EADDRINUSE
even if the UDP address:port in use is specified.
 1.43.4.1  10-Jun-2019  christos Sync with HEAD
 1.43.2.2  30-Sep-2018  pgoyette Ssync with HEAD
 1.43.2.1  06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.46.2.1  03-Apr-2021  thorpej Sync with HEAD.

RSS XML Feed