#
e572c323 |
|
10-Apr-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* When receiving an out of sequence FIN we must ignore it until its part of our available buffer (we might want to move this into the BufferQueue class). * Now, _AddData() remembers the flag (and its position), and will alter the segment's flags field to reflect the current state. * This fixes not being able to login into mmlr.dyndns.org. * Fixed warnings when TCP_PROBE is defined. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36127 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5147963d |
|
26-Jul-2009 |
Stephan Aßmus <superstippi@gmx.de> |
headers/private/kernel/util/OpenHashTable.h, Hugo's version, is a bit nicer than Tracker's OpenHashTable.h which it should eventually replace. We've renamed the class to BOpenHashTable and changed the interface slightly so that HashTableLink became superfluous. Adapted all the code that used it. Since the OpenHashTables no longer clash, this should fix the GCC4 build. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
11112327 |
|
07-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Sockets now inherit from WeakReferenceable. * This fixes the problem when a socket changes something with regards to its parent. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30000 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
30a396ab |
|
19-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Made the endpoint manager wait on bind() if the existing connection is local, and is about to close. * This fixes several race conditions with the neon test suite that relied on TCP sockets being gone after close, and their port being available again (note, that is not what the TCP spec says, anyway, but it makes sense to do so, since we already removed the time wait state for local connections). * The endpoint manager is now using a mutex instead of a semaphore. * TCPEndpoint::_Close() now notifies the senders/receivers instead of _HandleReset(). * Besides ssl_closure(), all tests of the neon test suite seem to pass now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25564 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ec1f43f3 |
|
17-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Small style changes. * Currently ifdef'ed out potentially correct changes, that break Neon tests which otherwise succeed. Axel will investigate this further. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25530 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03298f9d |
|
02-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* The WaitList now always notifies all waiters. * In SendData(), TCP will now split the buffer into smaller parts if it can send data (ie. there is free space in the buffer queue left, but not enough to send the whole buffer, and the free space is more than the send low water mark of the socket). * Both of these changes together let TCP now pass the "forwarding" test of the OpenSSH suite. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25294 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8e0a418b |
|
28-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented sending of urgent data. Seems to work fine, but of course only if the other end is not a Haiku host (retrieving of urgent data is still missing). * Resolved TODO: SendData() now sends a SIGPIPE when trying to send on a closed connection. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25245 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
895d7215 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added TCPEndpoint::GetOption(), currently only supports TCP_NODELAY, and TCP_MAXSEG. * Note, TCP_MAXSEG cannot be set yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25241 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
62895789 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25240 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0cadc931 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* TIME_WAIT endpoints must not send an acknowledgement for known data; this fixes the "endless discussions" when closing a local connection - only happened on a simultaneous close. * A FIN in TIME_WAIT now updates the time-wait timer, as required by the TCP specification. * Entering TIME_WAIT now cancels all connection timers. We might want to think about putting time wait connections into a separate hash, and delete the socket early on. * Added tracing support for send/receive, timers, and state changes. * Cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25236 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
db4b6bc4 |
|
28-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged _Receive() and _SegmentReceived(). * Cleanup, shuffled methods around, renamed methods, etc. - no functional changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
05bc1e89 |
|
27-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added _CancelConnectionTimers() that does what its name suggests, and is now used from various places that previously did not cancel all timers they should have. * When a connection moves to the CLOSED state, it should cancel all timers; this prevents from sending a reset at the end of a connection. * If the persist/delayed acknowledge timers were canceled too late, they might still have tried to send something (which would eventually cause a reset sent to the peer). * Follow RFC 1337 with respect to time wait assassination prevention (ie. we now ignore resets from peers in time wait state). * _SegmentReceived() must not check the sequence of a time wait connection; it prevented sending a reset when that was due (a new connection request would time out, instead of fail immediately). * Also, that method must never be called in the LISTEN or SYNCHRONIZE_SENT states, so we don't need to check for those. * We don't have to wait in Close() until the connection is actually closed - removed a TODO. TCP should handle this internally. * Renamed _ShutdownEgress() to _Shutdown(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25219 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
05849428 |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Added syscall restart support for connect(), accept(), send(), recv(), which are implemented via ioctl()s. The actual restart support is done in the net stack driver's ioctl() hook. Lower layers need to correctly deal with socket timeouts, though, for which the stack module provides support functions. * TCPEndpoint::_WaitForEstablished() does abort now when an error occurred earlier, so that trying to connect to an unused port fails immediately, as it should. * Fixed and refactored TCP connection reset handling. The new TCPEndpoint::_HandleReset() does the job. Got rid of TCPEndpoint::fError. * Fixed sequence numbers for SYNC/FINI packets. * The former two fix the problem that connections wouldn't be closed correctly and could even be reused when trying to connect again (as was reproducible with svnserve + svn). * Some style cleanup in CPEndpoint.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23984 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5c3cf263 |
|
03-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Got rid of DeleteSocket(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23236 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1d0b34fa |
|
23-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* If a new buffer had its last part in common with an existing larger buffer, BufferQueue::Add() tried to remove a negative amount of bytes. This could bring a download to a complete halt (as could the other one due to the list link mixup). * While the RTT computation still seems to work not that good (with a drop quote of 50% I would easily reach retransmit timeouts of 80 secs), TCP should now work a lot better on a flaky connection. * Renamed _GetMSS() to _MaxSegmentSize(). * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22677 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
84052230 |
|
31-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
axeld+bonefish: Got rid of the ParentType in the HashTableDefinition; it doesn't really belong there. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21766 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
34c53bac |
|
26-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tcp: fixed an issue where the socket could be waken from ReadData() even when no new data was added to the queue (due to lost packets). Also make sure we only break from the receive loop where there is at least a byte of data to be consumed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21248 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fe0ab286 |
|
23-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tcp: no longer need recursive locking. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21216 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a0a553ca |
|
08-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tcp: allow TCP_NODELAY to be set git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21069 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
62a21143 |
|
04-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a race condition in TCP's WaitList Wait/Signal that was preventing Connect() from awake when it should. Reported by Francois Revol. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21024 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
785e7ef7 |
|
04-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
renamed TCP's TSval/TSecr git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21014 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15945a11 |
|
29-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added 'tcp_endpoints' and 'tcp_endpoint' debugger commands. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20909 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9cd3b980 |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a long standing binding issue with spawned sockets and TCP. also fixed bind() address checking rules. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20866 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
342444bc |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
replaced TCP's Endpoint Manager manual handling of endpoint lists with MultiHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4b55736d |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added new helper ProtocolSocket. Moved some stuff together to achieve better inlining. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20848 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2586c25e |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
use Chaining in OpenHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20822 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66a4a428 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added Recv-Q/Send-Q output to netstat. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20819 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
585195c2 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
introduced SocketAddress wrappers and use them in TCP. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20818 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
53f23f85 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
partially rewrote TCP's endpoint manager. Fixes #1173 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20814 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
39faeeba |
|
20-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
when sending pure ACKs, use an artificial window of 0. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20778 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c70d3baf |
|
20-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
more TCP fixes, we should now be able to send large amounts of data through congestioned links. - fixed BufferQueue's RemoveUntil. - reset SND.NXT on third duplicate ACK (fast retransmit). - on retransmit reset SND.NXT to SND.UNA (it will be updated back when we get good ACKs). - fixed effective window calculation. - relaxed SWS checking a bit, don't send partial packets on retransmission as the window might have been reduced due to congestion. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20769 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2445c00e |
|
19-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
some internal reorganization of getsockopt()/setsockopt() handling. TCP is now able to fully use the application requested sender/receiver buffer sizes for improved performance. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20764 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1d63ea33 |
|
18-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
some TCP performance improvements. - support TCP fast retransmit/fast recovery. - maintain the RTT average time and update the retransmit timeout accordingly. - improvements to TCP Slow start / congestion avoidance. - better handling of the retransmission timer. - properly size segments taking the TCP options length into consideration. - as an interim fix, update the SendQ/RecvQ sizes on Connect(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20748 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7d524fb7 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
implemented TCP's slow start and congestion avoidance. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20734 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f19e1f47 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
reorganized some of the TCP logic so we have common init paths for receive and send. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20731 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
aa077007 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
update Window Scaling variables when a simultaneous open is ACKed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20730 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
58bef2f4 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
support TCP Window Scale on sent segments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20729 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4ee08841 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
assorted TCP fixes. - fixed the locking for spawned connections and accept()s. - return EMSGSIZE if the user is trying to write more data than the send buffer can hold. - fixed a crash when receiving a RST while the connection is being closed. - don't wake up readers when the connection gets established. - endpoint managers lock must be recursive to properly work with spawn'ed sockets. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20727 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ca1b900b |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
support RFC 1323's TCP Timestamps (we are still not updating our estimator though). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20719 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03d7f17e |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
made TCP handle multiple domains. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20718 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fbaad6fd |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed an issue where TCP would RST a connection when a peer trying to connect us re-sent their SYN. - In fact our SYN/ACK reply is being lost due to ARP resolving as we are waiting in the device's receive path, thus we never get replies before timing out. This requires queueing during ARP resolving. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20706 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f73dd74e |
|
10-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
even more TCP fixage. - don't try to remove spawned sockets from Endpoints hashtable. - return B_WOULD_BLOCK (EAGAIN) when we time out in acquire_sem(). - use B_RELEASE_IF_WAITING_ONLY in the TCP WaitList. - fixed a off by one issue in ReadData() which could result in more than needed iterations (and waiting). - implemented prepending new buffers to a net_buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20639 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7664bcb5 |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
A couple more TCP fixes. - ipv4_bind() was broken when binding to addresses not INADDR_ANY, as it wasn't copying the address to the socket, fixed. - fixed a small issue in TCP's BindToEphemeral where the correct address might not have been bound to the socket. - some assorted TCP wait lists fixes. - fixed TCP's Connect() over the loopback interface, we might already be ESTABLISHED after _SendQueue() returns. - fixed the amount of time we wait in TCP's Accept(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20629 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a7edede4 |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed multiple TCP issues. - Moved FIN handling to after Segment Text handling, it matches the RFC and fixes a possible issue with a user missing some final segment data when receiving a FIN. - Fixed the FIN handling to better terminate connections (no more senseless chatter in the end with RSTs etc). - When Bind()ing, set the socket address so a call to getsockname() gets the allocated port correctly. - After reaching the ESTABLISHED state, try to wake all pending threads (still needs work). - Corrected the maximum amount of time we wait in SendData() to respect socket->send.timeout. - Now ReadData() behaves correctly in all possible states. - There was a missing handling of MSG_DONTWAIT, fixed. - Better internal handling of PSH. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20624 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d86f48f3 |
|
05-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tiny TCP cleanups, move the read notifications to _NotifyReader(). - Also fixed the buffer size check in UDP's SendData() since UDP's length field includes the size of the header we need to check that as well. IPv4 is correct since we check for the size after prepending the header (due to it being possibly already included). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20592 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
52e75b62 |
|
03-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
TCP: initial shutdown() implementation and some general fixes * set FLAG_NO_RECEIVE/FLAG_NO_SEND on shutdown() and send FIN on SHUT_WR * if a send() is attempted with FLAG_NO_SEND set return EPIPE * proper handling of recv timeout in ReadData(), using absolute timeout instead of relative * if FLAG_NO_RECEIVE is set, don't attached more segments to the receive queue, drop them instead git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20542 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3537f096 |
|
03-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a bug in TCP where applications weren't properly signaled when the connection was terminated by the server and there was no more data to be read from the buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20534 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
868583b5 |
|
03-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a potential problem in TCP's accept() with the init'ing of new connections' MSS git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20527 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
442c0979 |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed class TCPConnection to TCPEndpoint. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19418 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
e572c3233547f29a65ef4e2108b62aaee82d825e |
|
10-Apr-2010 |
Axel Dörfler <axeld@pinc-software.de> |
* When receiving an out of sequence FIN we must ignore it until its part of our available buffer (we might want to move this into the BufferQueue class). * Now, _AddData() remembers the flag (and its position), and will alter the segment's flags field to reflect the current state. * This fixes not being able to login into mmlr.dyndns.org. * Fixed warnings when TCP_PROBE is defined. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36127 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5147963dcd57fefa4f63c484eb88e9eaf4002976 |
|
26-Jul-2009 |
Stephan Aßmus <superstippi@gmx.de> |
headers/private/kernel/util/OpenHashTable.h, Hugo's version, is a bit nicer than Tracker's OpenHashTable.h which it should eventually replace. We've renamed the class to BOpenHashTable and changed the interface slightly so that HashTableLink became superfluous. Adapted all the code that used it. Since the OpenHashTables no longer clash, this should fix the GCC4 build. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1111232758bd76e4ce4e7f6daddd7334249db818 |
|
07-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Sockets now inherit from WeakReferenceable. * This fixes the problem when a socket changes something with regards to its parent. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30000 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
30a396ab4211fe07b7d90e6c48a3eadd301a78db |
|
19-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Made the endpoint manager wait on bind() if the existing connection is local, and is about to close. * This fixes several race conditions with the neon test suite that relied on TCP sockets being gone after close, and their port being available again (note, that is not what the TCP spec says, anyway, but it makes sense to do so, since we already removed the time wait state for local connections). * The endpoint manager is now using a mutex instead of a semaphore. * TCPEndpoint::_Close() now notifies the senders/receivers instead of _HandleReset(). * Besides ssl_closure(), all tests of the neon test suite seem to pass now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25564 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ec1f43f30465ee4700c4a8a85dfb99ad6eaf8706 |
|
17-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Small style changes. * Currently ifdef'ed out potentially correct changes, that break Neon tests which otherwise succeed. Axel will investigate this further. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25530 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03298f9d20fe782497471b9e3e131ee00d3fa526 |
|
02-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* The WaitList now always notifies all waiters. * In SendData(), TCP will now split the buffer into smaller parts if it can send data (ie. there is free space in the buffer queue left, but not enough to send the whole buffer, and the free space is more than the send low water mark of the socket). * Both of these changes together let TCP now pass the "forwarding" test of the OpenSSH suite. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25294 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8e0a418b70d2599c9eaf2a410af2f48afd5563f2 |
|
28-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Implemented sending of urgent data. Seems to work fine, but of course only if the other end is not a Haiku host (retrieving of urgent data is still missing). * Resolved TODO: SendData() now sends a SIGPIPE when trying to send on a closed connection. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25245 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
895d7215fbb32fc62277f028b21adcda9320fcd6 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added TCPEndpoint::GetOption(), currently only supports TCP_NODELAY, and TCP_MAXSEG. * Note, TCP_MAXSEG cannot be set yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25241 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
62895789828ea068575fd2794a299325d618d5f6 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25240 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0cadc931d2bb80c7f5ee60883fc3d0a949a65a92 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* TIME_WAIT endpoints must not send an acknowledgement for known data; this fixes the "endless discussions" when closing a local connection - only happened on a simultaneous close. * A FIN in TIME_WAIT now updates the time-wait timer, as required by the TCP specification. * Entering TIME_WAIT now cancels all connection timers. We might want to think about putting time wait connections into a separate hash, and delete the socket early on. * Added tracing support for send/receive, timers, and state changes. * Cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25236 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
db4b6bc46caaeb073a5e176a89ea695c0b52b70e |
|
28-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged _Receive() and _SegmentReceived(). * Cleanup, shuffled methods around, renamed methods, etc. - no functional changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
05bc1e89735f8cdbfa314202fcbd88ce5bcdf047 |
|
27-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added _CancelConnectionTimers() that does what its name suggests, and is now used from various places that previously did not cancel all timers they should have. * When a connection moves to the CLOSED state, it should cancel all timers; this prevents from sending a reset at the end of a connection. * If the persist/delayed acknowledge timers were canceled too late, they might still have tried to send something (which would eventually cause a reset sent to the peer). * Follow RFC 1337 with respect to time wait assassination prevention (ie. we now ignore resets from peers in time wait state). * _SegmentReceived() must not check the sequence of a time wait connection; it prevented sending a reset when that was due (a new connection request would time out, instead of fail immediately). * Also, that method must never be called in the LISTEN or SYNCHRONIZE_SENT states, so we don't need to check for those. * We don't have to wait in Close() until the connection is actually closed - removed a TODO. TCP should handle this internally. * Renamed _ShutdownEgress() to _Shutdown(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25219 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
058494285aafd433af5618aeb52abd76a4b39c6a |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Added syscall restart support for connect(), accept(), send(), recv(), which are implemented via ioctl()s. The actual restart support is done in the net stack driver's ioctl() hook. Lower layers need to correctly deal with socket timeouts, though, for which the stack module provides support functions. * TCPEndpoint::_WaitForEstablished() does abort now when an error occurred earlier, so that trying to connect to an unused port fails immediately, as it should. * Fixed and refactored TCP connection reset handling. The new TCPEndpoint::_HandleReset() does the job. Got rid of TCPEndpoint::fError. * Fixed sequence numbers for SYNC/FINI packets. * The former two fix the problem that connections wouldn't be closed correctly and could even be reused when trying to connect again (as was reproducible with svnserve + svn). * Some style cleanup in CPEndpoint.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23984 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5c3cf2631067f21d72880b245c0ec0e23c3791c7 |
|
03-Jan-2008 |
Axel Dörfler <axeld@pinc-software.de> |
Got rid of DeleteSocket(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23236 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1d0b34faae63ccea578c5f8f51038afa16fb825a |
|
23-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* If a new buffer had its last part in common with an existing larger buffer, BufferQueue::Add() tried to remove a negative amount of bytes. This could bring a download to a complete halt (as could the other one due to the list link mixup). * While the RTT computation still seems to work not that good (with a drop quote of 50% I would easily reach retransmit timeouts of 80 secs), TCP should now work a lot better on a flaky connection. * Renamed _GetMSS() to _MaxSegmentSize(). * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22677 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
84052230379abf8e556e20e499d9a6040157f4a6 |
|
31-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
axeld+bonefish: Got rid of the ParentType in the HashTableDefinition; it doesn't really belong there. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21766 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
34c53bacf49f84ef2b18ea80c0238d73ee2d56de |
|
26-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tcp: fixed an issue where the socket could be waken from ReadData() even when no new data was added to the queue (due to lost packets). Also make sure we only break from the receive loop where there is at least a byte of data to be consumed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21248 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fe0ab2867a7f7d03b8bdc231592807553aee72f3 |
|
23-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tcp: no longer need recursive locking. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21216 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a0a553caa3d17608dcda994338aa3f8ca81cb674 |
|
08-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tcp: allow TCP_NODELAY to be set git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21069 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
62a21143be0010e6f9681394cfa9e93960169dcb |
|
04-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a race condition in TCP's WaitList Wait/Signal that was preventing Connect() from awake when it should. Reported by Francois Revol. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21024 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
785e7ef7dd751385821998a5cf513d14f2456b3e |
|
04-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
renamed TCP's TSval/TSecr git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21014 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15945a11c67002b10f04a6207eea5637e6c17b45 |
|
29-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added 'tcp_endpoints' and 'tcp_endpoint' debugger commands. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20909 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9cd3b980fd431d2fc4cabfdae2b572b866686ee9 |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a long standing binding issue with spawned sockets and TCP. also fixed bind() address checking rules. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20866 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
342444bc95a45142c5e6fa824c96ca1c1343c84f |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
replaced TCP's Endpoint Manager manual handling of endpoint lists with MultiHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4b55736dde3c03e6732d2d550b53218b35c37e21 |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added new helper ProtocolSocket. Moved some stuff together to achieve better inlining. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20848 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2586c25e318e1f71ff45889b9b0d047ce03043d1 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
use Chaining in OpenHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20822 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
66a4a428020db4e26cda68ffe4b3dd6f1bed88c2 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added Recv-Q/Send-Q output to netstat. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20819 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
585195c28d3d06ee7726b04a420145dda0bd875a |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
introduced SocketAddress wrappers and use them in TCP. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20818 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
53f23f85a2725c8fc31c7a874256084c7c623d86 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
partially rewrote TCP's endpoint manager. Fixes #1173 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20814 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
39faeeba3871ea8cd6a41a043cf564ecd68c45e2 |
|
20-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
when sending pure ACKs, use an artificial window of 0. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20778 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c70d3bafd3ef8cb0b218d942531a2296576a8661 |
|
20-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
more TCP fixes, we should now be able to send large amounts of data through congestioned links. - fixed BufferQueue's RemoveUntil. - reset SND.NXT on third duplicate ACK (fast retransmit). - on retransmit reset SND.NXT to SND.UNA (it will be updated back when we get good ACKs). - fixed effective window calculation. - relaxed SWS checking a bit, don't send partial packets on retransmission as the window might have been reduced due to congestion. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20769 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2445c00e6420e2b365cba47c758b66fc04e75f59 |
|
19-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
some internal reorganization of getsockopt()/setsockopt() handling. TCP is now able to fully use the application requested sender/receiver buffer sizes for improved performance. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20764 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1d63ea33723fa8f3afac5a98fdb36b5bfe6839ee |
|
18-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
some TCP performance improvements. - support TCP fast retransmit/fast recovery. - maintain the RTT average time and update the retransmit timeout accordingly. - improvements to TCP Slow start / congestion avoidance. - better handling of the retransmission timer. - properly size segments taking the TCP options length into consideration. - as an interim fix, update the SendQ/RecvQ sizes on Connect(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20748 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7d524fb79bfb32d55883b36e8208a6f7f12d7034 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
implemented TCP's slow start and congestion avoidance. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20734 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f19e1f47daa90e34c9b363beb2e278b300505446 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
reorganized some of the TCP logic so we have common init paths for receive and send. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20731 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
aa0770079557f4401daf7dc7e18a253d5b70c688 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
update Window Scaling variables when a simultaneous open is ACKed. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20730 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
58bef2f444947af261189df60c5231ab69a9601d |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
support TCP Window Scale on sent segments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20729 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4ee088419f8fdc733b6cb0606e2556b176316788 |
|
16-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
assorted TCP fixes. - fixed the locking for spawned connections and accept()s. - return EMSGSIZE if the user is trying to write more data than the send buffer can hold. - fixed a crash when receiving a RST while the connection is being closed. - don't wake up readers when the connection gets established. - endpoint managers lock must be recursive to properly work with spawn'ed sockets. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20727 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
ca1b900bdb8cd280418ade417a2f81b5b4b50a91 |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
support RFC 1323's TCP Timestamps (we are still not updating our estimator though). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20719 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03d7f17e07da19253587845073315010febc031a |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
made TCP handle multiple domains. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20718 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
fbaad6fdb5fad8e2f37834712f333603ead96153 |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed an issue where TCP would RST a connection when a peer trying to connect us re-sent their SYN. - In fact our SYN/ACK reply is being lost due to ARP resolving as we are waiting in the device's receive path, thus we never get replies before timing out. This requires queueing during ARP resolving. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20706 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f73dd74eb9660085e4db4c9f7597885bb04c1569 |
|
10-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
even more TCP fixage. - don't try to remove spawned sockets from Endpoints hashtable. - return B_WOULD_BLOCK (EAGAIN) when we time out in acquire_sem(). - use B_RELEASE_IF_WAITING_ONLY in the TCP WaitList. - fixed a off by one issue in ReadData() which could result in more than needed iterations (and waiting). - implemented prepending new buffers to a net_buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20639 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7664bcb5c42ce2e8b1324de100aeabba4cfac81f |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
A couple more TCP fixes. - ipv4_bind() was broken when binding to addresses not INADDR_ANY, as it wasn't copying the address to the socket, fixed. - fixed a small issue in TCP's BindToEphemeral where the correct address might not have been bound to the socket. - some assorted TCP wait lists fixes. - fixed TCP's Connect() over the loopback interface, we might already be ESTABLISHED after _SendQueue() returns. - fixed the amount of time we wait in TCP's Accept(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20629 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a7edede46f377bf9b0f2710079a09f22df2771ca |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed multiple TCP issues. - Moved FIN handling to after Segment Text handling, it matches the RFC and fixes a possible issue with a user missing some final segment data when receiving a FIN. - Fixed the FIN handling to better terminate connections (no more senseless chatter in the end with RSTs etc). - When Bind()ing, set the socket address so a call to getsockname() gets the allocated port correctly. - After reaching the ESTABLISHED state, try to wake all pending threads (still needs work). - Corrected the maximum amount of time we wait in SendData() to respect socket->send.timeout. - Now ReadData() behaves correctly in all possible states. - There was a missing handling of MSG_DONTWAIT, fixed. - Better internal handling of PSH. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20624 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
d86f48f3f5a6ca5039ee8f2190c97906d976f2d1 |
|
05-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tiny TCP cleanups, move the read notifications to _NotifyReader(). - Also fixed the buffer size check in UDP's SendData() since UDP's length field includes the size of the header we need to check that as well. IPv4 is correct since we check for the size after prepending the header (due to it being possibly already included). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20592 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
52e75b62362812a53a8d7d9502feb7a9c91bad7f |
|
03-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
TCP: initial shutdown() implementation and some general fixes * set FLAG_NO_RECEIVE/FLAG_NO_SEND on shutdown() and send FIN on SHUT_WR * if a send() is attempted with FLAG_NO_SEND set return EPIPE * proper handling of recv timeout in ReadData(), using absolute timeout instead of relative * if FLAG_NO_RECEIVE is set, don't attached more segments to the receive queue, drop them instead git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20542 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3537f0967f24705ec2ce6ac113c6cbada14a7571 |
|
03-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a bug in TCP where applications weren't properly signaled when the connection was terminated by the server and there was no more data to be read from the buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20534 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
868583b54a8fb3706b5e68c3ed5420d70f4d3d45 |
|
03-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a potential problem in TCP's accept() with the init'ing of new connections' MSS git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20527 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
442c0979467981e68c45820d6e5d931a13c2ad82 |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed class TCPConnection to TCPEndpoint. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19418 a95241bf-73f2-0310-859d-f6bbb57e9c96
|