static int hostap_wireless_event_init(void *priv) { struct hostap_driver_data *drv = priv; int s; struct sockaddr_nl local; hostap_get_we_version(drv); drv->wext_sock = -1; s = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (s < 0) { perror("socket(PF_NETLINK,SOCK_RAW,NETLINK_ROUTE)"); return -1; } memset(&local, 0, sizeof(local)); local.nl_family = AF_NETLINK; local.nl_groups = RTMGRP_LINK; if (bind(s, (struct sockaddr *) &local, sizeof(local)) < 0) { perror("bind(netlink)"); close(s); return -1; } eloop_register_read_sock(s, hostapd_wireless_event_receive, drv, NULL); drv->wext_sock = s; return 0; }
static int hostap_wireless_event_init(struct hostap_driver_data *drv) { struct netlink_config *cfg; hostap_get_we_version(drv); cfg = os_zalloc(sizeof(*cfg)); if (cfg == NULL) return -1; cfg->ctx = drv; cfg->newlink_cb = hostapd_wireless_event_rtm_newlink; drv->netlink = netlink_init(cfg); if (drv->netlink == NULL) { os_free(cfg); return -1; } return 0; }