Signed-off-by: Sabrina Dubroca <sd@xxxxxxxxxxxxxxx> --- src/drivers/driver_macsec_qca.c | 32 ++-------------------- src/drivers/driver_wired.c | 28 ------------------- src/drivers/driver_wired_common.c | 57 +++++++++++++++++++++++++++++++++++++++ src/drivers/driver_wired_common.h | 1 + src/drivers/drivers.mak | 6 +++++ 5 files changed, 66 insertions(+), 58 deletions(-) create mode 100644 src/drivers/driver_wired_common.c diff --git a/src/drivers/driver_macsec_qca.c b/src/drivers/driver_macsec_qca.c index ee00d2fc77a5..5308aacd9afa 100644 --- a/src/drivers/driver_macsec_qca.c +++ b/src/drivers/driver_macsec_qca.c @@ -76,34 +76,6 @@ struct macsec_qca_data { }; -static int macsec_qca_multicast_membership(int sock, int ifindex, - const u8 *addr, int add) -{ -#ifdef __linux__ - struct packet_mreq mreq; - - if (sock < 0) - return -1; - - os_memset(&mreq, 0, sizeof(mreq)); - mreq.mr_ifindex = ifindex; - mreq.mr_type = PACKET_MR_MULTICAST; - mreq.mr_alen = ETH_ALEN; - os_memcpy(mreq.mr_address, addr, ETH_ALEN); - - if (setsockopt(sock, SOL_PACKET, - add ? PACKET_ADD_MEMBERSHIP : PACKET_DROP_MEMBERSHIP, - &mreq, sizeof(mreq)) < 0) { - wpa_printf(MSG_ERROR, "setsockopt: %s", strerror(errno)); - return -1; - } - return 0; -#else /* __linux__ */ - return -1; -#endif /* __linux__ */ -} - - static int macsec_qca_get_ssid(void *priv, u8 *ssid) { ssid[0] = 0; @@ -341,7 +313,7 @@ static void * macsec_qca_init(void *ctx, const char *ifname) drv->common.iff_up = 1; } - if (macsec_qca_multicast_membership(drv->common.pf_sock, + if (wired_multicast_membership(drv->common.pf_sock, if_nametoindex(drv->common.ifname), pae_group_addr, 1) == 0) { wpa_printf(MSG_DEBUG, @@ -392,7 +364,7 @@ static void macsec_qca_deinit(void *priv) int flags; if (drv->common.membership && - macsec_qca_multicast_membership(drv->common.pf_sock, + wired_multicast_membership(drv->common.pf_sock, if_nametoindex(drv->common.ifname), pae_group_addr, 0) < 0) { wpa_printf(MSG_DEBUG, diff --git a/src/drivers/driver_wired.c b/src/drivers/driver_wired.c index 1dd4ee1a15ab..ed7d83675dab 100644 --- a/src/drivers/driver_wired.c +++ b/src/drivers/driver_wired.c @@ -77,34 +77,6 @@ struct dhcp_message { }; -static int wired_multicast_membership(int sock, int ifindex, - const u8 *addr, int add) -{ -#ifdef __linux__ - struct packet_mreq mreq; - - if (sock < 0) - return -1; - - os_memset(&mreq, 0, sizeof(mreq)); - mreq.mr_ifindex = ifindex; - mreq.mr_type = PACKET_MR_MULTICAST; - mreq.mr_alen = ETH_ALEN; - os_memcpy(mreq.mr_address, addr, ETH_ALEN); - - if (setsockopt(sock, SOL_PACKET, - add ? PACKET_ADD_MEMBERSHIP : PACKET_DROP_MEMBERSHIP, - &mreq, sizeof(mreq)) < 0) { - wpa_printf(MSG_ERROR, "setsockopt: %s", strerror(errno)); - return -1; - } - return 0; -#else /* __linux__ */ - return -1; -#endif /* __linux__ */ -} - - #ifdef __linux__ static void handle_data(void *ctx, unsigned char *buf, size_t len) { diff --git a/src/drivers/driver_wired_common.c b/src/drivers/driver_wired_common.c new file mode 100644 index 000000000000..86af221bd962 --- /dev/null +++ b/src/drivers/driver_wired_common.c @@ -0,0 +1,57 @@ +/* + * Common functions for Wired Ethernet driver interfaces + * Copyright (c) 2005-2009, Jouni Malinen <j@xxxxx> + * Copyright (c) 2004, Gunter Burchardt <tira@xxxxxx> + * + * This software may be distributed under the terms of the BSD license. + * See README for more details. + */ + +#include "includes.h" + +#include "common.h" +#include "eloop.h" +#include "driver.h" + +#include <sys/ioctl.h> +#include <net/if.h> +#ifdef __linux__ +#include <netpacket/packet.h> +#include <net/if_arp.h> +#include <net/if.h> +#endif /* __linux__ */ +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) +#include <net/if_dl.h> +#include <net/if_media.h> +#endif /* defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) */ +#ifdef __sun__ +#include <sys/sockio.h> +#endif /* __sun__ */ + +#include "driver_wired_common.h" + +int wired_multicast_membership(int sock, int ifindex, const u8 *addr, int add) +{ +#ifdef __linux__ + struct packet_mreq mreq; + + if (sock < 0) + return -1; + + os_memset(&mreq, 0, sizeof(mreq)); + mreq.mr_ifindex = ifindex; + mreq.mr_type = PACKET_MR_MULTICAST; + mreq.mr_alen = ETH_ALEN; + os_memcpy(mreq.mr_address, addr, ETH_ALEN); + + if (setsockopt(sock, SOL_PACKET, + add ? PACKET_ADD_MEMBERSHIP : PACKET_DROP_MEMBERSHIP, + &mreq, sizeof(mreq)) < 0) { + wpa_printf(MSG_ERROR, "setsockopt: %s", strerror(errno)); + return -1; + } + return 0; +#else /* __linux__ */ + return -1; +#endif /* __linux__ */ +} diff --git a/src/drivers/driver_wired_common.h b/src/drivers/driver_wired_common.h index 8d9dd370bf9e..d3fd480d6e16 100644 --- a/src/drivers/driver_wired_common.h +++ b/src/drivers/driver_wired_common.h @@ -22,4 +22,5 @@ struct driver_wired_common_data { static const u8 pae_group_addr[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 }; +int wired_multicast_membership(int sock, int ifindex, const u8 *addr, int add); #endif /* DRIVER_WIRED_COMMON_H */ diff --git a/src/drivers/drivers.mak b/src/drivers/drivers.mak index c6d3f8181808..282da5035398 100644 --- a/src/drivers/drivers.mak +++ b/src/drivers/drivers.mak @@ -15,11 +15,17 @@ DRV_AP_LIBS = ifdef CONFIG_DRIVER_WIRED DRV_CFLAGS += -DCONFIG_DRIVER_WIRED DRV_OBJS += ../src/drivers/driver_wired.o +NEED_DRV_WIRED_COMMON=1 endif ifdef CONFIG_DRIVER_MACSEC_QCA DRV_CFLAGS += -DCONFIG_DRIVER_MACSEC_QCA DRV_OBJS += ../src/drivers/driver_macsec_qca.o +NEED_DRV_WIRED_COMMON=1 +endif + +ifdef NEED_DRV_WIRED_COMMON +DRV_OBJS += ../src/drivers/driver_wired_common.o endif ifdef CONFIG_DRIVER_NL80211 -- 2.10.2 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap