Commit Graph

5316 Commits

Author SHA1 Message Date
Axel Dörfler
df2895e0f8 * Automatic whitespace cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38119 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-15 13:24:41 +00:00
Axel Dörfler
44a3d0d1f6 * Spotted a few reference counting bugs that were probably responsible for
#6446, although I could not reproduce the exact problem.
* net_datalink::is_local_[link_]address() now releases a previous reference if
  the _interfaceAddress arguments does not point to NULL.
* When a buffer is received from a device, it's interface_address should be NULL
  already.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38118 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-15 13:21:42 +00:00
Axel Dörfler
11eccb54e2 * Added ability to be able to dump a net_interface by name.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38117 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-15 13:17:52 +00:00
Andreas Färber
be95e26df8 ATA: Type fix for byte swapping
Cast pointer arguments for B_HOST_TO_LENDIAN_INT32 to uint32.

Resolves warnings treated as errors for Big Endian targets.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38114 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-15 11:57:24 +00:00
Axel Dörfler
a89dbefb7d * On change_address(), arp_remove_local_enty() must not switch to the address
that caused the change (but that has not actually been changed yet).
* Also, it will now reset the INADDR_ANY local address in case there is no
  other address configured. This should help with automatic configuring after
  deletion of an interface address (though it doesn't seem to work yet for
  some other reason, at least in VMware).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38110 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-15 10:39:39 +00:00
Andreas Färber
756ea297c2 Firewire: Type fix for byte swapping
Cast return value of __swap_int32 to uint32_t, as suggested by Ingo.

Remedies uint32 %08x warnings treated as errors in the Big Endian code path.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38106 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-15 09:37:20 +00:00
Axel Dörfler
75148e0193 * Applied patch by Janito that fixes broken reverting when a rename operation
failed on last chance. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38103 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-14 18:41:52 +00:00
Stefano Ceccherini
cdb58cbb69 Fix a possible NULL dereference. CID 1582
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38102 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-14 17:34:02 +00:00
Axel Dörfler
8dcde8b128 * B_SOCKET_SET_ALIAS handling was leaking references.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38079 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-13 10:27:00 +00:00
Axel Dörfler
7e5d6acf69 * Added rlphy MII driver back to the rtl81xx driver - originally, I intended to
change the current MII management, but I ran out of time.
* This should fix bug #6295.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38078 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-13 09:10:53 +00:00
Axel Dörfler
8ccc01cf2d * Improved the output of the "net_domains" KDL command.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38077 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-13 08:02:40 +00:00
Axel Dörfler
095f97a6b6 * Fixed memory leaks pointed out by Stephan, thanks!
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38068 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-12 21:20:31 +00:00
Axel Dörfler
2c12b8a334 * Also report the address index back to the userland.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38059 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-12 13:45:18 +00:00
Axel Dörfler
14d0b44b79 * Applied the B_SOCKET_SET_ALIAS address retrieval logic to B_SOCKET_GET_ALIAS
as well (of course, no address is created automatically here).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38058 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-12 13:38:52 +00:00
Axel Dörfler
a271028e37 * Also create a new address for B_SOCKET_SET_ALIAS if the index is -1 - this
now has an almost equivalent logic to the old setters like SIOCSIFADDR.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38054 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-12 13:27:50 +00:00
Axel Dörfler
910ffb32fe * If the network mask, and broadcast are not specified with a B_SOCKET_SET_ALIAS
they will no longer be unset - instead they are set with defaults.
* If B_SOCKET_SET_ALIAS gets an index of -1, it will now try to find the local
  address, and if that fails, will just use the first address there is.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38053 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-12 13:25:45 +00:00
Axel Dörfler
3794b8e560 * Applied Atis latest changes to the IPv6 related modules. This brings them back
into a working state after the latest stack changes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38021 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-11 12:44:38 +00:00
Axel Dörfler
e8802e499c * datalink_control() also need to accept structures smaller than ifreq as long
as the interface name can be specified.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38015 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-11 11:41:54 +00:00
Axel Dörfler
28bbeaca96 * Removed the call to net_stack_module::register_domain_device_handler(), as
it's not needed for locally received buffers. This fixes a doubled
  initialization for a single device when there is more than a single domain
  involved. Reported by Atis.
