Hugo Santos
6e31ae98f9
some object cache / slab improvements.
...
- call the reclaimer callback when low on memory.
- use the depot when on multi-cpu setups (for scalability).
- fixed the amount of memory spent on slabs for very large objects.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20889 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-28 21:35:23 +00:00
Hugo Santos
11b5020f2f
rewrote the object cache (slab) implementation a bit, preparing for further integration.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20887 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-28 18:53:58 +00:00
Hugo Santos
8a96ba39e3
some slab cleanups, split the C interface to another file.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20875 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-28 09:37:38 +00:00
Hugo Santos
4e8a1b331f
miniature cleanups.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20874 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-28 09:37:26 +00:00
Hugo Santos
f1a5bab268
while iterating through the endpoint table, only do so for the port in context.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20867 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 15:59:31 +00:00
Hugo Santos
9cd3b980fd
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
2007-04-27 15:49:00 +00:00
Hugo Santos
342444bc95
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
2007-04-27 15:06:41 +00:00
Hugo Santos
505e98538a
introduced MultiHashTable, similiar to multimap, but with hash table semantics.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20864 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 15:06:30 +00:00
Hugo Santos
e2200e347d
call ProtocolSocket::Open() for accept()ed sockets. This fixes a regression introduced earlier today.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20863 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 14:47:43 +00:00
Hugo Santos
01a10fc527
fixed OpenHashTable::Iterator, it wasn't working for a single item.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 14:47:34 +00:00
Hugo Santos
727ad0b0a5
completed UDP's locking.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20857 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 11:30:03 +00:00
Hugo Santos
40bbf8600e
made UDP use OpenHashTable for the endpoint table, part of the lookup is now inlined.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20854 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 08:07:45 +00:00
Hugo Santos
8ac2dba331
added iterator to OpenHashTable.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20853 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 08:07:38 +00:00
Hugo Santos
0cd08b100c
ups, TRACE_SLAB was on.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20852 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 08:07:30 +00:00
Hugo Santos
5084c83901
addressed Axel's suggestion regarding SocketAddress' GetPort() name.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20851 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 07:20:43 +00:00
Hugo Santos
25a2744f9e
adapted UDP to use AddressUtilities, for readability.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20850 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 07:10:11 +00:00
Hugo Santos
c72ab92d84
adapted UDP to use ProtocolSocket which it already derived through DatagramSocket.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20849 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 07:10:03 +00:00
Hugo Santos
4b55736dde
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
2007-04-27 07:09:46 +00:00
Hugo Santos
5d6551d69f
removed some of the slab's initial heavy debugging. we now merge the links into the slab itself resulting in zero overhead per buffer with MergedLink strategy.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20841 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 15:40:53 +00:00
Hugo Santos
d7ae189ecf
slab: be smarter when picking the underlying strategy for the slab C API (based on requested object size).
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20840 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 12:21:38 +00:00
Hugo Santos
e6fb3d3947
more slab fixes, also introduced a new strategy optimized for medium sized buffers (64 >= x < 512) with lengths other than power of 2 (has an overhead of 2 words per buffer).
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20839 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 11:38:24 +00:00
Hugo Santos
dd89ad0e7e
added locking to slab's Cache<>. Now we react to system's low memory conditions freeing up empty slabs.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20836 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 07:31:19 +00:00
Hugo Santos
b8c0d6618e
gcc 4 compilation fixes.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20835 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 06:32:25 +00:00
Hugo Santos
457b03ecb4
net_buffer is the first user of the new slab allocator, let's see how it goes.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20834 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 06:05:23 +00:00
Hugo Santos
81bc570922
assorted slab fixes.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20833 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 06:05:08 +00:00
Hugo Santos
81423c91c7
added initial slab code to the kernel. It is still unused, and there is still no VM interaction.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20832 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 03:41:24 +00:00
Hugo Santos
4171bc72bc
test_slab: moved the Backend independent HashCacheStrategy operations to BaseHashCacheStrategy so we don't end up with multiple instantiations of the same code.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20826 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 19:54:18 +00:00
Hugo Santos
118044d0d5
updated test_slab to use the new OpenHashTable's API.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 19:28:08 +00:00
Hugo Santos
77e70865e1
moved the storage requirements (i.e. ParentType *) to OpenHashTable's Definition which we now instantiate per OpenHashTable.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20824 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 19:21:06 +00:00
Hugo Santos
226bb7a9d4
fixed a nice C-induced issue which was making us rewrite stuff.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20823 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 18:55:27 +00:00
Hugo Santos
2586c25e31
use Chaining in OpenHashTable.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20822 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 18:55:05 +00:00
Hugo Santos
66a4a42802
added Recv-Q/Send-Q output to netstat.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20819 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 17:41:18 +00:00
Hugo Santos
585195c28d
introduced SocketAddress wrappers and use them in TCP.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20818 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 17:41:01 +00:00
Hugo Santos
a1a9e858a2
tiny TCP cleanups
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20815 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 16:28:20 +00:00
Hugo Santos
53f23f85a2
partially rewrote TCP's endpoint manager. Fixes #1173
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20814 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 16:14:14 +00:00
Hugo Santos
f8486a0219
fixed an issue where a TCP connection would fail if the first expected segment of data was lost. Reported by Axel.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20796 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-24 16:14:35 +00:00
Hugo Santos
cd95756047
added test_slab to tests/system/kernel/Jamfile.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20793 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-24 11:05:00 +00:00
Hugo Santos
a30fb13f58
added a test Slab implementation to tests/ (including Depot management for SMP scalability). after a bit more of testing this will be added to the kernel (still without VM integration).
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20792 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-24 11:04:47 +00:00
Hugo Santos
85dbe747c4
open addressing self-extending hash table implementation.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20791 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-24 11:04:35 +00:00
Hugo Santos
006e498fa9
transmit our timestamp in network order. Fixes a problem with sending data to Linux and BSD hosts which Travis helped debug. Also only update SRTT when data has been acknowledged.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20787 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-23 22:15:20 +00:00
Hugo Santos
39faeeba38
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
2007-04-21 03:11:05 +00:00
Hugo Santos
204aa45b0b
allow window updates to be sent after consuming data from the receive buffer. This fixes an issue where people were experiencing hangs in TCP downloads.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20777 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-21 02:37:17 +00:00
Hugo Santos
f1b088e623
fixed an issue with TCP where it possibly could not recover from a retransmission as the RCV.NXT was wrongly updated. When appending data we now set it to the sequence in the end of the receive queue.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20776 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-20 23:18:06 +00:00
Hugo Santos
739e994278
TCP: added SACK definitions and option processing.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20775 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-20 20:50:24 +00:00
Hugo Santos
530017c6c9
check option length when processing TCP options.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20774 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-20 19:04:08 +00:00
Hugo Santos
c70d3bafd3
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
2007-04-20 09:21:55 +00:00
Hugo Santos
8a819b17e4
retrieve the incoming interface on the domain_receive_adapter(). This should fix potential issues with packets addressed to the IP broadcast address, such as in with some DHCP implementations.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20767 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-20 04:40:53 +00:00
Hugo Santos
74b0e85845
merged a bit more of functionality into DatagramSocket so we don't require a custom ReadData in the link protocol.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20765 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-20 02:13:54 +00:00
Hugo Santos
2445c00e64
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
2007-04-20 01:58:14 +00:00
Hugo Santos
e6f333541a
moved tcptester to tests/.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20762 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-19 22:03:54 +00:00
Hugo Santos
421a4def57
some TCP tweaks.
...
- check the effective window against the flight size.
- start the RTT estimates relatively high.
- introduced a TCP PROBE debug message for offline processing and TCP debugging.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20750 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-19 10:23:04 +00:00
Hugo Santos
69adff2f81
A very simple controlable traffic generator for TCP testing.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-19 06:39:05 +00:00
Hugo Santos
1d63ea3372
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
2007-04-19 00:54:31 +00:00
Hugo Santos
5534294ca1
TCP: only set FIN after the send queue has been exausted and we are in a state that requires it.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20735 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-17 08:02:41 +00:00
Hugo Santos
7d524fb79b
implemented TCP's slow start and congestion avoidance.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20734 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-17 05:55:03 +00:00
Hugo Santos
f19e1f47da
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
2007-04-17 03:39:24 +00:00
Hugo Santos
aa07700795
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
2007-04-17 01:25:08 +00:00
Hugo Santos
58bef2f444
support TCP Window Scale on sent segments.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20729 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-17 01:07:58 +00:00
Hugo Santos
4ee088419f
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
2007-04-16 18:32:49 +00:00
Hugo Santos
f56b0aa00d
fixed arp's ClearQueue when an entry is rejected.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20726 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-16 15:27:13 +00:00
Hugo Santos
c07371587f
made ETHER_DEBUG use dprintf() as the previous logic was screwing badly and making the boot sequence hang in some setups (specifically qemu, may have fixed issues with Parallels as well).
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20721 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-16 04:27:37 +00:00
Hugo Santos
ca1b900bdb
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
2007-04-16 03:19:59 +00:00
Hugo Santos
03d7f17e07
made TCP handle multiple domains.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20718 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-16 00:27:39 +00:00
Hugo Santos
d5b5a2c2f8
introduced Checksum::PseudoHeader helper.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20717 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 23:18:15 +00:00
Hugo Santos
1408d1f0ce
introduced datalink's send_datagram to perform route and source address selection and dispatch the datagram to appropriate domain/protocol.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20714 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 22:11:12 +00:00
Hugo Santos
f106e0650e
print the new 'active' flag in arp entries
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20713 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 21:00:32 +00:00
Hugo Santos
624c52d8b7
ARP now queues packets while resolving a destination instead of blocking on send_data(). This fixes several issues:
...
- TCP now behaves correctly when receiving new connections as its SYN/ACK is queued, or if lost correctly retransmitted when the peer resends a SYN.
- The first ICMP Replies from an external on-link host pinging Haiku are no longer lost.
- Reduced the number of ARP messages Haiku needs to generate until resolving an entry.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20712 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 21:00:12 +00:00
Hugo Santos
fbaad6fdb5
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
2007-04-15 17:34:52 +00:00
Hugo Santos
4526eff137
gcc 4 template instantiation fixes
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20697 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 08:24:40 +00:00
Hugo Santos
342824b6da
fixed the reception of multicast frames by RAW sockets.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20696 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 07:46:30 +00:00
Hugo Santos
6a60618094
glued the multicast filter handling to the receive path: we are now capable of receiving multicast frames in datagram sockets.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20695 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 07:31:04 +00:00
Hugo Santos
4229d7091e
made UDP's send_data call into IPv4's, so we can handle of the datagram stuff in one place.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20694 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 05:23:28 +00:00
Hugo Santos
629878443b
made IPv4's send path be multicast aware.
...
- also added IP_MULTICAST_TTL support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20693 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 05:23:18 +00:00
Hugo Santos
d3be414572
initial IPv4 multicast receive path.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20692 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 04:02:02 +00:00
Hugo Santos
6c501a4085
support RFC 3678's Protocol-Independent setsockopt()s for IPv4 multicast.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20691 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 03:07:28 +00:00
Hugo Santos
46527f6806
initial steps towards IPv4 Multicast Filter Delta API (RFC 3678)
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20690 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-15 02:44:01 +00:00
Hugo Santos
49f3c71e21
respect SO_BROADCAST for received and sent datagrams.
...
- check if the destination address is specified in IPv4's SendData()
- minor cleanups to IPv4's TRACE()s.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20681 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-13 21:33:13 +00:00
Hugo Santos
658a550639
use module_dependencies to load the required modules by udp, tcp, ipv4, icmp and arp.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20676 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-13 14:37:48 +00:00
Hugo Santos
57e2a3d584
only deliver frames to IPv4 raw sockets of the specified protocol.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20675 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-13 04:20:39 +00:00
Hugo Santos
ab7e75e74d
don't do MSS segmentation in TCP's SendData(), _SendQueue() already does the appropriate work.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20674 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-13 03:45:28 +00:00
Hugo Santos
d438fa4c12
added buffer, datalink and socket module references to the stack module so we don't have to load them in each other module.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20673 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-13 03:06:36 +00:00
Hugo Santos
bfb45f717c
introduced a new helper class DatagramSocket which provides a consistent base interface and functionality for the implementation of datagram-based sockets.
...
- made the ipv4 raw, udp and link protocols use DatagramSocket.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20672 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-13 00:55:32 +00:00
Hugo Santos
bf48e753d7
made UDP agnostic to the underlying network protocol (preparing some work into the future).
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20661 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-12 08:22:47 +00:00
Hugo Santos
6c35350908
moved address selection logic to a new 'get_buffer_route'.
...
- IPv4 now assumes the addresses it is supplied in send_routed_data are already the appropriate ones.
- made the Data(), operator* and operator-> methods in NetBufferFieldReader const so we can use them in the same expression as the constructor.
- fixed an issue with UDP where the wrong source address could be used in the calculating the checksum.
- changed ipv4_print_address to use the more common 0.0.0.0 format.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20660 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-11 22:24:12 +00:00
Hugo Santos
87001e059c
some NetBufferUtility revamp.
...
- introduced base NetBufferFieldReader which deals with obtaining a continuguous field to deal with.
- renamed Detach() to Sync() to better express the fact that we may be writing to the buffer.
- Fixed IPv4's and ICMP's checksum calculation as it assumed the underlying header was contiguous.
- ICMP is now able to reply to ICMP Echo Requests which were split across data nodes.
- in split_buffer(), make sure we were able to trim() the new buffer before damaging the original one.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20657 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-11 16:40:40 +00:00
Hugo Santos
83ecc79510
non-writeable states are always non-blockable from a write() POV.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20653 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-11 14:58:39 +00:00
Hugo Santos
af56b5b233
fixed add_tcp_header() as it wasn't considering the possibility that prepending data would not result in a contiguous buffer. This would result in wrong checksums for apparent no reason.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20643 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-10 19:04:13 +00:00
Hugo Santos
1c96882baa
update buffer size when prepending buffers.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20642 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-10 18:27:41 +00:00
Hugo Santos
914c48cad7
eat header space in each iteration in prepend_size().
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20641 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-10 17:00:22 +00:00
Hugo Santos
f73dd74eb9
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
2007-04-10 16:47:47 +00:00
Hugo Santos
8107b19403
Fixed some more TCP issues.
...
- Properly flag sockets using non-blocking connects() when in SYN SENT.
- and when in LISTEN, we should use the socket's connection queue size.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20631 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-10 05:28:56 +00:00
Hugo Santos
7664bcb5c4
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
2007-04-09 22:51:28 +00:00
Hugo Santos
055fcfbf98
added 'netcat', which is particularly helpful debugging TCP.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20628 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-09 22:51:08 +00:00
Hugo Santos
aab148f6b4
Set proper address on BindToEphemeral().
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20627 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-09 22:50:55 +00:00
Hugo Santos
a7edede46f
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
2007-04-09 09:34:47 +00:00
Hugo Santos
9261b12988
packet capture sockets are now properly notified when the device is going down.
...
- modified LinkProtocol::ReadData() a bit so it can safely react to external changes such as the device being monitored going down.
- fixed an issue in invalidate_routes() where in some cases the default route was being kept.
- fixed another issue related with the fifo implementation, the notifier semaphore was being created with count of 1, instead of 0.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20622 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-09 00:09:00 +00:00
Hugo Santos
6473469039
whenever an interface is deleted, call put_domain_datalink_protocols() so all readers are unregistered.
...
- Unfortunely this requires RX lock to become a recursive lock.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20621 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-08 22:00:52 +00:00
Hugo Santos
eaf517212a
introduced an ipv4_datagram datalink_module to handle the registration of the IPv4 reader instead of doing it in the ARP module.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20620 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-08 21:34:21 +00:00
Hugo Santos
7e6e645a87
Fixed a TCP issue reported by Stephan. Make sure we have enough PSH'ed bytes in the receive buffer before breaking the RX loop.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20619 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-08 21:34:11 +00:00
Hugo Santos
89de666412
notify all monitors when a device is being removed.
...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20615 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-08 09:30:00 +00:00