Age | Commit message (Collapse) | Author |
|
|
|
This would create a weird set of states in TCP. FreeBSD has the
same check.
Issue found by and OK guenther@
|
|
all in one place. Saves one additional #ifdef, no functional change.
OK mikeb@
|
|
unsplice() the sockets before soidle() goes to splsoftnet. In this
case, unsplice() was called twice. So check wether splicing still
exists within the splsoftnet protection.
Uvm fault in sounsplice() reported by keith at scott-land dot net.
OK claudio@
|
|
spliced and routed to loopback. The content of the pf header in
the mbuf was keeping the divert information on its way. Reinitialize
the whole packet header of the mbuf and remove the mbuf tags when
the packet gets spliced.
OK claudio@ markus@
|
|
the code relevant for UDP from sosend() and soreceive() into somove().
That allows the kernel to directly transfer the UDP data from one
socket to another.
OK claudio@
|
|
has been reached. This creates a read event on the spliced source
socket that can be noticed with select(2). So the kernel passes
control to the relay process immediately. This could be used to
log the end of an http request within a persistent connection.
deraadt@ reyk@ mikeb@ like the idea
|
|
as |= and &= are non-atomic operations. To avoid additional locks,
put the flags that have to be accessed from interrupt into a separate
sb_flagsintr 32 bit integer field. sb_flagsintr is protected by
splsoftnet.
Input from miod@ deraadt@; OK deraadt@
|
|
That is consistent to the SBLASTRECORDCHK and SBLASTMBUFCHK macros.
OK markus@
|
|
or blocking for each send(2) call.
diff from UMEZAWA Takeshi
ok bluhm
|
|
in the release path. Especially accessing m in a KDASSERT() could
go wrong.
OK claudio@
|
|
There was a small race in sorwakeup() where that could happen if
we slept before the SB_SPLICE flag was set.
ok claudio@
|
|
conditions as in soreceive(). My goal is to make socket splicing
less protocol dependent.
ok claudio@
|
|
|
|
chain (m_nextpkt), so the mbuf passed to it must be disconnected completely
from the socket buffer's chains.
Problem noticed by yasuoka@; tweak from krw@, ok deraadt@
|
|
tvtohz() so that the rounding is correct and we don't time out a tick early
ok claudio@
|
|
socket is no longer affected by option SOCKET_SPLICE we can simplyfy the
code. OK bluhm@
|
|
sosplice() to move the data already there, it might sleep in
m_copym().
Another process must not unsplice during that sleep, so also lock
the receive buffer when sosplice is called with fd -1.
The same sleep can allow network interrupts to modify the socket
buffer. So use sbsync() to write back modifications within the
loop instead of fixing the socket buffer after the loop.
OK claudio@
|
|
the size (internalized ones can be larger on some architectures) for
fitting into the socket. Avoid getting confused by sb_hiwat as well.
This fixes a variety of issues where sendmsg() would fail to deliver
a fd set or fail to wait; even leading to file leakage.
Worked on this with claudio for about a week...
|
|
anticipation of further changes to closef(). No binary change.
ok krw@ miod@ deraadt@
|
|
of per-rthread. Handling of per-thread tick and runtime counters
inspired by how FreeBSD does it.
ok kettenis@
|
|
no objection from mcbride@ krw@ markus@ deraadt@
|
|
an SCM_RIGHTS message may sleep. Bits and pieces from NetBSD with some
simplifications by yours truly.
Fixes the "receive 1" panic seen by many.
ok guenther@, claudio@
|
|
also added to the other direction.
ok mikeb@
|
|
field of the `splice' structure can be used to specify a period of
inactivity after which splicing will be dissolved. ETIMEDOUT error
retrieved with a SO_ERROR indicates the idle timeout expiration.
With comments from and OK bluhm.
|
|
the obvious cases to return EINVAL and ENXIO.
ok tedu deraadt
|
|
discussed with and ok claudio
|
|
ok claudio@
|
|
the same variable. Leak found with dlg's magic mbuf leakage finder.
OK henning@, deraadt@
|
|
socketbuffer size of the closed side since on half close the high
watermark was set to 0.
OK blambert@
|
|
end-of-file but still has data in the receive buffer, soreceive()
should block until all data has been moved.
To make kqueue work with socket splicing, it has to report spliced
sockets as non-readable.
ok deraadt@
|
|
socket. soreceive() releases splsoftnet for uiomove(). In that
moment, somove() could pull the mbuf from the receive buffer. After
that, soreceive removed the mbuf again. The corrupted length
accounting resulted in a panic.
The fix is to block read calls in soreceive() until splicing has
been finished.
just commit deraadt@
|
|
immediately by unsetting the SS_ISSENDING flag. This prevents a
possible 5 seconds delay in socket splicing.
ok markus@; commit it deraadt@
|
|
The data received on the source socket will automatically be sent
on the drain socket. This allows to write relay daemons with zero
data copy.
ok markus@
|
|
Send buffer is scaled by not accounting unacknowledged on the wire
data against the buffer limit. Receive buffer scaling is done similar
to FreeBSD -- measure the delay * bandwith product and base the
buffer on that. The problem is that our RTT measurment is coarse
so it overshoots on low delay links. This does not matter that much
since the recvbuffer is almost always empty.
Add a back pressure mechanism to control the amount of memory
assigned to socketbuffers that kicks in when 80% of the cluster
pool is used.
Increases the download speed from 300kB/s to 4.4MB/s on ftp.eu.openbsd.org.
Based on work by markus@ and djm@.
OK dlg@, henning@, put it in deraadt@
|
|
and make it possible to bind sockets (including listening sockets!)
to rtables and not just rdomains. This changes the name of the
system calls, socket option, and ioctl. After building with this
you should remove the files /usr/share/man/cat2/[gs]etrdomain.0.
Since this removes the existing [gs]etrdomain() system calls, the
libc major is bumped.
Written by claudio@, criticized^Wcritiqued by me
|
|
|
|
|
|
getpeereid(2), but also supplies the remote pid. This is supplied in
a 'struct sockpeercred' (unlike Linux -- they showed how little they
know about real unix by calling theirs 'struct ucred').
ok guenther ajacoutot
|
|
miod@ deraadt@ ok.
|
|
just use strings and make things unique.
ok claudio@
|
|
alternate routing table and separate them from other interfaces in distinct
routing tables. The same network can now be used in any doamin at the same
time without causing conflicts.
This diff is mostly mechanical and adds the necessary rdomain checks accross
net and netinet. L2 and IPv4 are mostly covered still missing pf and IPv6.
input and tested by jsg@, phessler@ and reyk@. "put it in" deraadt@
|
|
levels. This will allow for platforms where soft interrupt levels do not
map to real hardware interrupt levels to have soft ipl values overlapping
hard ipl values without breaking spl asserts.
|
|
the receiving side when passing fd's. ok deraadt@ kettenis@
|
|
This sort of breaking with traditional and expected behavior annoys me.
"yes!" henning@
|
|
becomes a very large number it will not wrap the short into a negative
number and screw up timeouts. It will simply become a max of 65535. Since
this happens when HZ is cranked to a high number, this will still only take
n seconds, or less. Safer than crashing.
Prompted by PR 5511
ok guenther
|
|
error handler that was never used before. this fixes a bug that a
userland process might hang if the system ran out of mbuf clusters or
even other unexpected behaviour in the network drivers.
this bug is very old - it is also found in rev 1.1/stevens v2/44lite2/...
discussed with many
ok markus@ thib@ dlg@
|
|
conversions that should shave a few bytes off the kernel.
ok henning, krw, jsing, oga, miod, and thib (``even though i usually prefer
FOO|BAR''; thanks for looking.
|
|
get hung in nfs_reconnect() because they do not have the proper
privilages to bind to a socket, by adding a struct proc * argument
to sobind() (and the *_usrreq() routines, and finally in{6}_pcbbind)
and do the sobind() with proc0 in nfs_connect.
OK markus@, blambert@.
"go ahead" deraadt@.
Fixes an issue reported by bernd@ (Tested by bernd@).
Fixes PR5135 too.
|
|
The option allows a socket to be bound to addresses which are not
local to the machine. In order to receive packets for these addresses
SO_BINDANY needs to be combined with matching outgoing pf(4) divert
rules, see pf.conf(5).
ok beck@
|