* Fixed missing call to unregister_device_deframer() in case there was not
  enough memory to allocate the loopback_frame_protocol object.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38002 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-10 10:46:27 +00:00
Axel Dörfler
1ebd87f4e7 * As Atis pointed out, the SIOCSIFNETMASK here didn't make any sense, must have
been a copy&paste error.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38001 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-10 10:31:22 +00:00
Axel Dörfler
4af124a15a * We need to acquire references to the interface_address when copying/cloning
the buffer, and we also need to release it when freeing it.
* Adapted patch by Atis: append_cloned_data() now preserves the stored header;
  this is kind of bad, because it will not notice if the original header is
  removed, but this could probably just be documented this way.
* Also print the reference count of the interface addresses.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37993 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-09 19:03:39 +00:00
Axel Dörfler
c8b53acf35 * Also initialize the arp_protocol::local_address field, spotted by Atis,
thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37991 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-09 17:53:42 +00:00
Axel Dörfler
78abd72799 * Made the work-around that Atis added to ifconfig and the net_server
in order to be able to use SIOCSIFADDR (and friends) on a net yet added
  family superfluous; we now add a new address when needed on the fly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37990 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-09 17:08:41 +00:00
Axel Dörfler
1f9c8c4576 * Changed the _SIZEOF_ADDR_IFREQ() macro such that it can be used how we are
using it - hopefully, that is actually correct (it's adopted from FreeBSD).
* Fixed bug that cut off the sockaddr_dl reported by the system, so that DHCP
  wouldn't work anymore (and ifconfig wouldn't show the actual MAC address
  anymore).
* Changed the listing code to actually pad to ifreq size, and leave the length
  of the sockaddr untouched.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37941 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-06 12:58:02 +00:00
