automake build system
[mech_eap.git] / src / drivers / driver_wired.c
index 68a3d73..de038e2 100644 (file)
 #include <net/if_arp.h>
 #include <net/if.h>
 #endif /* __linux__ */
-#if defined(__FreeBSD__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
 #include <net/if_dl.h>
-#endif /* defined(__FreeBSD__) || defined(__DragonFly__) */
+#endif /* defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) */
+#ifdef __sun__
+#include <sys/sockio.h>
+#endif /* __sun__ */
 
 #include "common.h"
 #include "eloop.h"
@@ -112,12 +115,14 @@ static int wired_multicast_membership(int sock, int ifindex,
 }
 
 
+#ifdef __linux__
 static void handle_data(void *ctx, unsigned char *buf, size_t len)
 {
 #ifdef HOSTAPD
        struct ieee8023_hdr *hdr;
        u8 *pos, *sa;
        size_t left;
+       union wpa_event_data event;
 
        /* must contain at least ieee8023_hdr 6 byte source, 6 byte dest,
         * 2 byte ethertype */
@@ -133,12 +138,13 @@ static void handle_data(void *ctx, unsigned char *buf, size_t len)
                case ETH_P_PAE:
                        wpa_printf(MSG_MSGDUMP, "Received EAPOL packet");
                        sa = hdr->src;
-                       hostapd_notif_new_sta(ctx, sa);
+                       os_memset(&event, 0, sizeof(event));
+                       event.new_sta.addr = sa;
+                       wpa_supplicant_event(ctx, EVENT_NEW_STA, &event);
 
                        pos = (u8 *) (hdr + 1);
                        left = len - sizeof(*hdr);
-
-                       hostapd_eapol_receive(ctx, sa, pos, left);
+                       drv_event_eapol_rx(ctx, sa, pos, left);
                break;
 
        default:
@@ -167,11 +173,11 @@ static void handle_read(int sock, void *eloop_ctx, void *sock_ctx)
 
 static void handle_dhcp(int sock, void *eloop_ctx, void *sock_ctx)
 {
-#ifdef HOSTAPD
        int len;
        unsigned char buf[3000];
        struct dhcp_message *msg;
        u8 *mac_address;
+       union wpa_event_data event;
 
        len = recv(sock, buf, sizeof(buf), 0);
        if (len < 0) {
@@ -191,13 +197,16 @@ static void handle_dhcp(int sock, void *eloop_ctx, void *sock_ctx)
        wpa_printf(MSG_MSGDUMP, "Got DHCP broadcast packet from " MACSTR,
                   MAC2STR(mac_address));
 
-       hostapd_notif_new_sta(eloop_ctx, mac_address);
-#endif /* HOSTAPD */
+       os_memset(&event, 0, sizeof(event));
+       event.new_sta.addr = mac_address;
+       wpa_supplicant_event(eloop_ctx, EVENT_NEW_STA, &event);
 }
+#endif /* __linux__ */
 
 
 static int wired_init_sockets(struct wpa_driver_wired_data *drv, u8 *own_addr)
 {
+#ifdef __linux__
        struct ifreq ifr;
        struct sockaddr_ll addr;
        struct sockaddr_in addr2;
@@ -297,6 +306,9 @@ static int wired_init_sockets(struct wpa_driver_wired_data *drv, u8 *own_addr)
        }
 
        return 0;
+#else /* __linux__ */
+       return -1;
+#endif /* __linux__ */
 }
 
 
@@ -453,6 +465,10 @@ static int wpa_driver_wired_multi(const char *ifname, const u8 *addr, int add)
        struct ifreq ifr;
        int s;
 
+#ifdef __sun__
+       return -1;
+#endif /* __sun__ */
+
        s = socket(PF_INET, SOCK_DGRAM, 0);
        if (s < 0) {
                perror("socket");
@@ -465,7 +481,7 @@ static int wpa_driver_wired_multi(const char *ifname, const u8 *addr, int add)
        ifr.ifr_hwaddr.sa_family = AF_UNSPEC;
        os_memcpy(ifr.ifr_hwaddr.sa_data, addr, ETH_ALEN);
 #endif /* __linux__ */
-#if defined(__FreeBSD__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
        {
                struct sockaddr_dl *dlp;
                dlp = (struct sockaddr_dl *) &ifr.ifr_addr;
@@ -477,7 +493,7 @@ static int wpa_driver_wired_multi(const char *ifname, const u8 *addr, int add)
                dlp->sdl_slen = 0;
                os_memcpy(LLADDR(dlp), addr, ETH_ALEN);
        }
-#endif /* defined(__FreeBSD__) || defined(__DragonFly__) */
+#endif /* defined(__FreeBSD__) || defined(__DragonFly__) || defined(FreeBSD_kernel__) */
 #if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
        {
                struct sockaddr *sap;