예제 #1
0
파일: mevent_eap.c 프로젝트: AllardJ/Tomato
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;
}
예제 #2
0
파일: mevent_eap.c 프로젝트: AllardJ/Tomato
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;
}
예제 #3
0
파일: dcs_eap.c 프로젝트: NieHao/Tomato-RAF
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;
}
예제 #4
0
파일: eapd_ecos.c 프로젝트: gygy/asuswrt
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;
}
예제 #5
0
파일: eapd_ecos.c 프로젝트: gygy/asuswrt
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;
}
예제 #6
0
파일: mevent_eap.c 프로젝트: AllardJ/Tomato
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;
}
예제 #7
0
파일: dcs_eap.c 프로젝트: NieHao/Tomato-RAF
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;
}