Axel Dörfler
8b6048a285 * The sockaddr_dl can actually be longer than sockaddr, so we need to use a
sockaddr_storage here (wasn't that bad before, as ifreq has a 30 bytes buffer
  after the sockaddr.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37940 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-06 12:55:51 +00:00
Axel Dörfler
081dd39e94 * Further improved debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37938 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-06 11:13:00 +00:00
Axel Dörfler
b0cf274a3f * Interface::_ChangeAddress() got the address check for equality wrong,
effectively rejecting any try to set an address.
* It now copies the new address as well in order to make sure that its
  sa_len field is set correctly.
* Improved debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37937 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-06 09:59:55 +00:00
Axel Dörfler
6b1e148824 * Only actually call change_address() of the net_datalink_protocols if the
address actually changed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37928 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-05 13:27:31 +00:00
Axel Dörfler
715fed4479 * Make sure the SIOCGIFCONF never returns an address with an address length
smaller than sizeof(sockaddr). This fixes a compatibility issue with other
  platforms - portable software often assumes that the amount of bytes to
  add to an ifreq structure is the larger amount between sizeof(ifreq), and
  basically what the _SIZEOF_ADDR_IFREQ() macro returns, instead of always
  relying on that macro.
* Renamed UserBuffer::Copy() to Push, ConsumedAmount() to BytesConsumed(),
  added Pad() method.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37927 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-05 13:17:12 +00:00
Axel Dörfler
cb51fb9e4d * Turns out it wasn't such a bright idea to reset the protocol in
arp_update_entry() for known entries, as it also uses that to update the
  timestamp.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37923 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-05 11:09:17 +00:00
Axel Dörfler
07ad8bb60e * We need to call arp_remove_local_entry() from arp_change_address() even if the
old address is NULL for anything but SIOCAIFADDR. Hopefully, this fixes the
  problem Rene is seeing.
* Make sure that arp_entry::protocol is not NULL before using it. This is
  necessary because of the possibility to manually set ARP entries.
* Further improved debug output.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37916 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-05 07:56:23 +00:00
Axel Dörfler
afbbc97abf * Improved debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37906 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-04 18:16:07 +00:00
Oliver Tappe
e0ea55e0a0 * added get_timezone_offset() to kernel, which returns the offset in seconds
* made FAT add-on use get_timezone_offset(), this time correctly adjusted for
  the difference in units (minutes/seconds)
This makes the times in our FAT-fs agree with Linux again, at least :-)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37905 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-04 17:11:47 +00:00
Philippe Houdoin
cc8eceb0af Report the actual error when read() or write() a network device failed.
This enable to actually detect and handle device removal (USB...).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-04 11:11:56 +00:00
Axel Dörfler
2b4154458a * Finished groundwork on ICMP by introducing a completely protocol agnostic
error mechanism.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37896 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-04 10:35:40 +00:00
Axel Dörfler
dc660d32ef * Call put_domain_protocols() without having the socket locked. This fixes bug
#5210.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37895 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-04 08:42:25 +00:00
Oliver Tappe
7e965f506d More consolidation of timezone code:
* dropped DaylightSavingTime from real_time_clock code in kernel, it was
  never really being used for what it meant (and just being referred to by
  gettimeofday(), which put a different meaning to it
* adjusted the syscalls get_timezone() & set_timezone() as well as their callers 
  accordingly
* got rid of get_rtc_info() and rtc_info struct in kernel, as it was only
  being referred to by the FAT add-on and that one (like gettimeofday()) put a
  different meaning to tz_minuteswest. Added a comment to FAT's util.c
  showing a possible solution, should the hardcoded GMT timezone pose a problem.
* fixed declaration of gettimeofday() to match POSIX base specs, issue 7
* changed implementation of gettimeofday() to not bother trying to fill struct
  timezone - it was using wrong values before, anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37888 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-03 23:02:57 +00:00
Axel Dörfler
7aa2819c12 * Enabled removing the interface on device removal again.
* Made the return type of remove_interface() void, as it cannot fail.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37884 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-03 19:33:05 +00:00
Axel Dörfler
2b1c0755dd * Renamed the proprietary SIOC_* ioctls to B_SOCKET_* - no reason to pollute
global name space, and have ugly identifiers for nothing :-)
* Added a flags field to struct ifaliasreq. Added flags to mark an alias that
  is currently being configured, or has been automatically configured.
  Those flags aren't used yet, but they will replace IFF_CONFIGURING and
  friends.
* Implemented deleting addresses only from interfaces via ifconfig.
* Added more command aliases for delete to ifconfig ("del", and "delete", for
  more consistency with route).
* Fixed control_routes() to only release a reference to an address if it
  actually got one before.
* If an interface address is deleted, its routes are now removed as well.
* InterfaceAddress now holds a reference to its interface as planned.
* Implemented removing interfaces. Works quite nicely.
* When downing an interface, all of its routes are now removed. When upping
  it again, at least the default routes are added.
* datalink.cpp's get_interface_name_or_index() leaked a reference to the
  interface found.
* SIOCAIFADDR would also leak a reference when new addresses were added.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37872 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-03 15:51:54 +00:00
Axel Dörfler
2651e51d92 * Renamed net_datalink_module::send_data() to send_routed_data(), and
send_datagram() to send_data().
* Renamed DatagramSocket::SocketEnqueue() to EnqueueClone(), SocketDequeue()
  to Dequeue().
* Ordered the methods in ProtocolUtilities.h according to their declaration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37870 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-03 12:00:06 +00:00
Axel Dörfler
03e02ed983 * Introduced a datalink layer (2) independent way of specifying the packet
type one wants to receive. Changed ipv6_datagram to use that (but note that
  it currently does not compile).
