int mevent_app_sendup(eapd_wksp_t *nwksp, uint8 *pData, int pLen, char *from) { eapd_mevent_t *mevent; if (nwksp == NULL) { EAPD_ERROR("Wrong argument...\n"); return -1; } mevent = &nwksp->mevent; if (mevent->appSocket >= 0) { /* send to mevent */ int sentBytes = 0; struct sockaddr_in to; to.sin_addr.s_addr = inet_addr(EAPD_WKSP_UDP_ADDR); to.sin_family = AF_INET; to.sin_port = htons(EAPD_WKSP_MEVENT_UDP_SPORT); sentBytes = sendto(mevent->appSocket, pData, pLen, 0, (struct sockaddr *)&to, sizeof(struct sockaddr_in)); if (sentBytes != pLen) { EAPD_ERROR("UDP send failed; sentBytes = %d\n", sentBytes); } else { /* EAPD_ERROR("Send %d bytes to mevent\n", sentBytes); */ } } else { EAPD_ERROR("mevent appSocket not created\n"); } 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 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_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; }