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; }
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; }