* Header cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37868 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-03 11:23:03 +00:00
Axel Dörfler
cd08b9f7bc * Work in progress of extending the AF_LINK protocol to be able to send and
receive raw packets (only without the ethernet framing).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37853 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 21:21:16 +00:00
Axel Dörfler
67678a989e * put_device_interface() now also accepts a NULL pointer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37852 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 21:17:33 +00:00
Axel Dörfler
edf1018372 * Removed a superfluous check.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37851 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 21:16:02 +00:00
Axel Dörfler
ca215dfe68 * Replaced more occurences of EOPNOTSUPP with B_NOT_SUPPORTED.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37847 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 16:27:44 +00:00
Axel Dörfler
fee56868a1 * Added a dedicated lock for the device monitors. This fixes a locking issue in
interface_protocol_send_data() which accessed the monitors unlocked.
* Changed SIOCCPACKETCAP to check if the device name matches the one used with
  SIOCSPACKETCAP.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37845 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 15:23:19 +00:00
Axel Dörfler
41f05b8607 * Made datalink and interface protocol module functions static.
* Got rid of datalink.h.
* Only allow sending/receiving of packets through AF_LINK for root (not that
  sending would be implemented yet).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37844 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 14:45:44 +00:00
Axel Dörfler
cb8adf5ed2 * Only allow raw sockets for root.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37843 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 14:18:26 +00:00
Axel Dörfler
845a29a054 * B_SELECT_{READ|WRITE|ERROR} are no flags fields, so they cannot be or'ed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37834 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 08:28:47 +00:00
Axel Dörfler
791fe8ec0f * Added new socket ioctls to strace, and the datalink debug output.
* Added a few more types to strace's network ioctls.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37807 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-29 09:54:46 +00:00
Axel Dörfler
9d771afb39 * Added Haiku specific socket ioctls to configure the interface aliases:
SIOC_IF_ALIAS_ADD, SIOC_IF_ALIAS_REMOVE, SIOC_IF_ALIAS_GET, SIOC_ALIAS_SET,
  and SIOC_IF_ALIAS_COUNT.
* Implemented all of those new ioctls, though they are yet untested.
* Added ifreq::ifr_data, and removed the hack in the FreeBSD compat if.h
  header.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37806 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-29 09:43:08 +00:00
Axel Dörfler
5b2bb28ea1 * Fixed typo that broke the build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37805 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-29 09:38:07 +00:00
Axel Dörfler
4d41aff0ac * Made sure is_empty_address() also detects AF_UNSPEC addresses as empty.
* The is_empty_address() function of AF_UNIX did not deal correctly with empty
  addresses.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37804 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-29 09:33:45 +00:00
Axel Dörfler
d72a2493e6 * Replaced ENODEV with B_DEVICE_NOT_FOUND.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37803 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-29 09:28:54 +00:00
Axel Dörfler
61729d9323 * Reworked the complete stack to allow more than one address per network
interface - this caused quite a number of changes.
* Network interfaces, and its addresses are now reference counted (not yet
  complete, though, InterfaceAddresses need to hold references to their
  interface as well).
* There are two known regressions of this commit that I will fix later:
  - you cannot remove interfaces anymore
  - IPv4 multicast was broken anyway, but now it's disabled, too.
* Moved a device_interfaces.cpp|h out of interfaces.cpp.
* The datalink layer chain is now instantiated per domain per interface,
  not just per interface anymore.
* When a buffer reaches the network layer, it has no known interface yet, ie.
  the ipv4|6|whatever modules need to set this manually.
* Added more debug output, and some new debugger commands, the control option
  is now printed in clear text.
* Added hash_address() function to the address modules. Added "const" to
  set_to_defaults() where needed.
* Fixed net_buffer's restore header functions offset use as reported by Atis.
* Improved buffer dump output, use the domain module to print the address if
  available.
* Moved net_buffer::type into the union, as it's not needed by the upper layers
  anymore.
* Moved IPv6 specific code from {add|remove}_default_route() to where it
  belongs, but disabled it for the time being.
