Commit Graph
100 Commits
Author SHA1 Message Date
Hugo Santos 73f1548be1 some getsockopt/setsockopt and multicast fixes.
* allow an ipv4 bind() to a multicast address.
 * bumped getsockopt/setsockopt kernel driver buffers to 256 bytes to at least handle structures which take one sockaddr_storage.
 * convert generic multicast delta API names to IPv4 ones before handling the specific option.
 * changed ipv4_getsockopt/ipv4_setsockopt a bit as the code gcc 2.95 was generating was a bit too funky.
 * properly pass setsockopt/getsockopt to handling protocols.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20939 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 19:42:12 +00:00
Hugo Santos 75f1f9e04a added two more test multicast applications: multicat/multisend. sockaddr_in6/in6_addr must be visible through <netinet/in.h>, fixed that as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20926 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 16:56:58 +00:00
Hugo Santos 0086fe2095 possibly fix to #1190, the endpoint wasn't being unlinked on Free().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20924 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 16:04:38 +00:00
Hugo Santos 57967505c2 fixed getsockopt/setsockopt callchains. also fixed the cleanup of multicast filters.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20923 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 12:32:08 +00:00
Hugo Santos 3df919a7a0 added 'ipv4_multicast' debugger command.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20922 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 12:31:57 +00:00
Hugo Santos a3debe29d7 simple test multicast application.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20921 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 12:31:47 +00:00
Hugo Santos 0e30c21c70 ipv4: changed the multicast filter to use an hash table to keep source states.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20920 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 12:31:31 +00:00
Hugo Santos 8cfe0be38e slab/cache: a couple more fixes.
- on CACHE_DURING_BOOT init benaphore count with 1.
 - account for allocated space on early_allocate_pages.
 - fixed slab position calculation in small slabs.
 - we can now init all allocator sizes early rather than later.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20914 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 01:08:05 +00:00
Hugo Santos 698b6d7195 cache/slab: when CACHE_DURING_BOOT is specified, use vm_allocate_early to obtain pages for slabs, and create the associated areas on post bootup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 22:58:46 +00:00
Hugo Santos 39af445966 added object_cache_reserve to allow cache users to pre-allocate slabs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20912 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 21:45:23 +00:00
Hugo Santos 11debaf6e4 added CACHE_UNLOCKED_PAGES flag to allow caches' pages to be created with no locking instead of full locking.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20911 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 20:55:44 +00:00
Hugo Santos 6b783773bf use OpenHashTable in IPv4's MulticastGroups.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20910 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 20:55:33 +00:00
Hugo Santos 15945a11c6 added 'tcp_endpoints' and 'tcp_endpoint' debugger commands.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20909 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 19:30:20 +00:00
Hugo Santos cf5d9f4b8d added 'udp_endpoints' debugger command.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20908 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 19:03:06 +00:00
Hugo Santos 14342a6767 cache allocator: keep allocation waste statistics. added debugger command 'show_waste'.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 15:28:31 +00:00
Hugo Santos c49aa60ace cache allocator: for allocations > 8k create areas, and delete them on free.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 15:13:09 +00:00
Hugo Santos 0be6e97788 minimal cleanups
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20901 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 13:11:30 +00:00
Hugo Santos 9a9cba598a don't need TRACE_SLAB by default now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20898 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 03:41:10 +00:00
Hugo Santos 172b3066aa fixed the cache allocator's size_to_cache.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 03:33:51 +00:00
Hugo Santos 6bad493439 pushed the slab init a bit deeper. added a object cache based allocator, including a bootstrap mechanism to have it init during bootup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20896 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 02:23:37 +00:00
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