Commit Graph
25 Commits
Author SHA1 Message Date
Axel Dörfler bc85ccf5f3 * init_data_node() is now called init_first_data_node(), and also sets
data_header::first_node to that node. It will also remove some of the
  burden of the callers with regard to setting its members correctly.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20651 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-11 10:17:26 +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 a5d8483183 small cleanup, use get_node_at_offset().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-05 20:45:10 +00:00
Hugo Santos cb711badc1 some cleanups by introducing get_node_at_offset
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20504 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-01 20:23:16 +00:00
Axel Dörfler 10f5cebea3 Added temporary possibility to dump a net_buffer via the buffer module.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19671 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-01 19:09:57 +00:00
Axel Dörfler c0d50aaedb Fixed several problems:
* sockaddr_storage::ss_len is max 255, but the structure itself is shorter; we must
  not copy ss_len bytes without checking the length first (duplicate & clone were affected).
* count_iovecs() & get_iovecs() both did not work with empty buffers that don't
  have any nodes at all (unlikely case, but should be supported).
* the net_buffer::offset union field was not copied in clone & duplicate.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19555 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-18 19:13:59 +00:00
Axel Dörfler d344e18b94 Calmed down net_buffer and IPv4 a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19429 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-05 02:21:06 +00:00
Axel Dörfler c31e5df06c count_iovecs() and get_iovecs() now only take nodes into account that contain data.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19426 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-04 17:49:47 +00:00
Axel Dörfler cdd2dcca7f * Forgot to set the data_node::located in clone_buffer().
* No need to set data_node::header in the loop - this is already done in add_data_node().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19408 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-01 11:58:37 +00:00
Axel Dörfler 8ad667cb0b * After my recent change, append_size() did not work correctly anymore, if
the initial buffer wasn't empty.
* Enlarged the minimum header size a bit (one more data_node).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19406 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-12-01 09:45:23 +00:00
Axel Dörfler 4dbe78a0cd Discarded the use of data_header::size in the last commit, but forgot to actually
remove it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19385 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-11-28 23:22:19 +00:00
Axel Dörfler 49961c1489 * Fixed a stupid bug in append_size() - it rounded the size-per-data_header value,
so that the buffer could be smaller than the one requested.
* Rewrote data_node management in the header; now, every data_node knows where it's
  placed, and can be actually discarded as needed.
* Rewrote free space management in the header: there is now a free chunk list, so
  that all memory can be reused (it's currently only used for data_nodes anyway).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19382 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-11-28 23:00:33 +00:00
Axel Dörfler fc8c0ec946 * Small optimization for set_timer(): now only removes the timer from the list
if it won't be added anymore.
* Small fix for set_timer(): now set the timer->due field back to 0 when a
  timer is removed - this prevented a timer from being correctly readded later
  (possible crash)!
* net_buffer's append_cloned_data() now does some more checks to prevent unnecessary
  work and detect wrong arguments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19375 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-11-26 23:18:36 +00:00
Axel Dörfler 224e38e302 Added function to append cloned data from another buffer (to be used by TCP).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19370 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-11-25 14:30:54 +00:00
Axel Dörfler 604d21a600 * Added an offset/sequence field to the net_buffer - this can and will be used
by the TCP implementation for its reorder and retransmit queues.
* The ipv4_fragment is no longer needed, as we can use the above field there
  as well - this saves one extra allocation per received fragment.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19369 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-11-25 11:29:36 +00:00
Axel Dörfler 2e95d2f425 Fixed a bunch of bugs in the net_buffer implementation; it didn't crash before,
but it also didn't create valid buffers in a number of cases:
* remove_header() did not work correctly if more than one node had to be
  removed or came after the first node to be kept.
* prepend_size() did not update the offset of the following nodes.
* write_data() and read_data() both did not update the data pointer, and thus
  always copied the same data to every node.
* merge_buffer() inserted the nodes in the wrong order when prepending a buffer.
* added a dump_buffer() function and lots of additional debug output (currently
  commented out)
* simplified split_buffer() a bit more.
* implemented remove_trailer().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19068 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-15 01:12:54 +00:00
Axel Dörfler 08d85bd298 Reverted back to r18850 - since we won't keep that version anyway (due to the
slab allocator we'll have one day), I don't feel like digging in an fixing its
bugs.
IOW local pings won't crash the kernel anymore, are no longer detected as
duplicates, and loopback does work now as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19066 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-10-14 19:42:43 +00:00
Axel Dörfler 8d07a4ae75 Our heap doesn't like big allocations, use areas instead - this fixes bug #875.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18982 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-29 23:29:21 +00:00
Axel Dörfler 02cc779b7d Moved datastore implementation into net_buffer.cpp - there is no reason to clobber the kernel with it.
This also fixes the issue of exporting a C++ API from the kernel.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18974 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-28 18:27:30 +00:00
Andrew Galante 0054baf8c9 A few bugfixes to prepend_size and append_size so they don't create unnecessary empty nodes. Minor cleanup to ipv4.cpp.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18951 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-27 18:56:06 +00:00
Andrew Galante 86780a1f7f Revamp of the net_buffer code, using a datastore. I removed the data_header struct, but this means having to malloc() all the data_node objects - There may be a speed benefit in storing these in a datastore as well. As a consequence, most of the buffer functions are much simpler, if recursive at times. I don't see this as a big problem, as most buffers will only utilize a few data_nodes at a time.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-21 02:54:47 +00:00
Marcus Overhagen 4462d8b41b implemented split_buffer()
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18850 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-14 23:04:54 +00:00
Axel Dörfler c22d69bf1f * Completed the previous commit and merger of the team/network/new_stack branch.
* Removed ppp_up and pppcontrol from the image for now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18457 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-08 13:07:07 +00:00