* Completely discarded useless ipv4_datagram module.
* Added ping6 to the build.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37794 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-28 17:38:23 +00:00
Axel Dörfler
b216fbd077 * Applied next work in progress patch by Atis that takes into account most of
my comments so far. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37793 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-28 17:09:12 +00:00
Axel Dörfler
2e1729d050 * Removed _EndpointFor() again; DeliverError() is using _FindActiveEndpoint()
instead, ie. ICMP errors are only forwarded to connected UDP sockets.
* Also notify the DatagramSocket's dequeue loop if an error occurs - this makes
  udp_unreachable finally work as intended.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37714 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-23 10:24:19 +00:00
Axel Dörfler
988d8d4088 * If an error is notified, also forward the even to read/write.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37713 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-23 10:13:05 +00:00
Axel Dörfler
d62ee168ed * Corrected naming/visibility of the DatagramSocket methods (protected methods
do not get the '_' prefix, only private ones do).
* Added a "peek" argument to SocketStatus() (and generally renamed "clone" to
  "peek" where it made sense).
* Implemented the base version of SocketStatus() to return the actual socket
  error. This enables returning ICMP errors back to the socket user.
* Other minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37712 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-23 10:12:06 +00:00
Axel Dörfler
b0e48987f0 * ipv4_error_received() also needs to fill in the buffer's address, and
protocol, and cut off its IPv4 header before forwarding the buffer to the
  upper layers.
* Some minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37711 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-23 10:08:23 +00:00
Axel Dörfler
6404b00512 * We need to delay the checksum computation after the reply is complete.
* Also, we need to set the buffer's protocol.
* Now we actually send correct ICMP messages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37710 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-23 10:04:40 +00:00
Axel Dörfler
d98980a446 * dump_buffer() now also prints the stored header, if any, and a bit more data.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37709 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-23 10:02:10 +00:00
Axel Dörfler
437ecdb9d5 * We need to invalidate all routes belonging to the interface when removing it.
* This fixes the second problem mentioned in bug #6243, and therefore the bug
  itself.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37692 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 13:07:12 +00:00
Axel Dörfler
4ea113cd53 * Make sure the interface matches to the route if given. This fixes problem 1 of
bug #6243.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37691 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 13:00:23 +00:00
Axel Dörfler
74a4c33fda * Implemented a way to preserve header data while passing along a buffer to the
upper layers: you use the store_header() function to mark the header you want
  to preserve. All subsequent remove_header() calls won't claim the actual
  data, but only move the node start around.
* This header can then be restored by restore_header(). However, a call to
  prepend_data() will destroy the stored header. Also, if remove_header() cuts
  off a whole node, restoring the header won't succeed anymore.
* Discarded the no longer needed net_buffer::network_header field.
* Also discarded the hoplimit field which temporarily breaks the IPv6 build
  until Atis reworks it.
* IPv4 now also dumps the IP header in the send path if debug output is enabled.
* icmp_error_reply() might be called so early that the net_buffer's addresses
  do not point to the reply address; this is now detected, and the addresses are
  taken out of the IP header in that case.
* Improved dumping the net_buffer to also include its address, and flags.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37688 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 12:26:46 +00:00
Ingo Weinhold
0a1dabca7e Added public io_request_is_vip(), returning whether the given request has the
VIP flag set.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37678 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-22 11:08:34 +00:00
Oliver Tappe
0ea1aab28a * fixed a couple of regressions of r37670 concerning optional build targets
(bluetooth, ac3_decoder, netfs)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37672 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 23:10:57 +00:00
Oliver Tappe
eddec292d5 * applied patch by kaliber that fixes more than 100 warnings - thanks a lot!
Closes #6349

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37670 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 21:43:20 +00:00
Axel Dörfler
0a0bed1c7b * Improved debug output; ipv4 will now dump the whole header if TRACE_IPV4 is defined.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37661 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 16:23:38 +00:00
Axel Dörfler
2bb43d8246 * First (untested) steps into ICMP support for UDP: we should send port
unreached ICMP messages now, and at least signal an error to select() (there
  is no mechanism yet to actually forward the error to userland).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37651 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 14:57:28 +00:00
