예제 #1
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;
}
예제 #2
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;
}