コード例 #1
0
static void * hostap_init(struct hostapd_data *hapd)
{
    struct hostap_driver_data *drv;

    drv = os_zalloc(sizeof(struct hostap_driver_data));
    if (drv == NULL) {
        printf("Could not allocate memory for hostapd driver data\n");
        return NULL;
    }

    drv->hapd = hapd;
    drv->ioctl_sock = drv->sock = -1;
    memcpy(drv->iface, hapd->conf->iface, sizeof(drv->iface));

    drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
    if (drv->ioctl_sock < 0) {
        perror("socket[PF_INET,SOCK_DGRAM]");
        free(drv);
        return NULL;
    }

    if (hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD, 1)) {
        printf("Could not enable hostapd mode for interface %s\n",
               drv->iface);
        close(drv->ioctl_sock);
        free(drv);
        return NULL;
    }

    if (hapd->conf->assoc_ap &&
            hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD_STA, 1)) {
        printf("Could not enable hostapd STA mode for interface %s\n",
               drv->iface);
        close(drv->ioctl_sock);
        free(drv);
        return NULL;
    }

    if (hostap_init_sockets(drv)) {
        close(drv->ioctl_sock);
        free(drv);
        return NULL;
    }

    return drv;
}
コード例 #2
0
static void * hostap_init(struct hostapd_data *hapd,
			  struct wpa_init_params *params)
{
	struct hostap_driver_data *drv;

	drv = os_zalloc(sizeof(struct hostap_driver_data));
	if (drv == NULL) {
		printf("Could not allocate memory for hostapd driver data\n");
		return NULL;
	}

	drv->hapd = hapd;
	drv->ioctl_sock = drv->sock = -1;
	memcpy(drv->iface, params->ifname, sizeof(drv->iface));

	drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
	if (drv->ioctl_sock < 0) {
		wpa_printf(MSG_ERROR, "socket[PF_INET,SOCK_DGRAM]: %s",
			   strerror(errno));
		os_free(drv);
		return NULL;
	}

	if (hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD, 1)) {
		wpa_printf(MSG_ERROR,
			   "Could not enable hostapd mode for interface %s",
			   drv->iface);
		close(drv->ioctl_sock);
		os_free(drv);
		return NULL;
	}

	if (hostap_init_sockets(drv, params->own_addr) ||
	    hostap_wireless_event_init(drv)) {
		close(drv->ioctl_sock);
		os_free(drv);
		return NULL;
	}

	return drv;
}