Axel Dörfler
fcea1b1665 * ICMP now removes its header before passing the error on to the upper levels.
* Therefore, IPv4 no longer needs to mess with that (incorrectly, anyway).
* Removed unused include, turned off ICMP debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37650 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 14:54:24 +00:00
Axel Dörfler
aea00dc3bc * deliver_multicast() now returns whether or not it delivered the buffer,
instead of always returning B_OK.
* deliver_multicast() now takes the protocol restriction of a raw socket into
  account.
* raw_receive_data() now correctly returns whether a buffer was delivered (due
  to the protocol restriction, this wasn't the case before).
* ipv4_receive_data() leaked all multicast buffers.
* Some minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37648 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 13:11:58 +00:00
Axel Dörfler
1978fb81ee * First part of ICMP support: this is based on the work by Ivo Vachkov (GSoC
2007), and Yin Qiu (GSoC 2008). And even though I needed to rewrite pretty
  much all of it because of the countless bugs and problems it had, it still
  shares the same architectural problems of introducing a domain dependent
  error mechanism to the upper layers, and needing the
  net_buffer::network_header hack. This I will rework later.
* net_buffer's append_size(), and prepend_size() will now gracefully handle
  buffers without a data node.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37647 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 12:00:27 +00:00
Ingo Weinhold
83f46ed6ab file_cache_write() can get a NULL buffer and still a size != 0, which the
request handling wasn't taking into account.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37640 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-21 09:55:04 +00:00
Axel Dörfler
8d1485fa06 Work in progress commit by Atis Elsts (I'm posting his ChangeLog comments
directly here), I made only a few style changes:
* introduced 'has_broadcast_address' field in
struct net_address_module_info
 - REVIEW: the name, and the status of this field for UNIX and L2CAP
	families
* ipv6 address family support
* ipv6 address printing	
* ipv6 protocol support	
* ipv6 multicast support
  - TODO: add and remove multicast routes in a more proper way
  - TODO: support MLD
* ipv6 datalink protocol support
* icmpv6 protocol support (EchoRequest and EchoResponse messages)
* ipv6 neigbor discovery protocol support
  (Advertisement and Solicitation messages)
  - TODO: only the very basic support is present,
	the protocol state machine is by no means completed
  - TODO: replying to Solicitation does not work too good ATM
	(visible, when pinging Haiku from outside)
* added Jenkin's hash algorith
* minor changes in existing IPv4 code - cleanup function
	ipv4_get_loopback_address(), written by myself
* add tests: raw, udp, tcp/udp, mullicast sender
* add 'hoplimit' field in struct net_buffer
  - TODO: this is just a hack, more generic approach would be  better.
* add 'receive_data' function pointer in
	struct net_datalink_protocol_module_info
  - TODO: this is also more like a hack, to support information
	passing from ICMPv6 to IPv6_datagram level.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37604 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 16:55:55 +00:00
Axel Dörfler
d869a06172 * Made the stack send out interface change notifications where needed (at least
hopefully :-)).
* Improved interface change notification to include the flags that changed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37594 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 13:48:16 +00:00
Axel Dörfler
51b6847f5f * Dump a line if an unhandled ICMP packet was received.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37584 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 11:10:45 +00:00
Axel Dörfler
0fc7ab7be6 * put_route() now survives being called with a NULL domain (TCP might do this).
* This fixes bug #6239.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37583 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 10:58:59 +00:00
Ingo Weinhold
ae3bba85bb Volume::Link(): Also unwrap the target vnode. The client FS would get a wrong
vnode pointer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37581 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 10:48:44 +00:00
Ingo Weinhold
08e2a0556c do_iterative_fd_io(): Don't fail when the getVecs callback returns
B_BUFFER_OVERFLOW. It will have returned valid vectors in this case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37572 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-19 01:14:02 +00:00
Ingo Weinhold
1977401106 Simplified Jamfiles. The drivers isn't built anyway, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37520 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-14 21:11:24 +00:00
Oliver Ruiz Dorantes
8638173cff - Implementation for sendto() & close(), tested over a Motorola V5
- Incomming command rejections not yet properly handled.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37486 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-12 22:08:11 +00:00
Oliver Ruiz Dorantes
ef36d96496 - Implement hook Connect()
- Polish l2cap signals negotiation



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37472 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-11 16:57:47 +00:00
Jérôme Duval
f0cbfc95e0 fix build with gcc4 and DEBUG
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37467 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-11 13:25:14 +00:00
Stephan Aßmus
a9ab7e7f24 Patch by Kaliber: Supported device list was missing terminator. Fixes ticket
#6286. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37441 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-09 15:52:35 +00:00
Axel Dörfler
4b0427bddc * Since the native rtl8169 is problematic on many chipsets (including mine),
I've removed it for now, until someone finds the time to look into it.
* Therefore, enabled all supported devices for the rtl81xx driver.
* Made the rtl81xx driver actually work by adding the missing PHYs - it doesn't
  use the same PHYs as the rtl8139 driver. Imported the rgephy.c|h from FreeBSD
  8 (not yet in vendor branch, but unchanged).
