int mevent_app_enabled(char *name) { char value[128], comb[32], prefix[8]; char os_name[IFNAMSIZ]; int unit; memset(os_name, 0, sizeof(os_name)); if (nvifname_to_osifname(name, os_name, sizeof(os_name))) return 0; if (wl_probe(os_name) || wl_ioctl(os_name, WLC_GET_INSTANCE, &unit, sizeof(unit))) return 0; if (osifname_to_nvifname(name, prefix, sizeof(prefix))) return 0; strcat(prefix, "_"); /* ignore if disabled */ eapd_safe_get_conf(value, sizeof(value), strcat_r(prefix, "radio", comb)); if (atoi(value) == 0) { EAPD_INFO("MEVENT:ignored interface %s. radio disabled\n", os_name); return 0; } /* ignore if BSS is disabled */ eapd_safe_get_conf(value, sizeof(value), strcat_r(prefix, "bss_enabled", comb)); if (atoi(value) == 0) { EAPD_INFO("MEVENT: ignored interface %s, %s is disabled \n", os_name, comb); return 0; } /* if come to here return enabled */ return 1; }
int mevent_app_deinit(eapd_wksp_t *nwksp) { eapd_mevent_t *mevent; eapd_cb_t *cb, *tmp_cb; if (nwksp == NULL) { EAPD_ERROR("Wrong argument...\n"); return -1; } mevent = &nwksp->mevent; cb = mevent->cb; while (cb) { /* close brcm drvSocket */ if (cb->brcmSocket) { EAPD_INFO("close mevent brcmSocket %d\n", cb->brcmSocket->drvSocket); eapd_del_brcm(nwksp, cb->brcmSocket); } tmp_cb = cb; cb = cb->next; free(tmp_cb); } /* close appSocke */ if (mevent->appSocket >= 0) { EAPD_INFO("close mevent appSocket %d\n", mevent->appSocket); close(mevent->appSocket); mevent->appSocket = -1; } return 0; }
int dcs_app_deinit(eapd_wksp_t *nwksp) { eapd_dcs_t *dcs; eapd_cb_t *cb, *tmp_cb; if (nwksp == NULL) { EAPD_ERROR("Wrong argument...\n"); return -1; } dcs = &nwksp->dcs; cb = dcs->cb; while (cb) { /* close brcm drvSocket */ if (cb->brcmSocket) { EAPD_INFO("close dcs brcmSocket %d\n", cb->brcmSocket->drvSocket); eapd_del_brcm(nwksp, cb->brcmSocket); } tmp_cb = cb; cb = cb->next; free(tmp_cb); } /* close appSocke */ if (dcs->appSocket >= 0) { EAPD_INFO("close dcs appSocket %d\n", dcs->appSocket); close(dcs->appSocket); dcs->appSocket = -1; } return 0; }
int eapd_main(void) { #ifdef BCMDBG char *dbg; /* get eapd_msg_level from nvram */ if ((dbg = nvram_safe_get("eapd_dbg"))) { eapd_msg_level = (uint)strtoul(dbg, NULL, 0); } #endif /* BCMDBG */ EAPD_INFO("EAP Dispatch Start...\n"); /* fill up EAPD task pid */ _eapd_pid = oslib_pid(); /* alloc eapd work space */ if (!(eapd_nwksp = eapd_wksp_alloc_workspace())) { EAPD_ERROR("Unable to allocate wksp memory. Quitting...\n"); return -1; } if (eapd_wksp_auto_config(eapd_nwksp)) { EAPD_ERROR("Unable to auto config. Quitting...\n"); eapd_wksp_cleanup(eapd_nwksp); return -1; } /* run main loop to dispatch messages */ eapd_wksp_main_loop(eapd_nwksp); return 0; }
int eapd_preauth_open(eapd_wksp_t *nwksp, eapd_preauth_socket_t *sock) { char devname[32]; if (nwksp == NULL || sock == NULL) { EAPD_ERROR("Wrong arguments...\n"); return -1; } sprintf(devname, "/dev/net/eapol/%s/%d", sock->ifname, ETHER_TYPE_802_1X_PREAUTH); sock->drvSocket = open(devname, O_RDWR); if (sock->drvSocket < 0) { EAPD_ERROR("open socket error!!\n"); return -1; } /* at least one use it */ sock->inuseCount = 1; EAPD_INFO("%s: preauth socket %d opened\n", sock->ifname, sock->drvSocket); return 0; }
int mevent_app_init(eapd_wksp_t *nwksp) { int reuse = 1; eapd_mevent_t *mevent; eapd_cb_t *cb; struct sockaddr_in addr; if (nwksp == NULL) return -1; mevent = &nwksp->mevent; mevent->appSocket = -1; cb = mevent->cb; if (cb == NULL) { EAPD_INFO("No any mevent application need to run.\n"); return 0; } while (cb) { EAPD_INFO("mevent: init brcm interface %s \n", cb->ifname); cb->brcmSocket = eapd_add_brcm(nwksp, cb->ifname); if (!cb->brcmSocket) return -1; /* set this brcmSocket have MEVENT capability */ cb->brcmSocket->flag |= EAPD_CAP_MEVENT; cb = cb->next; } /* appSocket for mevent */ mevent->appSocket = socket(AF_INET, SOCK_DGRAM, 0); if (mevent->appSocket < 0) { EAPD_ERROR("UDP Open failed.\n"); return -1; } #if defined(__ECOS) if (setsockopt(mevent->appSocket, SOL_SOCKET, SO_REUSEPORT, (char*)&reuse, sizeof(reuse)) < 0) { EAPD_ERROR("UDP setsockopt failed.\n"); close(mevent->appSocket); mevent->appSocket = -1; return -1; } #else if (setsockopt(mevent->appSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)) < 0) { EAPD_ERROR("UDP setsockopt failed.\n"); close(mevent->appSocket); mevent->appSocket = -1; return -1; } #endif /* __ECOS */ memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(EAPD_WKSP_MEVENT_UDP_RPORT); if (bind(mevent->appSocket, (struct sockaddr *)&addr, sizeof(addr)) < 0) { EAPD_ERROR("UDP Bind failed, close mevent appSocket %d\n", mevent->appSocket); close(mevent->appSocket); mevent->appSocket = -1; return -1; } EAPD_INFO("MEVENT appSocket %d opened\n", mevent->appSocket); return 0; }
int dcs_app_init(eapd_wksp_t *nwksp) { int reuse = 1; eapd_dcs_t *dcs; eapd_cb_t *cb; struct sockaddr_in addr; if (nwksp == NULL) return -1; dcs = &nwksp->dcs; dcs->appSocket = -1; cb = dcs->cb; if (cb == NULL) { EAPD_INFO("No any DCS application need to run.\n"); return 0; } while (cb) { EAPD_INFO("dcs: init brcm interface %s \n", cb->ifname); cb->brcmSocket = eapd_add_brcm(nwksp, cb->ifname); if (!cb->brcmSocket) return -1; /* set this brcmSocket have DCS capability */ cb->brcmSocket->flag |= EAPD_CAP_DCS; cb = cb->next; } /* appSocket for dcs */ dcs->appSocket = socket(AF_INET, SOCK_DGRAM, 0); if (dcs->appSocket < 0) { EAPD_ERROR("UDP Open failed.\n"); return -1; } #if defined(__ECOS) if (setsockopt(dcs->appSocket, SOL_SOCKET, SO_REUSEPORT, (char*)&reuse, sizeof(reuse)) < 0) { EAPD_ERROR("UDP setsockopt failed.\n"); close(dcs->appSocket); dcs->appSocket = -1; return -1; } #else if (setsockopt(dcs->appSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)) < 0) { EAPD_ERROR("UDP setsockopt failed.\n"); close(dcs->appSocket); dcs->appSocket = -1; return -1; } #endif memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(EAPD_WKSP_DCS_UDP_RPORT); if (bind(dcs->appSocket, (struct sockaddr *)&addr, sizeof(addr)) < 0) { EAPD_ERROR("UDP Bind failed, close dcs appSocket %d\n", dcs->appSocket); close(dcs->appSocket); dcs->appSocket = -1; return -1; } EAPD_INFO("DCS appSocket %d opened\n", dcs->appSocket); return 0; }