From 954038303d18f37b13632cf69949ab2f4ea7506a Mon Sep 17 00:00:00 2001 From: Hugo Santos Date: Tue, 1 May 2007 12:26:03 +0000 Subject: [PATCH] added add_multi/rem_multi to net_devices. Glued the interface protocol multicast handling with net_device via add_multi/rem_multi. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20947 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/net/net_device.h | 6 ++---- .../kernel/network/devices/ethernet/ethernet.cpp | 10 ++++------ .../kernel/network/devices/loopback/loopback.cpp | 16 ++++++++++++++++ src/add-ons/kernel/network/stack/datalink.cpp | 8 ++++---- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/headers/private/net/net_device.h b/headers/private/net/net_device.h index be919861bb..3a33b9dc07 100644 --- a/headers/private/net/net_device.h +++ b/headers/private/net/net_device.h @@ -55,10 +55,8 @@ struct net_device_module_info { status_t (*set_promiscuous)(struct net_device *device, bool promiscuous); status_t (*set_media)(struct net_device *device, uint32 media); - status_t (*get_multicast_addrs)(struct net_device *device, - net_hardware_address **addressArray, uint32 count); - status_t (*set_multicast_addrs)(struct net_device *device, - const net_hardware_address **addressArray, uint32 count); + status_t (*add_multi)(struct net_device *device, const sockaddr *); + status_t (*rem_multi)(struct net_device *device, const sockaddr *); }; #endif // NET_DEVICE_H diff --git a/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp b/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp index 3c213b2677..04d0c3a45e 100644 --- a/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp +++ b/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp @@ -380,8 +380,7 @@ ethernet_set_media(net_device *device, uint32 media) status_t -ethernet_get_multicast_addrs(struct net_device *device, - net_hardware_address **addressArray, uint32 count) +ethernet_add_multi(struct net_device *device, const sockaddr *address) { // TODO: see etherpci driver for details return EOPNOTSUPP; @@ -389,8 +388,7 @@ ethernet_get_multicast_addrs(struct net_device *device, status_t -ethernet_set_multicast_addrs(struct net_device *device, - const net_hardware_address **addressArray, uint32 count) +ethernet_rem_multi(struct net_device *device, const sockaddr *address) { // TODO: see etherpci driver for details return EOPNOTSUPP; @@ -463,8 +461,8 @@ net_device_module_info sEthernetModule = { ethernet_set_mtu, ethernet_set_promiscuous, ethernet_set_media, - ethernet_get_multicast_addrs, - ethernet_set_multicast_addrs + ethernet_add_multi, + ethernet_rem_multi, }; module_info *modules[] = { diff --git a/src/add-ons/kernel/network/devices/loopback/loopback.cpp b/src/add-ons/kernel/network/devices/loopback/loopback.cpp index aec82415ca..2d8be72143 100644 --- a/src/add-ons/kernel/network/devices/loopback/loopback.cpp +++ b/src/add-ons/kernel/network/devices/loopback/loopback.cpp @@ -192,6 +192,20 @@ loopback_set_media(net_device *device, uint32 media) } +status_t +loopback_add_multi(net_device *device, const sockaddr *address) +{ + return B_OK; +} + + +status_t +loopback_rem_multi(net_device *device, const sockaddr *address) +{ + return B_OK; +} + + static status_t loopback_std_ops(int32 op, ...) { @@ -222,6 +236,8 @@ net_device_module_info sLoopbackModule = { loopback_set_mtu, loopback_set_promiscuous, loopback_set_media, + loopback_add_multi, + loopback_rem_multi, }; module_info *modules[] = { diff --git a/src/add-ons/kernel/network/stack/datalink.cpp b/src/add-ons/kernel/network/stack/datalink.cpp index cf17b44856..3592e1a91c 100644 --- a/src/add-ons/kernel/network/stack/datalink.cpp +++ b/src/add-ons/kernel/network/stack/datalink.cpp @@ -803,8 +803,8 @@ static status_t interface_protocol_join_multicast(net_datalink_protocol *_protocol, const sockaddr *address) { - // TODO - return ENOTSUP; + interface_protocol *protocol = (interface_protocol *)_protocol; + return protocol->device_module->add_multi(protocol->device, address); } @@ -812,8 +812,8 @@ static status_t interface_protocol_leave_multicast(net_datalink_protocol *_protocol, const sockaddr *address) { - // TODO - return ENOTSUP; + interface_protocol *protocol = (interface_protocol *)_protocol; + return protocol->device_module->rem_multi(protocol->device, address); }