From 89361fb14e514a17888cc2ab8091d3bead307433 Mon Sep 17 00:00:00 2001 From: Hugo Santos Date: Tue, 1 May 2007 12:41:44 +0000 Subject: [PATCH] ethernet_device's add_multi/rem_multi now call into the driver using the ETHER_ADDMULTI/ETHER_REMMULTI ioctls. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20948 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../network/devices/ethernet/ethernet.cpp | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp b/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp index 04d0c3a45e..3c1a99d4bb 100644 --- a/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp +++ b/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp @@ -380,18 +380,36 @@ ethernet_set_media(net_device *device, uint32 media) status_t -ethernet_add_multi(struct net_device *device, const sockaddr *address) +ethernet_add_multi(struct net_device *_device, const sockaddr *_address) { - // TODO: see etherpci driver for details - return EOPNOTSUPP; + ethernet_device *device = (ethernet_device *)_device; + + if (_address->sa_family != AF_DLI) + return EINVAL; + + const sockaddr_dl *address = (const sockaddr_dl *)_address; + if (address->sdl_type != IFT_ETHER) + return EINVAL; + + return ioctl(device->fd, ETHER_ADDMULTI, address->sdl_data, + address->sdl_alen); } status_t -ethernet_rem_multi(struct net_device *device, const sockaddr *address) +ethernet_rem_multi(struct net_device *_device, const sockaddr *_address) { - // TODO: see etherpci driver for details - return EOPNOTSUPP; + ethernet_device *device = (ethernet_device *)_device; + + if (_address->sa_family != AF_DLI) + return EINVAL; + + const sockaddr_dl *address = (const sockaddr_dl *)_address; + if (address->sdl_type != IFT_ETHER) + return EINVAL; + + return ioctl(device->fd, ETHER_REMMULTI, address->sdl_data, + address->sdl_alen); }