be used everywhere.
* This also fixes a panic when deleting interfaces (an already deleted
lock was unlocked).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29902 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Fixed all route locking problems, of which there were numerous
({add|remove}_route(), and list_routes() did not lock at all). Added
lock assertions in functions that don't do the locking themselves.
* A route will now be removed from the list in remove_route(), not in
put_route_internal(). Before, a route could easily be removed twice, causing
remove_route() to release references it did not own. This fixes bug #2706.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29386 a95241bf-73f2-0310-859d-f6bbb57e9c96
old invalid user listeners yet, though (ie. if a team dies).
* Implemented userland network monitor functions.
* Added a few notifications to the network stack, even though this part isn't
complete yet (especially notify_interface_changed()).
* Added optional debug output to the notifications module.
* Added the module to the image, it basically works now (tested).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28825 a95241bf-73f2-0310-859d-f6bbb57e9c96
* This makes it possible to select a specific device, even if no interface
has been configured for it yet. To make it work, each interface now has a
private direct route which will be returned if a socket is bound to a device.
* This will be used for example in DHCP to make it work when more than one
adapter is attached.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27983 a95241bf-73f2-0310-859d-f6bbb57e9c96
the module name, possibly causing a crash when you delete an interface.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27950 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Adjusted code using recursive locks respectively. The initialization
cannot fail anymore, and it is possible to use recursive locks in the
early boot process (even uninitialized, if in BSS), which simplifies
things a little.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25687 a95241bf-73f2-0310-859d-f6bbb57e9c96
- The net_stack driver is no longer used. Instead we have a kernel
module which is directly used by syscall implementations in the
kernel. I.e. we no longer tunnel those functions through ioctls, but
have normal syscalls.
- Removed the superfluous net starter module.
- Implemented the FDTYPE_SOCKET type file_descriptors, that is sockets
are no longer vnode based.
- Adjusted libnetwork (the socket function implementations)
accordingly.
- Adjusted netstat accordingly.
* Socket module:
- Implemented socketpair().
- Added "kernel" parameter to the control hook. Quite a few more hooks
would actually need the parameter, but I didn't change those yet,
since that would probably also require changes to the protocol
module interface.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24908 a95241bf-73f2-0310-859d-f6bbb57e9c96
- 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
- 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
- Introduced public net_device_monitor.
- Changed the link protocol to maintain a lock per instance instead of inside the FIFO. Now all of the link instance data is protected.
- Adapted the link protocol to use net_device_monitor.
- Introduced a private Fifo class which doesn't maintain it's own lock.
- Maybe we should add something like a public net_protocol_implementation which maintains a fifo and a benaphore? With the fifo using the structure's lock instead of maintaining it's own.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20614 a95241bf-73f2-0310-859d-f6bbb57e9c96
- fixed a issue in add_interface_to_domain where the device interface's refcount was always incremented since that function was getting the device interface handle and not returning it unconditionlly
- if the ethernet device goes down, and the fd is close()ed, return B_FILE_ERROR instead of calling into the driver again
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20601 a95241bf-73f2-0310-859d-f6bbb57e9c96
- remove all routes that use interfaces going down.
- when a device is going down, remove associated domain interfaces.
- interfaces weren't getting a properly referenced device interface, fixed.
- down call down_device_interface when deleting a interface, instead set it down and let the upcounts do its job.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20600 a95241bf-73f2-0310-859d-f6bbb57e9c96
* The device interface list now uses class DoublyLinkedList instead of struct list.
* Implemented SIOC[SG]IFMEDIA for setting (not supported by any device yet), and
retrieving the device media information.
* Fixed a locking bug in list_domain_interfaces().
* Added new stack function device_link_changed() that should be called in case the
link state (media) changed.
* The ethernet device module now spawns a thread and will periodically check the media
state of all ethernet devices that support this (if any).
* Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20546 a95241bf-73f2-0310-859d-f6bbb57e9c96
to cover the case the list of interfaces changed since SIOCGIFCOUNT was called.
Patch by Hugo Santos.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20491 a95241bf-73f2-0310-859d-f6bbb57e9c96
bring it down in that case). This fixes the problem that you couldn't bring an
ethernet interface up again, after you deleted it once.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19524 a95241bf-73f2-0310-859d-f6bbb57e9c96