* It seems to work reliably with Gigabit now, albeit a bit slow, and with too
  high CPU load.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37425 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-08 07:04:44 +00:00
Stephan Aßmus
0f66fdc1b3 Patch by kaliber. Fixes mismatched types for the PCI domain attribute! Closes
#6269, thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37416 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-07 15:37:23 +00:00
Ithamar R. Adema
c4c6cedde6 * Work around a problem with a USB device (in my case, Qualcomm Gobi 3G modem) that reports interface_number values that are out of range with the interface_count. This would make the usb stack in Haiku crash.
Will need a different fix to get device to work, but at least Haiku won't crash on bootup with this change.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37409 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-05 20:51:59 +00:00
Ingo Weinhold
e66231742e Added a bit of stuff referenced by inline functions in private kernel
headers. GCC 2 has the unpleasant habit of actually linking the unused inline
functions in. That doesn't suffice to build the userlandfs server with debug
info (it would be the wrong file anyway), but allows to build checksumfs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37405 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-05 16:48:44 +00:00
Wim van der Meer
ac40d7205b Fixing the memory leak intruduced by my previous patch. Thanks to Ithamar for pointing this out.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37325 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-01 12:13:26 +00:00
Wim van der Meer
89e73c2bbc Fix to get rid of a 'deprecated conversion from string constant to 'char*'' warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37324 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-01 11:56:48 +00:00
Wim van der Meer
b1477985ef Add parentheses to get rid of 'suggest parentheses around && within ||' warnings.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37311 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-30 12:56:34 +00:00
Wim van der Meer
1daacc6b45 Initialize variables to get rid of '<foo> may be used uninitialized in this function' warnings.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37310 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-30 12:34:26 +00:00
Jérôme Duval
919f9c41da Patch from Janito Ferreira Filho with fixes by myself: Ext3 Indexed Directory Lookup (as part of GSOC).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37295 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-28 21:38:37 +00:00
Philippe Houdoin
307ff45454 Promoted newest 3dfx video driver by Gerald Zajac in place of the outdated tdfx driver.
Added to Haiku image.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37294 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-28 20:43:37 +00:00
Fredrik Holmqvist
cfb281bd72 ACPI Module info for prepare_sleep_state, enter_sleep_state, reboot didn't look to be right.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37260 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-26 09:59:36 +00:00
Ingo Weinhold
45bd7bb3db Removed unnecessary inclusions of <boot/kernel_args.h> in private kernel
headers and respectively added includes in source files.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37259 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-25 22:16:10 +00:00
Ingo Weinhold
b3dc81b1c6 Renamed to C++.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37255 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-25 13:39:06 +00:00
Philippe Houdoin
fd9fa13896 Style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37242 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-24 04:29:38 +00:00
Philippe Houdoin
a56bc48835 ImÃport new 3dfx graphics driver from Gerald Zajac (see #6215.
Supports Banshee, Voodoo3 and Voodoo5 chips.
It will be promoted as older tdfx replacement soon, but not until 
my small changes around phys_addr_t are validated.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37241 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-24 03:47:49 +00:00