/* * 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; }
/* * 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; }
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; }