コード例 #1
0
/*
 * Called when link closing with auth fail
 */
int
authfail_main(int argc, char **argv)
{
	char *wan_ifname = safe_getenv("IFNAME");
	char *wan_linkname = safe_getenv("LINKNAME");
	char tmp[100], prefix[] = "wanXXXXXXXXXX_";
	int unit;

	_dprintf("%s():: %s\n", __FUNCTION__, argv[0]);

	/* Get unit from LINKNAME: ppp[UNIT] */
	if ((unit = ppp_linkunit(wan_linkname)) < 0)
		return 0;

	_dprintf("%s: unit=%d ifname=%s\n", __FUNCTION__, unit, wan_ifname);
	snprintf(prefix, sizeof(prefix), "wan%d_", unit);

	/* Stop triggering demand connection */
	if (nvram_get_int(strcat_r(prefix, "pppoe_demand", tmp)))
		nvram_set_int(strcat_r(prefix, "pppoe_demand", tmp), 1);

	// override wan_state
	update_wan_state(prefix, WAN_STATE_STOPPED, WAN_STOPPED_REASON_PPP_AUTH_FAIL);

	_dprintf("%s:: done\n", __FUNCTION__);
	return 0;
}
コード例 #2
0
/*
 * Called when link goes down
 */
int
ipdown_main(int argc, char **argv)
{
	char *wan_ifname = safe_getenv("IFNAME");
	char *wan_linkname = safe_getenv("LINKNAME");
	char tmp[100], prefix[] = "wanXXXXXXXXXX_";
	int unit;

	_dprintf("%s():: %s\n", __FUNCTION__, argv[0]);

	/* Get unit from LINKNAME: ppp[UNIT] */
	if ((unit = ppp_linkunit(wan_linkname)) < 0)
		return 0;

	_dprintf("%s: unit=%d ifname=%s\n", __FUNCTION__, unit, wan_ifname);
	snprintf(prefix, sizeof(prefix), "wan%d_", unit);

#ifdef RTCONFIG_IPV6
	wait_ppp_count = -2;
#endif

	wan_down(wan_ifname);

	// override wan_state to get real reason
	update_wan_state(prefix, WAN_STATE_STOPPED, pppstatus());

	unlink(strcat_r("/tmp/ppp/link.", wan_ifname, tmp));

	preset_wan_routes(wan_ifname);

	_dprintf("%s:: done\n", __FUNCTION__);
	return 0;
}
コード例 #3
0
ファイル: auth.c プロジェクト: gonzopancho/asuswrt
int
wpacli_main(int argc, char **argv)
{
	char tmp[100];
	char prefix[] = "wanXXXXXXXXXX_";
	int unit;

	if (argc < 3 || (unit = wan_ifunit(argv[1])) < 0)
		return EINVAL;
	snprintf(prefix, sizeof(prefix), "wan%d_", unit);

	if (!nvram_match(strcat_r(prefix, "auth_x", tmp), "8021x-md5"))
		return 0;

	if (strncmp(argv[2], "CONNECTED", sizeof("CONNECTED")) == 0)
	{
		/* Called only once, no action */
	}
	if (strncmp(argv[2], "EAP-SUCCESS", sizeof("EAP-SUCCESS")) == 0)
	{
		/* Called multiple times on success (re)auth */
		logmessage("802.1x client", "authenticated");
		/* TODO: refresh dhcp? */
	} else
	if (strncmp(argv[2], "EAP-FAILURE", sizeof("EAP-FAILURE")) == 0)
	{
		/* Called every/multiple times on (re)auth fail and/or timeout */
		if (nvram_get_int(strcat_r(prefix, "state_t", tmp)) != WAN_STATE_STOPPED)
			logmessage("802.1x client", "authentication failed");

		/* Reuse auth-fail state */
		update_wan_state(prefix, WAN_STATE_STOPPED, WAN_STOPPED_REASON_PPP_AUTH_FAIL);
	}
	if (strncmp(argv[2], "DISCONNECTED", sizeof("DISCONNECTED")) == 0)
	{
		/* Called only once, no action */
	}

	return 0;
}