#define VISUALSOURCE 1 /* * dd-wrt.c * * Copyright (C) 2005 - 2007 Sebastian Gottschall * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Id: */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include #ifdef HAVE_OVERCLOCKING static unsigned int type2_clocks[7] = { 200, 240, 252, 264, 300, 330, 0 }; static unsigned int type3_clocks[3] = { 150, 200, 0 }; static unsigned int type4_clocks[10] = { 192, 200, 216, 228, 240, 252, 264, 280, 300, 0 }; static unsigned int type7_clocks[10] = { 183, 187, 198, 200, 216, 225, 233, 237, 250, 0 }; #endif #ifdef HAVE_RT2880 #define IFMAP(a) getRADev(a) #else #define IFMAP(a) (a) #endif void show_ipnetmask(webs_t wp, char *var) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); char *ipv = nvram_nget("%s_ipaddr", var); websWrite(wp, ".", var, get_single_ip(ipv, 0)); websWrite(wp, ".", var, get_single_ip(ipv, 1)); websWrite(wp, ".", var, get_single_ip(ipv, 2)); websWrite(wp, "\n", var, get_single_ip(ipv, 3)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); ipv = nvram_nget("%s_netmask", var); websWrite(wp, ".", var, get_single_ip(ipv, 0)); websWrite(wp, ".", var, get_single_ip(ipv, 1)); websWrite(wp, ".", var, get_single_ip(ipv, 2)); websWrite(wp, "", var, get_single_ip(ipv, 3)); websWrite(wp, "
\n"); } #ifdef HAVE_OVERCLOCKING void ej_show_clocks(webs_t wp, int argc, char_t ** argv) { int rev = cpu_plltype(); unsigned int *c; if (rev == 2) c = type2_clocks; else if (rev == 3) c = type3_clocks; else if (rev == 4) c = type4_clocks; else if (rev == 7) c = type7_clocks; else { websWrite(wp, "\n\n"); return; } websWrite(wp, "
\n"); websWrite(wp, "\n\n"); } #endif void ej_show_routing(webs_t wp, int argc, char_t ** argv) { websWrite(wp, "\n"); return; } #ifdef HAVE_BUFFALO extern void *getUEnv(char *name); #endif void ej_show_connectiontype(webs_t wp, int argc, char_t ** argv) { websWrite(wp, "\n"); #ifdef HAVE_MODEMBRIDGE websWrite(wp, "\n", nvram_selmatch(wp, "wan_proto", "bridge") ? "selected=\"selected\"" : ""); #endif #ifdef HAVE_PPPOE websWrite(wp, "\n", nvram_selmatch(wp, "wan_proto", "pppoe") ? "selected=\"selected\"" : ""); #endif #ifdef HAVE_PPPOATM websWrite(wp, "\n", nvram_selmatch(wp, "wan_proto", "pppoa") ? "selected=\"selected\"" : ""); #endif #ifdef HAVE_PPTP websWrite(wp, "\n", nvram_selmatch(wp, "wan_proto", "pptp") ? "selected=\"selected\"" : ""); #endif #ifdef HAVE_L2TP websWrite(wp, "\n", nvram_selmatch(wp, "wan_proto", "l2tp") ? "selected=\"selected\"" : ""); #endif #ifdef HAVE_HEARTBEAT websWrite(wp, "\n", nvram_selmatch(wp, "wan_proto", "heartbeat") ? "selected=\"selected\"" : ""); #endif #ifdef HAVE_3G #ifdef HAVE_BUFFALO char *region = getUEnv("region"); if (!region) { region = "US"; } if (!strcmp(region, "EU") || !strcmp(region, "DE") || nvram_match("umts_override", "1")) { #endif websWrite(wp, "\n", nvram_selmatch(wp, "wan_proto", "3g") ? "selected=\"selected\"" : ""); #ifdef HAVE_BUFFALO } #endif #endif return; } void ej_show_infopage(webs_t wp, int argc, char_t ** argv) { /* * #ifdef HAVE_NEWMEDIA websWrite(wp,"
\n"); websWrite(wp,"
GGEW net GmbH
\n"); websWrite(wp,"
Dammstrasse 68
\n"); websWrite(wp,"
64625 Bensheim
\n"); websWrite(wp,"
\n"); * websWrite(wp,"
\n"); websWrite(wp,"
\n"); * websWrite(wp,"
\n"); websWrite(wp,"
In Kooperation mit NewMedia-NET GmbH
\n"); * websWrite(wp,"
\n"); * websWrite(wp,"
\n"); #endif */ return; } void ej_dumpmeminfo(webs_t wp, int argc, char_t ** argv) { FILE *fcpu = fopen("/proc/meminfo", "r"); if (fcpu == NULL) { return; } char buf[128]; int n = 0; rept:; if (n == EOF) { fclose(fcpu); return; } if (n) websWrite(wp, "'%s'", buf); n = fscanf(fcpu, "%s", buf); if (n != EOF) websWrite(wp, ","); goto rept; } #ifdef HAVE_STORM #define HARDFREQ "300" #elif HAVE_OPENRISC #define HARDFREQ "166" #elif HAVE_LAGUNA #define FREQLINE 2 #elif HAVE_RT3052 #ifdef HAVE_HOTPLUG2 #define FREQLINE 7 #else #define FREQLINE 4 #endif #elif defined(HAVE_DANUBE) #define FREQLINE 6 #elif HAVE_RT2880 #ifdef HAVE_HOTPLUG2 #define FREQLINE 7 #else #define FREQLINE 4 #endif #elif HAVE_XSCALE #define FREQLINE 2 #elif defined(HAVE_MAGICBOX) || defined(HAVE_RB600) #define FREQLINE 3 #elif defined(HAVE_FONERA) || defined(HAVE_SOLO51) || defined(HAVE_ADM5120) || defined(HAVE_MERAKI) || defined(HAVE_LS2) || defined(HAVE_LS5) || defined(HAVE_WHRAG108) || defined(HAVE_TW6600) || defined(HAVE_CA8) || defined(HAVE_RB500) #ifdef HAVE_HOTPLUG2 #define FREQLINE 5 #else #define FREQLINE 4 #endif #elif defined(HAVE_PB42) || defined(HAVE_LSX) #define FREQLINE 5 #elif HAVE_X86 void ej_get_clkfreq(webs_t wp, int argc, char_t ** argv) { FILE *fp = fopen("/proc/cpuinfo", "rb"); if (fp == NULL) { websWrite(wp, "unknown"); return; } int cnt = 0; int b = 0; while (b != EOF) { b = getc(fp); if (b == ':') cnt++; if (cnt == 8) { getc(fp); char cpuclk[32]; int i = 0; b = getc(fp); while (b != 0xa && b != 0xd && b != 0x20) { cpuclk[i++] = b; b = getc(fp); } cpuclk[i++] = 0; websWrite(wp, cpuclk); fclose(fp); return; } } fclose(fp); websWrite(wp, "unknown"); return; } #else void ej_get_clkfreq(webs_t wp, int argc, char_t ** argv) { char *clk = nvram_get("clkfreq"); if (clk == NULL) { if (getcpurev() == 0) //BCM4710 websWrite(wp, "125"); else if (getcpurev() == 29) //BCM5354 websWrite(wp, "240"); else websWrite(wp, "unknown"); return; } char buf[64]; strcpy(buf, clk); int i = 0; while (buf[i++] != 0) { if (buf[i] == ',') buf[i] = 0; } websWrite(wp, buf); return; } #endif #if defined(FREQLINE) void ej_get_clkfreq(webs_t wp, int argc, char_t ** argv) { FILE *fp = fopen("/proc/cpuinfo", "rb"); if (fp == NULL) { websWrite(wp, "unknown"); return; } int cnt = 0; int b = 0; while (b != EOF) { b = getc(fp); if (b == ':') cnt++; if (cnt == FREQLINE) { getc(fp); char cpuclk[7]; int i; for (i = 0; i < 6; i++) { int c = getc(fp); if (c == EOF || c == '\n' || c == '.' || c == 0) break; cpuclk[i] = c; } cpuclk[i] = 0; websWrite(wp, cpuclk); fclose(fp); return; } } fclose(fp); websWrite(wp, "unknown"); return; } #undef FREQLINE #elif defined(HARDFREQ) void ej_get_clkfreq(webs_t wp, int argc, char_t ** argv) { websWrite(wp, HARDFREQ); return; } #undef HARDFREQ #endif void ej_show_cpuinfo(webs_t wp, int argc, char_t ** argv) { #ifdef HAVE_IPR char *str = "rev 1.2"; #else char *str = cpustring(); #endif if (!str) { websWrite(wp, "Not Detected!\n"); return; } websWrite(wp, str); } #define ASSOCLIST_TMP "/tmp/.wl_assoclist" #define RSSI_TMP "/tmp/.rssi" #define ASSOCLIST_CMD "wl assoclist" #define RSSI_CMD "wl rssi" #define NOISE_CMD "wl noise" void ej_show_wds_subnet(webs_t wp, int argc, char_t ** argv) { int index = -1; char *interface; #ifdef FASTWEB ejArgs(argc, argv, "%d %s", &index, &interface); #else if (ejArgs(argc, argv, "%d %s", &index, &interface) < 2) { websError(wp, 400, "Insufficient args\n"); return; } #endif char br1[32]; sprintf(br1, "%s_br1_enable", interface); if (nvram_invmatch(br1, "1")) return; char buf[16]; sprintf(buf, "%s_wds%d_enable", interface, index); websWrite(wp, "\n", nvram_selmatch(wp, buf, "2") ? "selected=\\\"selected\\\"" : ""); return; } #ifdef HAVE_SKYTRON void ej_active_wireless2(webs_t wp, int argc, char_t ** argv) { int rssi = 0, noise = 0; FILE *fp, *fp2; char *mode; char mac[30]; char list[2][30]; char line[80]; unlink(ASSOCLIST_TMP); unlink(RSSI_TMP); mode = nvram_safe_get("wl_mode"); sysprintf("%s > %s", ASSOCLIST_CMD, ASSOCLIST_TMP); int connected = 0; if ((fp = fopen(ASSOCLIST_TMP, "r"))) { while (fgets(line, sizeof(line), fp) != NULL) { if (sscanf(line, "%s %s", list[0], mac) != 2) // assoclist // 00:11:22:33:44:55 continue; if (strcmp(list[0], "assoclist")) break; rssi = 0; noise = 0; // get rssi value if (strcmp(mode, "ap")) sysprintf("%s > %s", RSSI_CMD, RSSI_TMP); else sysprintf("%s \"%s\" > %s", RSSI_CMD, mac, RSSI_TMP); // get noise value if not ap mode if (strcmp(mode, "ap")) sysprintf("%s >> %s", NOISE_CMD, RSSI_TMP); fp2 = fopen(RSSI_TMP, "r"); if (fgets(line, sizeof(line), fp2) != NULL) { // get rssi if (sscanf (line, "%s %s %d", list[0], list[1], &rssi) != 3) continue; // get noise for client/wet mode if (strcmp(mode, "ap") && fgets(line, sizeof(line), fp2) != NULL && sscanf(line, "%s %s %d", list[0], list[1], &noise) != 3) continue; fclose(fp2); } if (nvram_match("maskmac", "1")) { mac[0] = 'x'; mac[1] = 'x'; mac[3] = 'x'; mac[4] = 'x'; mac[6] = 'x'; mac[7] = 'x'; mac[9] = 'x'; mac[10] = 'x'; } if (strcmp(mode, "ap") != 0) { connected = 1; websWrite(wp, "\n"); websWrite(wp, "Verbindungsstatus\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "Verbunden\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "Signal\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "%d dBm\n", rssi); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "Rauschen\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "%d dBm\n", noise); websWrite(wp, "\n"); } } fclose(fp); } unlink(ASSOCLIST_TMP); unlink(RSSI_TMP); if (!connected) { connected = 1; websWrite(wp, "\n"); websWrite(wp, "Verbindungsstatus\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "Nicht Verbunden\n"); websWrite(wp, "\n"); } return 0; } #endif void ej_show_paypal(webs_t wp, int argc, char_t ** argv) { #ifdef HAVE_DDLAN websWrite(wp, "support@mcdd.de
"); #endif #ifdef HAVE_CORENET websWrite(wp, "http://www.corenetsolutions.com
"); #endif #ifndef CONFIG_BRANDING #ifndef HAVE_REGISTER websWrite(wp, "DD-WRT
"); websWrite(wp, "
"); websWrite(wp, ""); websWrite(wp, ""); websWrite(wp, ""); websWrite(wp, ""); websWrite(wp, ""); websWrite(wp, ""); websWrite(wp, ""); websWrite(wp, ""); websWrite(wp, "
"); websWrite(wp, "

\n"); websWrite(wp, "\n"); // #ifdef HAVE_MICRO // websWrite (wp, // "\"donate\n"); // #else websWrite(wp, "\"donate\n"); // #endif websWrite(wp, "\n"); #endif #endif return; } #ifdef HAVE_RADLOCAL void ej_show_iradius_check(webs_t wp, int argc, char_t ** argv) { char *sln = nvram_safe_get("iradius_count"); if (sln == NULL || strlen(sln) == 0) return; int leasenum = atoi(sln); int i; for (i = 0; i < leasenum; i++) { websWrite(wp, "if(F._iradius%d_active)\n", i); websWrite(wp, "if(F._iradius%d_active.checked == true)\n", i); websWrite(wp, "F.iradius%d_active.value=1\n", i); websWrite(wp, "else\n"); websWrite(wp, "F.iradius%d_active.value=0\n", i); websWrite(wp, "if(F._iradius%d_delete)\n", i); websWrite(wp, "if(F._iradius%d_delete.checked == true)\n", i); websWrite(wp, "F.iradius%d_delete.value=1\n", i); websWrite(wp, "else\n"); websWrite(wp, "F.iradius%d_delete.value=0\n", i); } } void ej_show_iradius(webs_t wp, int argc, char_t ** argv) { char *sln = nvram_safe_get("iradius_count"); if (sln == NULL || strlen(sln) == 0) return; int leasenum = atoi(sln); if (leasenum == 0) return; int i; char username[32]; char *o, *userlist; cprintf("get collection\n"); char *u = nvram_get_collection("iradius"); cprintf("collection result %s", u); if (u != NULL) { userlist = (char *)safe_malloc(strlen(u) + 1); strcpy(userlist, u); free(u); o = userlist; } else { userlist = NULL; o = NULL; } cprintf("display = chain\n"); struct timeval now; gettimeofday(&now, NULL); for (i = 0; i < leasenum; i++) { snprintf(username, 31, "iradius%d_name", i); char *sep = NULL; if (userlist) sep = strsep(&userlist, " "); websWrite(wp, "\n"); websWrite(wp, "", username); websWrite(wp, "\n", username, sep != NULL ? sep : ""); websWrite(wp, "\n"); if (userlist) sep = strsep(&userlist, " "); char active[32]; snprintf(active, 31, "iradius%d_active", i); websWrite(wp, "\n"); websWrite(wp, "", active); websWrite(wp, "\n", sep, active, sep != NULL ? strcmp(sep, "1") == 0 ? "checked=\"checked\"" : "" : ""); websWrite(wp, "\n"); websWrite(wp, "\n"); if (userlist) sep = strsep(&userlist, " "); long t = atol(sep); if (t != -1) { t -= now.tv_sec; t /= 60; } snprintf(active, 31, "iradius%d_lease", i); char st[32]; if (t >= 0) sprintf(st, "%d", t); else sprintf(st, "over"); websWrite(wp, "\n", active, st); websWrite(wp, "\n"); websWrite(wp, "\n"); snprintf(active, 31, "iradius%d_delete", i); websWrite(wp, "", active); websWrite(wp, "\n", active); websWrite(wp, "\n"); } if (o != NULL) free(o); return; } #endif #ifdef HAVE_CHILLILOCAL void ej_show_userlist(webs_t wp, int argc, char_t ** argv) { char *sln = nvram_safe_get("fon_usernames"); if (sln == NULL || strlen(sln) == 0) return; int leasenum = atoi(sln); if (leasenum == 0) return; int i; char username[32]; char password[32]; char *u = nvram_safe_get("fon_userlist"); char *userlist = (char *)safe_malloc(strlen(u) + 1); strcpy(userlist, u); char *o = userlist; for (i = 0; i < leasenum; i++) { snprintf(username, 31, "fon_user%d_name", i); char *sep = strsep(&userlist, "="); websWrite(wp, "\n"); websWrite(wp, "\n", username, sep != NULL ? sep : ""); websWrite(wp, "\n"); sep = strsep(&userlist, " "); snprintf(password, 31, "fon_user%d_password", i); websWrite(wp, "\n"); websWrite(wp, "\n", password); websWrite(wp, "\n"); } free(o); return; } #endif void ej_show_staticleases(webs_t wp, int argc, char_t ** argv) { int i; // cprintf("get static leasenum"); char *sln = nvram_safe_get("static_leasenum"); // cprintf("check null"); if (sln == NULL || strlen(sln) == 0) return; // cprintf("atoi"); int leasenum = atoi(sln); // cprintf("leasenum==0"); if (leasenum == 0) return; // cprintf("get leases"); char *nvleases = nvram_safe_get("static_leases"); char *leases = (char *)safe_malloc(strlen(nvleases) + 1); char *originalpointer = leases; // strsep destroys the pointer by // moving it strcpy(leases, nvleases); for (i = 0; i < leasenum; i++) { char *sep = strsep(&leases, "="); websWrite(wp, "", i, sep != NULL ? sep : ""); sep = strsep(&leases, "="); websWrite(wp, "", i, sep != NULL ? sep : ""); sep = strsep(&leases, "="); websWrite(wp, "\n", i, sep != NULL ? sep : ""); sep = strsep(&leases, " "); websWrite(wp, "\n", i, sep != NULL ? sep : ""); } free(originalpointer); return; } void ej_show_control(webs_t wp, int argc, char_t ** argv) { #ifdef CONFIG_BRANDING websWrite(wp, "Control Panel"); #else websWrite(wp, "DD-WRT Control Panel"); #endif return; } #ifdef HAVE_AQOS void ej_show_default_level(webs_t wp, int argc, char_t ** argv) { websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", nvram_match("svqos_defaults", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
WAN Up
\n"); websWrite(wp, "\n", nvram_safe_get("default_uplevel")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
WAN Down
\n"); websWrite(wp, "\n", nvram_safe_get("default_downlevel")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
LAN
\n"); websWrite(wp, "\n", nvram_default_get("default_lanlevel", "100000")); websWrite(wp, "
\n"); websWrite(wp, "

\n"); return; } #endif static char *selmatch(char *var, char *is, char *ret) { if (nvram_match(var, is)) return ret; return ""; } static void show_security_prefix(webs_t wp, int argc, char_t ** argv, char *prefix, int primary) { static char var[80]; static char sta[80]; // char p2[80]; cprintf("show security prefix\n"); sprintf(var, "%s_security_mode", prefix); // strcpy(p2,prefix); // rep(p2,'X','.'); // websWrite (wp, "\n",p2); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); rep(prefix, 'X', '.'); cprintf("ej show wpa\n"); ej_show_wpa_setting(wp, argc, argv, prefix); } static void ej_show_security_single(webs_t wp, int argc, char_t ** argv, char *prefix) { char *next; char var[80]; char ssid[80]; char mac[16]; sprintf(mac, "%s_hwaddr", prefix); char *vifs = nvram_nget("%s_vifs", prefix); if (vifs == NULL) return; sprintf(ssid, "%s_ssid", prefix); websWrite(wp, "

%s

\n", prefix); websWrite(wp, "
\n"); // cprintf("getting %s %s\n",ssid,nvram_safe_get(ssid)); websWrite(wp, " %s SSID [", IFMAP(prefix)); tf_webWriteESCNV(wp, ssid); // fix for broken html page if ssid // contains html tag websWrite(wp, "] HWAddr [%s]\n", nvram_safe_get(mac)); show_security_prefix(wp, argc, argv, prefix, 1); websWrite(wp, "
\n
\n"); foreach(var, vifs, next) { sprintf(ssid, "%s_ssid", var); websWrite(wp, "
\n"); // cprintf("getting %s %s\n", ssid,nvram_safe_get(ssid)); websWrite(wp, " %s SSID [", IFMAP(var)); tf_webWriteESCNV(wp, ssid); // fix for broken html page if ssid // contains html tag sprintf(mac, "%s_hwaddr", var); if (nvram_get(mac)) websWrite(wp, "] HWAddr [%s", nvram_safe_get(mac)); websWrite(wp, "]\n"); rep(var, '.', 'X'); show_security_prefix(wp, argc, argv, var, 0); websWrite(wp, "
\n
\n"); } } void ej_show_security(webs_t wp, int argc, char_t ** argv) { #ifndef HAVE_MADWIFI int c = get_wl_instances(); int i; for (i = 0; i < c; i++) { char buf[16]; sprintf(buf, "wl%d", i); ej_show_security_single(wp, argc, argv, buf); } return; #else int c = getdevicecount(); int i; for (i = 0; i < c; i++) { char buf[16]; sprintf(buf, "ath%d", i); ej_show_security_single(wp, argc, argv, buf); } return; #endif } void ej_show_dhcpd_settings(webs_t wp, int argc, char_t ** argv) { int i; if (getWET()) // dhcpd settings disabled in client bridge mode, so we wont display it return; websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); if (nvram_match("dhcpfwd_enable", "1")) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); char *ipfwd = nvram_safe_get("dhcpfwd_ip"); websWrite(wp, "...
\n", get_single_ip(ipfwd, 0), get_single_ip(ipfwd, 1), get_single_ip(ipfwd, 2), get_single_ip(ipfwd, 3)); } else { char buf[20]; prefix_ip_get("lan_ipaddr", buf, 1); websWrite(wp, "
\n"); // char *nv = nvram_safe_get ("wan_wins"); websWrite(wp, "
 \n", nvram_match("lan_proto", "dhcp") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n", nvram_match("lan_proto", "static") ? "checked=\"checked\"" : ""); websWrite(wp, "
%s", buf); websWrite(wp, "", nvram_safe_get("dhcp_start")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", nvram_safe_get("dhcp_num")); websWrite(wp, "
\n"); websWrite(wp, "
\n", nvram_safe_get("dhcp_lease")); if (nvram_invmatch("wan_proto", "static")) { websWrite(wp, "
\n"); websWrite(wp, "
1
"); websWrite(wp, ""); for (i = 0; i < 4; i++) websWrite(wp, "%s", i, i == 3 ? 254 : 255, get_dns_ip("wan_dns", 0, i), i < 3 ? "." : ""); websWrite(wp, "\n
\n
\n"); websWrite(wp, "
2
"); for (i = 0; i < 4; i++) websWrite(wp, "%s", i, i == 3 ? 254 : 255, get_dns_ip("wan_dns", 1, i), i < 3 ? "." : ""); websWrite(wp, "\n
\n
\n"); websWrite(wp, "
3
"); for (i = 0; i < 4; i++) websWrite(wp, "%s", i, i == 3 ? 254 : 255, get_dns_ip("wan_dns", 2, i), i < 3 ? "." : ""); websWrite(wp, "\n
"); } websWrite(wp, "
\n"); websWrite(wp, "
WINS
\n"); websWrite(wp, "\n"); char *wins = nvram_safe_get("wan_wins"); for (i = 0; i < 4; i++) { websWrite(wp, "%s", i, i == 3 ? 254 : 255, get_single_ip(wins, i), i < 3 ? "." : ""); } websWrite(wp, "
\n
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", nvram_match("dhcp_dnsmasq", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", nvram_match("dns_dnsmasq", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", nvram_match("auth_dnsmasq", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); } websWrite(wp, "

\n"); return; } #ifdef HAVE_MADWIFI void ej_show_wifiselect(webs_t wp, int argc, char_t ** argv) { char *next; char var[32]; int count = getdevicecount(); if (count < 1) return; if (count == 1 && strlen(nvram_safe_get("ath0_vifs")) == 0) return; websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } #else void ej_show_wifiselect(webs_t wp, int argc, char_t ** argv) { char *next; char var[32]; int count = get_wl_instances(); if (count < 2) return; websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } #endif #if 0 static void showOption(webs_t wp, char *propname, char *nvname) { websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); } #endif void showRadio(webs_t wp, char *propname, char *nvname) { websWrite(wp, "
\n"); websWrite(wp, "
\n", propname); websWrite(wp, " \n", nvname, nvram_default_match(nvname, "1", "0") ? "checked=\"checked\"" : ""); websWrite(wp, " \n", nvname, nvram_default_match(nvname, "0", "0") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); } #ifdef HAVE_MADWIFI void showAutoOption(webs_t wp, char *propname, char *nvname) { websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); } #endif static void showOptions(webs_t wp, char *propname, char *names, char *select) { char *next; char var[80]; websWrite(wp, "\n"); } static void showOptionsChoose(webs_t wp, char *propname, char *names, char *select) { char *next; char var[80]; websWrite(wp, "\n"); } static void showOptionsLabel(webs_t wp, char *labelname, char *propname, char *names, char *select) { websWrite(wp, "
\n"); websWrite(wp, "
", labelname); showOptions(wp, propname, names, select); websWrite(wp, "
\n"); } void show_inputlabel(webs_t wp, char *labelname, char *propertyname, int propertysize, char *inputclassname, int inputmaxlength) { websWrite(wp, "
\n"); websWrite(wp, "
", labelname); websWrite(wp, "\n", inputclassname, propertysize, inputmaxlength, propertyname, nvram_safe_get(propertyname)); websWrite(wp, "
\n"); } void show_custominputlabel(webs_t wp, char *labelname, char *propertyname, char *property, int propertysize) { websWrite(wp, "
\n"); websWrite(wp, "
%s
", labelname); websWrite(wp, "\n", propertysize, propertyname, property); websWrite(wp, "
\n"); } #ifdef HAVE_USB void ej_show_usb_diskinfo(webs_t wp, int argc, char_t ** argv) { char buff[512]; FILE *fp; if (!nvram_match("usb_automnt", "1")) return; if ((fp = fopen("/tmp/disktype.dump", "r"))) { while (fgets(buff, sizeof(buff), fp)) { if (strcmp(buff, "\n")) websWrite(wp, "%s
", buff); } fclose(fp); } else websWrite(wp, "%s", live_translate("status_router.notavail")); return; } #endif #ifdef HAVE_MMC void ej_show_mmc_cardinfo(webs_t wp, int argc, char_t ** argv) { char buff[512]; FILE *fp; if (!nvram_match("mmc_enable0", "1")) return; if ((fp = fopen("/proc/mmc/status", "rb"))) { while (fgets(buff, sizeof(buff), fp)) { if (strcmp(buff, "\n")) websWrite(wp, "%s
", buff); } fclose(fp); } else websWrite(wp, "%s", live_translate("status_router.notavail")); return; } #endif void show_legend(webs_t wp, char *labelname, int translate) { /* * char buf[2]; sprintf(buf,"%d",translate); websWrite (wp, * "%s%s%s\n", !strcmp (buf, "1") ? "" : ""); */ if (translate) websWrite(wp, "\n", labelname); else websWrite(wp, "%s\n", labelname); } #ifdef HAVE_OLSRD void ej_show_olsrd(webs_t wp, int argc, char_t ** argv) { char *var = websGetVar(wp, "wk_mode", NULL); if (var == NULL) var = nvram_safe_get("wk_mode"); if (!strcmp(var, "olsr")) { websWrite(wp, "
\n"); show_legend(wp, "route.olsrd_legend", 1); websWrite(wp, "
\n
\n"); websWrite(wp, "\n", nvram_default_match("olsrd_gateway", "1", "0") ? "checked=\"checked\"" : ""); websWrite(wp, " \n", nvram_default_match("olsrd_gateway", "0", "0") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); show_inputlabel(wp, "route.olsrd_hna", "olsrd_hna", 32, "num", 32); show_inputlabel(wp, "route.olsrd_poll", "olsrd_pollsize", 5, "num", 5); showOptionsLabel(wp, "route.olsrd_tc", "olsrd_redundancy", "0 1 2", nvram_default_get("olsrd_redundancy", "2")); show_inputlabel(wp, "route.olsrd_mpr", "olsrd_coverage", 5, "num", 5); showRadio(wp, "route.olsrd_lqfe", "olsrd_lqfisheye"); show_inputlabel(wp, "route.olsrd_lqag", "olsrd_lqaging", 5, "num", 5); #ifdef HAVE_IPV6 showRadio(wp, "route.olsrd_smartgw", "olsrd_smartgw"); #endif /* websWrite(wp, "
\n"); websWrite(wp, "
"); websWrite(wp,"\n",nvram_safe_get("olsrd_lqdijkstramin")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
"); websWrite(wp, "\n", nvram_safe_get("olsrd_lqdijkstramax")); websWrite(wp, "
\n");*/ showOptionsLabel(wp, "route.olsrd_lqlvl", "olsrd_lqlevel", "0 1 2", nvram_default_get("olsrd_lqlevel", "2")); showRadio(wp, "route.olsrd_hysteresis", "olsrd_hysteresis"); char *wordlist = nvram_safe_get("olsrd_interfaces"); char *next; char word[128]; int count = 0; foreach(word, wordlist, next) { char *interface = word; char *hellointerval = interface; strsep(&hellointerval, ">"); char *hellovaliditytime = hellointerval; strsep(&hellovaliditytime, ">"); char *tcinterval = hellovaliditytime; strsep(&tcinterval, ">"); char *tcvaliditytime = tcinterval; strsep(&tcvaliditytime, ">"); char *midinterval = tcvaliditytime; strsep(&midinterval, ">"); char *midvaliditytime = midinterval; strsep(&midvaliditytime, ">"); char *hnainterval = midvaliditytime; strsep(&hnainterval, ">"); char *hnavaliditytime = hnainterval; strsep(&hnavaliditytime, ">"); websWrite(wp, "
\n"); show_legend(wp, interface, 0); char valuename[32]; sprintf(valuename, "%s_hellointerval", interface); show_custominputlabel(wp, "Hello Interval", valuename, hellointerval, 5); sprintf(valuename, "%s_hellovaliditytime", interface); show_custominputlabel(wp, "Hello Validity Time", valuename, hellovaliditytime, 5); sprintf(valuename, "%s_tcinterval", interface); show_custominputlabel(wp, "TC Interval", valuename, tcinterval, 5); sprintf(valuename, "%s_tcvaliditytime", interface); show_custominputlabel(wp, "TC Validity Time", valuename, tcvaliditytime, 5); sprintf(valuename, "%s_midinterval", interface); show_custominputlabel(wp, "MID Interval", valuename, midinterval, 5); sprintf(valuename, "%s_midvaliditytime", interface); show_custominputlabel(wp, "MID Validity Time", valuename, midvaliditytime, 5); sprintf(valuename, "%s_hnainterval", interface); show_custominputlabel(wp, "HNA Interval", valuename, hnainterval, 5); sprintf(valuename, "%s_hnavaliditytime", interface); show_custominputlabel(wp, "HNA Validity Time", valuename, hnavaliditytime, 5); websWrite(wp, "\n", count); websWrite(wp, "
\n"); count++; } websWrite(wp, "
\n"); websWrite(wp, "
\n"); char buffer[256]; memset(buffer, 0, 256); getIfList(buffer, NULL); showOptions(wp, "olsrd_ifname", buffer, ""); websWrite(wp, "  "); websWrite(wp, "\n"); websWrite(wp, "
\n"); websWrite(wp, "

\n"); } } #endif #ifdef HAVE_VLANTAGGING #ifdef HAVE_BONDING void ej_show_bondings(webs_t wp, int argc, char_t ** argv) { char buffer[256]; char bufferif[512]; char bondnames[256]; int count = 0; static char word[256]; char *next, *wordlist; memset(buffer, 0, 256); memset(bondnames, 0, 256); memset(bufferif, 0, 512); websWrite(wp, "

Bonding

\n"); websWrite(wp, "
\n"); websWrite(wp, "Bonding\n"); websWrite(wp, "
\n"); websWrite(wp, "
Bonding Type
\n", count); showOptions(wp, "bonding_type", "balance-rr active-backup balance-xor broadcast 802.3ad balance-tlb balance-alb weighted-rr duplex", nvram_default_get("bonding_type", "balance-rr")); websWrite(wp, " Bonding Interfaces "); websWrite(wp, "\n", nvram_default_get("bonding_number", "1")); websWrite(wp, "
\n"); getIfList(bufferif, "eth"); int i; #ifdef HAVE_XSCALE memset(buffer, 0, 256); getIfList(buffer, "ixp"); sprintf(bufferif, "%s %s", bufferif, buffer); #endif memset(buffer, 0, 256); getIfList(buffer, "br"); sprintf(bufferif, "%s %s", bufferif, buffer); #ifdef HAVE_MADWIFI int c = getdevicecount(); for (i = 0; i < c; i++) { char ath[32]; sprintf(ath, "ath%d_bridged", i); if (nvram_default_match(ath, "0", "1")) { sprintf(bufferif, "%s ath%d", bufferif, i); char vifs[32]; sprintf(vifs, "ath%d_vifs", i); sprintf(bufferif, "%s %s", bufferif, nvram_safe_get(vifs)); } } #endif for (i = 0; i < atoi(nvram_safe_get("bonding_number")); i++) { sprintf(bondnames, "%s bond%d", bondnames, i); } int totalcount = 0; int realcount = atoi(nvram_default_get("bonding_count", "0")); wordlist = nvram_safe_get("bondings"); foreach(word, wordlist, next) { char *port = word; char *tag = strsep(&port, ">"); if (!tag || !port) break; char vlan_name[32]; // sprintf (vlan_name, "%s.%s", tag, port); websWrite(wp, "
\n"); websWrite(wp, "
Bonding %d Assignment
\n", count); websWrite(wp, " Bond "); sprintf(vlan_name, "bondingifname%d", count); showOptions(wp, vlan_name, bondnames, tag); sprintf(vlan_name, "bondingattach%d", count); websWrite(wp, " Slave "); showOptions(wp, vlan_name, bufferif, port); websWrite(wp, "\n", count); websWrite(wp, "
\n"); count++; } totalcount = count; for (i = count; i < realcount; i++) { char vlan_name[32]; websWrite(wp, "
\n"); websWrite(wp, "
Bonding %d Interface
\n", i); websWrite(wp, " Bond "); sprintf(vlan_name, "bondingifname%d", i); showOptions(wp, vlan_name, bondnames, ""); sprintf(vlan_name, "bondingattach%d", i); websWrite(wp, " Slave "); showOptions(wp, vlan_name, bufferif, ""); websWrite(wp, "\n", i); websWrite(wp, "
\n"); totalcount++; } char var[32]; sprintf(var, "%d", totalcount); nvram_set("bonding_count", var); websWrite(wp, "\n"); websWrite(wp, "

\n"); } #endif void ej_show_vlantagging(webs_t wp, int argc, char_t ** argv) { char buffer[256]; int count = 0; static char word[256]; char *next, *wordlist; memset(buffer, 0, 256); getIfList(buffer, NULL); int totalcount = 0; int realcount = atoi(nvram_default_get("vlan_tagcount", "0")); wordlist = nvram_safe_get("vlan_tags"); foreach(word, wordlist, next) { char *port = word; char *tag = strsep(&port, ">"); char *prio = port; strsep(&prio, ">"); if (!tag || !port) break; if (!prio) prio = "0"; char vlan_name[32]; // sprintf (vlan_name, "%s.%s", tag, port); websWrite(wp, "
\n"); websWrite(wp, "
VLAN%d Interface
\n", count); sprintf(vlan_name, "vlanifname%d", count); showOptions(wp, vlan_name, buffer, tag); //tag number sprintf(vlan_name, "vlantag%d", count); websWrite(wp, " Tag Number "); websWrite(wp, "\n", vlan_name, port); //priority sprintf(vlan_name, "vlanprio%d", count); websWrite(wp, " Prio "); showOptions(wp, vlan_name, "0 1 2 3 4 5 6 7", prio); websWrite(wp, "\n", count); websWrite(wp, "
\n"); count++; } totalcount = count; int i; for (i = count; i < realcount; i++) { websWrite(wp, "
\n"); websWrite(wp, "
VLAN%d Interface
\n", i); char vlan_name[32]; sprintf(vlan_name, "vlanifname%d", i); showOptions(wp, vlan_name, buffer, ""); sprintf(vlan_name, "vlantag%d", i); //tag number websWrite(wp, " Tag Number "); websWrite(wp, "\n", vlan_name); //priority sprintf(vlan_name, "vlanprio%d", i); websWrite(wp, " Prio "); showOptions(wp, vlan_name, "0 1 2 3 4 5 6 7", "0"); websWrite(wp, "\n", i); websWrite(wp, "
\n"); totalcount++; } char var[32]; sprintf(var, "%d", totalcount); nvram_set("vlan_tagcount", var); websWrite(wp, "\n"); } void ej_show_mdhcp(webs_t wp, int argc, char_t ** argv) { char buffer[256]; int count = 0; static char word[256]; char *next, *wordlist; websWrite(wp, "

%s

\n
\n", live_translate("networking.h5")); websWrite(wp, "%s\n", live_translate("networking.legend5")); memset(buffer, 0, 256); getIfList(buffer, NULL); int totalcount = 0; int realcount = atoi(nvram_default_get("mdhcpd_count", "0")); wordlist = nvram_safe_get("mdhcpd"); foreach(word, wordlist, next) { char *interface = word; char *dhcpon = interface; interface = strsep(&dhcpon, ">"); char *start = dhcpon; dhcpon = strsep(&start, ">"); char *max = start; start = strsep(&max, ">"); char *leasetime = max; max = strsep(&leasetime, ">"); if (max == NULL) { max = leasetime; leasetime = "3660"; } if (!interface || !start || !dhcpon || !max || !leasetime) break; char vlan_name[32]; // interface char *ipaddr = nvram_nget("%s_ipaddr", interface); char *netmask = nvram_nget("%s_netmask", interface); if (strlen(ipaddr) > 0 && strlen(netmask) > 0) { websWrite(wp, "Interface %s: IP %s/%s\n", interface, ipaddr, netmask); } websWrite(wp, "
\n"); websWrite(wp, "
DHCP %d
\n", count); sprintf(vlan_name, "mdhcpifname%d", count); showOptions(wp, vlan_name, buffer, interface); // on off sprintf(vlan_name, "mdhcpon%d", count); showOptions(wp, vlan_name, "On Off", dhcpon); // start sprintf(vlan_name, "mdhcpstart%d", count); websWrite(wp, " Start "); websWrite(wp, "\n", vlan_name, start); // max sprintf(vlan_name, "mdhcpmax%d", count); websWrite(wp, " Max "); websWrite(wp, "\n", vlan_name, max); sprintf(vlan_name, "mdhcpleasetime%d", count); websWrite(wp, " Leasetime "); websWrite(wp, "\n", vlan_name, leasetime); // websWrite(wp, "\n", count); websWrite(wp, "
\n"); count++; } totalcount = count; int i; for (i = count; i < realcount; i++) { char vlan_name[32]; // sprintf (mdhcp_name, "%s.%s", tag, port); websWrite(wp, "
\n"); websWrite(wp, "
DHCP %d
\n", count); // interface sprintf(vlan_name, "mdhcpifname%d", count); showOptions(wp, vlan_name, buffer, ""); // on off sprintf(vlan_name, "mdhcpon%d", count); showOptions(wp, vlan_name, "On Off", ""); // start sprintf(vlan_name, "mdhcpstart%d", count); websWrite(wp, " Start "); websWrite(wp, "\n", vlan_name, "100"); // max sprintf(vlan_name, "mdhcpmax%d", count); websWrite(wp, " Max "); websWrite(wp, "\n", vlan_name, "50"); sprintf(vlan_name, "mdhcpleasetime%d", count); websWrite(wp, " Leasetime "); websWrite(wp, "\n", vlan_name, "3600"); websWrite(wp, "\n", i); websWrite(wp, "
\n"); totalcount++; } char var[32]; sprintf(var, "%d", totalcount); nvram_set("mdhcpd_count", var); websWrite(wp, "\n"); websWrite(wp, "

\n"); } void ej_show_bridgenames(webs_t wp, int argc, char_t ** argv) { char buffer[256]; int count = 0; int br0found = 0; static char word[256]; char *next, *wordlist; char *stp = word; char *bridge, *prio, *mtu; char bridge_name[32]; memset(buffer, 0, 256); getIfList(buffer, NULL); int realcount = atoi(nvram_default_get("bridges_count", "0")); wordlist = nvram_safe_get("bridges"); foreach(word, wordlist, next) { bridge = strsep(&stp, ">"); if (!strcmp(bridge, "br0")) { br0found = 1; break; } } if (!br0found) { websWrite(wp, "
\n"); websWrite(wp, "
Bridge %d
\n", count); sprintf(bridge_name, "bridgename%d", count); websWrite(wp, "\n", bridge_name); #ifdef HAVE_MSTP websWrite(wp, " MSTP "); #else websWrite(wp, " STP "); #endif sprintf(bridge_name, "bridgestp%d", count); showOptions(wp, bridge_name, "On Off", "Off"); websWrite(wp, " Prio "); sprintf(bridge_name, "bridgeprio%d", count); websWrite(wp, "\n", bridge_name); websWrite(wp, " MTU "); // Bridges are bridges, Ports are ports, show it again HERE sprintf(bridge_name, "bridgemtu%d", count); websWrite(wp, "\n", bridge_name); websWrite(wp, "
\n"); // don't show that here, since that is under Basic Setup // show_ipnetmask(wp, bridge); count++; } foreach(word, wordlist, next) { stp = word; bridge = strsep(&stp, ">"); prio = stp; stp = strsep(&prio, ">"); mtu = prio; prio = strsep(&mtu, ">"); if (!prio) { prio = mtu; mtu = "1500"; } /* char *stp = word; char *bridge = strsep( &stp, ">" ); char *mtu = stp; char *prio = strsep( &mtu, ">" ); */ if (!bridge || !stp) break; websWrite(wp, "
\n"); websWrite(wp, "
Bridge %d
\n", count); sprintf(bridge_name, "bridgename%d", count); websWrite(wp, "\n", bridge_name, bridge); #ifdef HAVE_MSTP websWrite(wp, " MSTP "); #else websWrite(wp, " STP "); #endif sprintf(bridge_name, "bridgestp%d", count); showOptions(wp, bridge_name, "On Off", stp); websWrite(wp, " Prio "); sprintf(bridge_name, "bridgeprio%d", count); websWrite(wp, "\n", bridge_name, prio != NULL ? prio : "32768"); websWrite(wp, " MTU "); // Bridges are bridges, Ports are ports, show it again HERE sprintf(bridge_name, "bridgemtu%d", count); websWrite(wp, "\n", bridge_name, mtu != NULL ? mtu : "1500"); websWrite(wp, "\n", count); websWrite(wp, "
\n"); // don't show that here, since that is under Basic Setup if (strcmp(bridge,"br0")) { show_ipnetmask(wp, bridge); } count++; } int i; int totalcount = count; for (i = count; i < realcount; i++) { websWrite(wp, "
\n"); websWrite(wp, "
Bridge %d
\n", i); sprintf(bridge_name, "bridgename%d", i); websWrite(wp, "\n", bridge_name); #ifdef HAVE_MSTP websWrite(wp, " MSTP "); #else websWrite(wp, " STP "); #endif sprintf(bridge_name, "bridgestp%d", i); showOptions(wp, bridge_name, "On Off", "On"); websWrite(wp, " Prio "); sprintf(bridge_name, "bridgeprio%d", i); websWrite(wp, "\n", bridge_name, "32768"); websWrite(wp, " MTU "); sprintf(bridge_name, "bridgemtu%d", count); websWrite(wp, "\n", bridge_name, "1500"); websWrite(wp, "\n", i); websWrite(wp, "
\n"); totalcount++; } websWrite(wp, "\n"); char var[32]; sprintf(var, "%d", totalcount); nvram_set("bridges_count", var); } void ej_show_bridgetable(webs_t wp, int argc, char_t ** argv) { FILE *f; char buf[128]; char brname[32]; char brstp[8]; char brif[16]; int count = 0; system2("brctl show > /tmp/.brtable"); if ((f = fopen("/tmp/.brtable", "r")) != NULL) { while (fgets(buf, sizeof(buf), f)) { if (count) // skip line 0 { strcpy(brname, ""); strcpy(brstp, ""); strcpy(brif, ""); if (strncmp(buf, "\t\t\t", 3) != 0) { if (count != 1) websWrite(wp, "\',"); // close sscanf(buf, "%s %*s %s %s", brname, brstp, brif); websWrite(wp, "\'%s\',\'%s\',\'%s ", brname, brstp, brif); } else { sscanf(buf, "%s", brif); websWrite(wp, "%s ", brif); } } count++; } websWrite(wp, "\'"); // close fclose(f); unlink("/tmp/.brtable"); } return; } void ej_show_bridgeifnames(webs_t wp, int argc, char_t ** argv) { char bufferif[512]; char bufferif2[256]; char finalbuffer[512]; int count = 0; static char word[256]; char *next, *wordlist; memset(bufferif, 0, 512); memset(bufferif2, 0, 256); getIfList(bufferif, "eth"); #ifdef HAVE_GATEWORX getIfList(bufferif2, "ixp"); sprintf(bufferif, "%s %s", bufferif, bufferif2); #endif memset(bufferif2, 0, 256); getIfList(bufferif2, "vlan"); sprintf(bufferif, "%s %s", bufferif, bufferif2); memset(bufferif2, 0, 256); getIfList(bufferif2, "wl"); sprintf(bufferif, "%s %s", bufferif, bufferif2); memset(bufferif2, 0, 256); getIfList(bufferif2, "ofdm"); sprintf(bufferif, "%s %s", bufferif, bufferif2); #ifdef HAVE_RT2880 memset(bufferif2, 0, 256); getIfList(bufferif2, "ra"); sprintf(bufferif, "%s %s", bufferif, bufferif2); #endif memset(bufferif2, 0, 256); getIfList(bufferif2, "br"); foreach(word, bufferif2, next) { if (contains(word, '.')) sprintf(bufferif, "%s %s", bufferif, word); } int i; #ifdef HAVE_MADWIFI // memset(bufferif2, 0, 256); // getIfList(bufferif2, "ath"); // foreach(word, bufferif2, next) { // if (contains(word, '.')) // sprintf(bufferif, "%s %s", bufferif, word); // } int c = getdevicecount(); for (i = 0; i < c; i++) { char ath[32]; // sprintf(ath, "ath%d_bridged", i); // if (nvram_default_match(ath, "1", "1")) { sprintf(bufferif, "%s ath%d", bufferif, i); char vifs[32]; sprintf(vifs, "ath%d_vifs", i); sprintf(bufferif, "%s %s", bufferif, nvram_safe_get(vifs)); } } #endif #ifdef HAVE_BONDING c = atoi(nvram_default_get("bonding_number", "1")); for (i = 0; i < c; i++) { sprintf(bufferif, "%s bond%d", bufferif, i); } #endif #ifdef HAVE_EOP_TUNNEL for (i = 1; i < 11; i++) { char EOP[32]; if (nvram_nmatch("1", "oet%d_en", i) && nvram_nmatch("1", "oet%d_bridged", i)) { sprintf(EOP, "oet%d", i); sprintf(bufferif, "%s %s", bufferif, EOP); } } #endif char buffer[256]; memset(buffer, 0, 256); getIfList(buffer, "br"); memset(finalbuffer, 0, 256); foreach(word, buffer, next) { if (!contains(word, '.')) sprintf(finalbuffer, "%s %s", finalbuffer, word); } char *checkbuffer = safe_malloc(strlen(finalbuffer) + 6); memset(checkbuffer, 0, strlen(finalbuffer) + 6); strcpy(checkbuffer, "none "); strcat(checkbuffer, finalbuffer); strcpy(finalbuffer, checkbuffer); free(checkbuffer); int realcount = atoi(nvram_default_get("bridgesif_count", "0")); wordlist = nvram_safe_get("bridgesif"); foreach(word, wordlist, next) { char *port = word; char *tag = strsep(&port, ">"); char *prio = port; strsep(&prio, ">"); if (!tag || !port) break; char vlan_name[32]; websWrite(wp, "
\n"); websWrite(wp, "
Assignment %d
\n", count); sprintf(vlan_name, "bridge%d", count); showOptions(wp, vlan_name, finalbuffer, tag); websWrite(wp, " Interface "); sprintf(vlan_name, "bridgeif%d", count); showOptions(wp, vlan_name, bufferif, port); websWrite(wp, " Prio "); sprintf(vlan_name, "bridgeifprio%d", count); websWrite(wp, "\n", vlan_name, prio != NULL ? prio : "63"); websWrite(wp, "\n", count); websWrite(wp, "
\n"); count++; } int totalcount = count; for (i = count; i < realcount; i++) { char vlan_name[32]; websWrite(wp, "
\n"); websWrite(wp, "
Assignment %d
\n", i); sprintf(vlan_name, "bridge%d", i); showOptions(wp, vlan_name, finalbuffer, ""); websWrite(wp, " Interface "); sprintf(vlan_name, "bridgeif%d", i); showOptions(wp, vlan_name, bufferif, ""); websWrite(wp, " Prio "); sprintf(vlan_name, "bridgeifprio%d", i); websWrite(wp, "\n", vlan_name, "63"); websWrite(wp, "\n", i); websWrite(wp, "
\n"); totalcount++; } websWrite(wp, "\n"); char var[32]; sprintf(var, "%d", totalcount); nvram_set("bridgesif_count", var); } #endif #if 0 static void showDynOption(webs_t wp, char *propname, char *nvname, char *options[], char *names[]) { int i; websWrite(wp, "
\n"); websWrite(wp, "
%s
\n"); } } #ifdef HAVE_MADWIFI static char *ag_rates[] = { "6", "9", "12", "18", "24", "36", "48", "54" }; static char *turbo_rates[] = { "12", "18", "24", "36", "48", "72", "96", "108" }; static char *b_rates[] = { "1", "2", "5.5", "11" }; static char *bg_rates[] = { "1", "2", "5.5", "6", "9", "11", "12", "18", "24", "36", "48", "54" }; // static char *g_rates[] = { "1", "2", "5.5", "11", "12", "18", "24", "36", // "48", "54" }; //static char *xr_rates[] = // { "0.25", "0.5", "1", "2", "3", "6", "9", "12", "18", "24", "36", "48", // "54" //}; static char *half_rates[] = { "3", "4.5", "6", "9", "12", "18", "24", "27" }; static char *quarter_rates[] = { "1.5", "2", "3", "4.5", "6", "9", "12", "13.5" }; static char *subquarter_rates[] = { "0.75", "1", "1.5", "2.25", "3", "4.5", "6", "6.75" }; void show_rates(webs_t wp, char *prefix, int maxrate) { websWrite(wp, "
\n"); if (maxrate) { websWrite(wp, "
\n"); websWrite(wp, "\n", prefix); } websWrite(wp, "\n"); char **rate; char **showrates = NULL; int len; char mode[32]; char bw[16]; sprintf(bw, "%s_channelbw", prefix); sprintf(mode, "%s_net_mode", prefix); if (nvram_match(mode, "b-only")) { rate = b_rates; len = sizeof(b_rates) / sizeof(char *); } if (nvram_match(mode, "g-only")) { rate = ag_rates; len = sizeof(ag_rates) / sizeof(char *); if (nvram_match(bw, "40")) { showrates = turbo_rates; } if (nvram_match(bw, "10")) { rate = half_rates; len = sizeof(half_rates) / sizeof(char *); } if (nvram_match(bw, "5")) { rate = quarter_rates; len = sizeof(quarter_rates) / sizeof(char *); } if (nvram_match(bw, "2")) { rate = subquarter_rates; len = sizeof(subquarter_rates) / sizeof(char *); } } if (nvram_match(mode, "a-only")) { rate = ag_rates; len = sizeof(ag_rates) / sizeof(char *); if (nvram_match(bw, "40")) { showrates = turbo_rates; } if (nvram_match(bw, "10")) { rate = half_rates; len = sizeof(half_rates) / sizeof(char *); } if (nvram_match(bw, "5")) { rate = quarter_rates; len = sizeof(quarter_rates) / sizeof(char *); } if (nvram_match(bw, "2")) { rate = subquarter_rates; len = sizeof(subquarter_rates) / sizeof(char *); } } if (nvram_match(mode, "bg-mixed")) { rate = bg_rates; len = sizeof(bg_rates) / sizeof(char *); if (nvram_match(bw, "10")) { rate = half_rates; len = sizeof(half_rates) / sizeof(char *); } if (nvram_match(bw, "5")) { rate = quarter_rates; len = sizeof(quarter_rates) / sizeof(char *); } if (nvram_match(bw, "2")) { rate = subquarter_rates; len = sizeof(subquarter_rates) / sizeof(char *); } } if (nvram_match(mode, "mixed")) { rate = bg_rates; len = sizeof(bg_rates) / sizeof(char *); if (nvram_match(bw, "40")) { rate = ag_rates; len = sizeof(ag_rates) / sizeof(char *); showrates = turbo_rates; } if (nvram_match(bw, "10")) { rate = half_rates; len = sizeof(half_rates) / sizeof(char *); } if (nvram_match(bw, "5")) { rate = quarter_rates; len = sizeof(quarter_rates) / sizeof(char *); } if (nvram_match(bw, "2")) { rate = subquarter_rates; len = sizeof(subquarter_rates) / sizeof(char *); } } int i; for (i = 0; i < len; i++) { if (maxrate) { int offset = 0; if (nvram_match(mode, "g-only") && nvram_match(bw, "20")) offset = 4; char comp[32]; sprintf(comp, "%d", i + 1 + offset); if (showrates) websWrite(wp, "\n", i + 1 + offset, nvram_match(mxrate, comp) ? "selected=\"selected\"" : "", showrates[i]); else websWrite(wp, "\n", i + 1 + offset, nvram_match(mxrate, comp) ? "selected=\"selected\"" : "", rate[i]); } else { int offset = 0; if (nvram_match(mode, "g-only") && nvram_match(bw, "20")) offset = 4; char comp[32]; sprintf(comp, "%d", i + 1 + offset); if (showrates) websWrite(wp, "\n", i + 1 + offset, nvram_match(srate, comp) ? "selected=\"selected\"" : "", showrates[i]); else websWrite(wp, "\n", i + 1 + offset, nvram_match(srate, comp) ? "selected=\"selected\"" : "", rate[i]); } } websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } #endif static void show_netmode(webs_t wp, char *prefix) { char wl_net_mode[16]; sprintf(wl_net_mode, "%s_net_mode", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); #ifdef HAVE_RT2880 if (nvram_nmatch("n-only", "%s_net_mode", prefix)) { char wl_greenfield[32]; sprintf(wl_greenfield, "%s_greenfield", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); } #endif } #ifdef HAVE_MADWIFI static void showrtssettings(webs_t wp, char *var) { char ssid[32]; char vvar[32]; strcpy(vvar, var); rep(vvar, '.', 'X'); sprintf(ssid, "%s_rts", var); websWrite(wp, "
\n
\n"); websWrite(wp, "\n", vvar, var, nvram_default_match(ssid, "1", "0") ? "checked=\"checked\"" : ""); websWrite(wp, " \n", vvar, var, nvram_default_match(ssid, "0", "0") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); websWrite(wp, "
\n", vvar); websWrite(wp, "
\n"); websWrite(wp, "
\n"); char ip[32]; sprintf(ip, "%s_rtsvalue", var); websWrite(wp, "", var, nvram_default_get(ip, "2346")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); } #endif static void showbridgesettings(webs_t wp, char *var, int mcast, int dual) { char ssid[32]; sprintf(ssid, "%s_bridged", var); char vvar[32]; strcpy(vvar, var); rep(vvar, '.', 'X'); websWrite(wp, "
\n
\n"); websWrite(wp, " \n", vvar, var, nvram_default_match(ssid, "0", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", vvar, var, nvram_default_match(ssid, "1", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); websWrite(wp, "
\n", vvar); if (mcast) { char mcastvar[32]; sprintf(mcastvar, "%s_multicast", var); nvram_default_get(mcastvar, "0"); showRadio(wp, "wl_basic.multicast", mcastvar); } if (has_gateway()) { char natvar[32]; sprintf(natvar, "%s_nat", var); nvram_default_get(natvar, "1"); showRadio(wp, "wl_basic.masquerade", natvar); } websWrite(wp, "
\n"); websWrite(wp, "
\n"); char ip[32]; sprintf(ip, "%s_ipaddr", var); char *ipv = nvram_safe_get(ip); websWrite(wp, "\n", var); websWrite(wp, ".", var, get_single_ip(ipv, 0)); websWrite(wp, ".", var, get_single_ip(ipv, 1)); websWrite(wp, ".", var, get_single_ip(ipv, 2)); websWrite(wp, "\n", var, get_single_ip(ipv, 3)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(ip, "%s_netmask", var); ipv = nvram_safe_get(ip); websWrite(wp, "\n", var); websWrite(wp, ".", var, get_single_ip(ipv, 0)); websWrite(wp, ".", var, get_single_ip(ipv, 1)); websWrite(wp, ".", var, get_single_ip(ipv, 2)); websWrite(wp, ".", var, get_single_ip(ipv, 3)); websWrite(wp, "
\n"); #ifdef HAVE_MADWIFI /*if (dual) { char dl[32]; sprintf(dl,"%s_duallink",var); websWrite( wp, "
\n
\n" ); websWrite( wp, " \n", var, var, nvram_default_match( dl, "1", "0" ) ? "checked=\"checked\"" : "" ); websWrite( wp, "\n", var, var, nvram_default_match( dl, "0", "0" ) ? "checked=\"checked\"" : "" ); websWrite( wp, "
\n" ); websWrite( wp, "
\n", var ); sprintf( ip, "%s_duallink_parent", var ); websWrite( wp, "
\n" ); websWrite( wp,"
\n" ); ipv = nvram_default_get( ip,"0.0.0.0" ); websWrite( wp, "\n", var ); websWrite( wp, ".", var, get_single_ip( ipv, 0 ) ); websWrite( wp, ".", var, get_single_ip( ipv, 1 ) ); websWrite( wp, ".", var, get_single_ip( ipv, 2 ) ); websWrite( wp, ".", var, get_single_ip( ipv, 3 ) ); websWrite( wp, "
\n" ); websWrite( wp, "
\n" ); websWrite( wp, "\n" ); }*/ #endif websWrite(wp, "
\n"); websWrite(wp, "\n"); } #ifdef HAVE_MADWIFI static void show_chanshift(webs_t wp, char *prefix) { char wl_chanshift[32]; char wl_channelbw[32]; sprintf(wl_channelbw, "%s_channelbw", prefix); sprintf(wl_chanshift, "%s_chanshift", prefix); if (atoi(nvram_safe_get(wl_channelbw)) > 2 && (atoi(nvram_safe_get(wl_chanshift)) & 0xf) > 10) nvram_set(wl_chanshift, "10"); if (atoi(nvram_safe_get(wl_channelbw)) > 5 && (atoi(nvram_safe_get(wl_chanshift)) & 0xf) > 10) nvram_set(wl_chanshift, "10"); if (atoi(nvram_safe_get(wl_channelbw)) > 10 && (atoi(nvram_safe_get(wl_chanshift)) & 0xf) > 0) nvram_set(wl_chanshift, "0"); if (nvram_match(wl_channelbw, "5") || nvram_match(wl_channelbw, "10") || nvram_match(wl_channelbw, "2")) { websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); } } #endif static int show_virtualssid(webs_t wp, char *prefix) { char *next; char var[80]; char ssid[80]; char vif[16]; char power[32]; #ifdef HAVE_MADWIFI char wmm[32]; char wl_protmode[32]; #endif sprintf(vif, "%s_vifs", prefix); char *vifs = nvram_safe_get(vif); if (vifs == NULL) return 0; #ifndef HAVE_MADWIFI if (!nvram_nmatch("ap", "%s_mode", prefix) && !nvram_nmatch("apsta", "%s_mode", prefix) && !nvram_nmatch("apstawet", "%s_mode", prefix)) return 0; #endif int count = 1; websWrite(wp, "

\n"); foreach(var, vifs, next) { sprintf(ssid, "%s_ssid", var); websWrite(wp, "
%s SSID [", IFMAP(var)); tf_webWriteESCNV(wp, ssid); // fix for broken html page if ssid // contains html tag char wl_macaddr[16]; sprintf(wl_macaddr, "%s_hwaddr", var); if (nvram_get(wl_macaddr)) websWrite(wp, "] HWAddr [%s", nvram_safe_get(wl_macaddr)); websWrite(wp, "]\n"); websWrite(wp, "
\n"); #ifndef HAVE_EASY_WIRELESS_CONFIG websWrite(wp, "
\n"); websWrite(wp, "
\n", var, nvram_safe_get(ssid)); #ifdef HAVE_MADWIFI // sprintf( wl_chanshift, "%s_chanshift", var ); // show_chanshift( wp, wl_chanshift ); sprintf(wl_protmode, "%s_protmode", var); showOptionsLabel(wp, "wl_basic.protmode", wl_protmode, "None CTS RTS/CTS", nvram_default_get(wl_protmode, "None")); showrtssettings(wp, var); #endif websWrite(wp, "
\n"); websWrite(wp, "
"); sprintf(ssid, "%s_closed", var); websWrite(wp, " \n", var, nvram_match(ssid, "0") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", var, nvram_match(ssid, "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); char wl_mode[16]; #ifdef HAVE_MADWIFI sprintf(wl_mode, "%s_mode", var); websWrite(wp, "
\n
\n"); websWrite(wp, "
\n"); // sprintf(wmm, "%s_wmm", var); // showRadio(wp, "wl_adv.label18", wmm); #endif #else // start EASY_WIRELESS_SETUP // wireless mode char wl_mode[16]; #ifdef HAVE_MADWIFI sprintf(wl_mode, "%s_mode", var); websWrite(wp, "
\n
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", var, nvram_safe_get(ssid)); // broadcast wireless ssid websWrite(wp, "
\n"); websWrite(wp, "
"); sprintf(ssid, "%s_closed", var); websWrite(wp, " \n", var, nvram_match(ssid, "0") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", var, nvram_match(ssid, "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); #endif #ifdef HAVE_IFL // label char wl_label[16]; sprintf(wl_label, "%s_label", var); websWrite(wp, "
\n
\n", wl_label, nvram_safe_get(wl_label)); #endif // WIRELESS Advanced char advanced_label[32]; char maskvar[32]; strcpy(maskvar, var); rep(maskvar, '.', 'X'); sprintf(advanced_label, "%s_wl_advanced", maskvar); websWrite(wp, "
\n"); websWrite(wp, "", advanced_label, advanced_label, websGetVar(wp, advanced_label, NULL) ? " checked=\"checked\"" : ""); websWrite(wp, "
\n"); websWrite(wp, "
\n", advanced_label, websGetVar(wp, advanced_label, NULL) ? "" : " style=\"display: none;\""); #ifdef HAVE_IFL char wl_note[16]; sprintf(wl_note, "%s_note", var); websWrite(wp, "
\n
\n", wl_note, nvram_safe_get(wl_note)); #endif #ifdef HAVE_MADWIFI // sprintf( wl_chanshift, "%s_chanshift", var ); // show_chanshift( wp, wl_chanshift ); sprintf(wl_protmode, "%s_protmode", var); showOptionsLabel(wp, "wl_basic.protmode", wl_protmode, "None CTS RTS/CTS", nvram_default_get(wl_protmode, "None")); showrtssettings(wp, var); #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { sprintf(wmm, "%s_wmm", var); showRadio(wp, "wl_adv.label18", wmm); } #endif #endif // end BUFFALO sprintf(ssid, "%s_ap_isolate", var); showRadio(wp, "wl_adv.label11", ssid); #ifdef HAVE_MADWIFI if (nvram_nmatch("ap", "%s_mode", var) || nvram_nmatch("wdsap", "%s_mode", var) || nvram_nmatch("infra", "%s_mode", var)) { sprintf(power, "%s_maxassoc", var); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", power, nvram_default_get(power, "256")); websWrite(wp, "\n"); websWrite(wp, "
\n"); } sprintf(power, "%s_mtikie", var); nvram_default_get(power, "0"); showRadio(wp, "wl_basic.mtikie", power); #endif #ifdef HAVE_RT2880 showbridgesettings(wp, getRADev(var), 1, 0); #else showbridgesettings(wp, var, 1, 0); #endif #ifdef HAVE_EASY_WIRELESS_CONFIG websWrite(wp, "
\n"); #endif websWrite(wp, "

\n"); count++; #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (count == 4 && isap8x()) { websWrite(wp, "
\n"); websWrite(wp, "

\n"); websWrite(wp, "
\n
\n"); } #endif } websWrite(wp, "
\n"); #ifdef HAVE_MADWIFI if (count < 8) #elif HAVE_RT2880 if (count < 7) #else if (count < WL_MAXBSSCFG) #endif websWrite(wp, "\n", prefix); if (count > 1) websWrite(wp, "\n", prefix); websWrite(wp, "

\n"); return 0; } void ej_getdefaultindex(webs_t wp, int argc, char_t ** argv) { #ifdef HAVE_BUFFALO websWrite(wp, "SetupAssistant.asp"); #else websWrite(wp, "index.asp"); #endif } void ej_showad(webs_t wp, int argc, char_t ** argv) { #ifndef HAVE_FON #ifndef CONFIG_BRANDING #ifdef HAVE_CHILLI // if (nvram_invmatch ("fon_enable", "1")) // websWrite (wp, // ""); #endif #endif #endif #ifndef HAVE_NOAD /* * if (nvram_match("wanup","1")) { websWrite(wp,"\n"); websWrite(wp,"\n"); } */ #endif return; } #ifndef HAVE_SUPERCHANNEL int inline issuperchannel(void) { #if defined(HAVE_MAKSAT) && defined(HAVE_MR3202A) return 0; #elif defined(HAVE_MAKSAT) && defined(HAVE_ALPHA) return 0; #elif HAVE_MAKSAT return 1; #else return 0; #endif } #endif void ej_show_countrylist(webs_t wp, int argc, char_t ** argv) { if (argc < 1) { return; } char *list = getCountryList(); showOptionsChoose(wp, argv[0], list, nvram_safe_get(argv[0])); } void ej_show_wireless_single(webs_t wp, char *prefix) { char wl_mode[16]; char wl_macaddr[16]; char wl_ssid[16]; char frequencies[16]; sprintf(wl_mode, "%s_mode", prefix); sprintf(wl_macaddr, "%s_hwaddr", prefix); sprintf(wl_ssid, "%s_ssid", prefix); // check the frequency capabilities; if (has_5ghz(prefix) && has_2ghz(prefix)) { sprintf(frequencies, " [2.4/5 GHz]"); } else if (has_5ghz(prefix)) { sprintf(frequencies, " [5 GHz]"); } else if (has_2ghz(prefix)) { sprintf(frequencies, " [2.4 GHz]"); } else { frequencies[0]=0; } // wireless mode websWrite(wp, "

%s%s

\n", prefix, frequencies); websWrite(wp, "
\n"); websWrite(wp, " %s - SSID [", IFMAP(prefix)); tf_webWriteESCNV(wp, wl_ssid); // fix websWrite(wp, "] HWAddr [%s]\n", nvram_safe_get(wl_macaddr)); char power[16]; #ifndef HAVE_EASY_WIRELESS_CONFIG // char maxpower[16]; #ifdef HAVE_MADWIFI #ifndef HAVE_MAKSAT #ifndef HAVE_DDLINK if (isXR36(prefix)) { char wl_cardtype[32]; sprintf(wl_cardtype, "%s_cardtype", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); } if (isEMP(prefix)) { char wl_cardtype[32]; sprintf(wl_cardtype, "%s_cardtype", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); } #endif #endif // ! HAVE MAKSAT #ifndef HAVE_NOCOUNTRYSEL char wl_regdomain[16]; sprintf(wl_regdomain, "%s_regdomain", prefix); if (is_ath9k(prefix) || nvram_nmatch("1", "%s_regulatory", prefix) || !issuperchannel()) { websWrite(wp, "
\n"); char *list = getCountryList(); showOptions(wp, wl_regdomain, list, nvram_safe_get(wl_regdomain)); websWrite(wp, "
\n"); } #endif // ! HAVE MAKSAT /* * while (regdomains[domcount].name != NULL) { char domcode[16]; sprintf * (domcode, "%d", regdomains[domcount].code); websWrite (wp, "\n", regdomains[domcount].code, nvram_match * (wl_regdomain, domcode) ? " selected=\"selected\"" : "", * regdomains[domcount].name); domcount++; } websWrite (wp, * "\n"); websWrite (wp, "\n"); */ // power adjustment sprintf(power, "%s_txpwrdbm", prefix); // sprintf (maxpower, "%s_maxpower", prefix); if (issuperchannel()) // show // client // only on // first // interface { char regulatory[32]; sprintf(regulatory, "%s_regulatory", prefix); nvram_default_get(regulatory, "0"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "  \n", prefix, nvram_match(regulatory, "0") ? "checked" : ""); websWrite(wp, " \n", prefix, nvram_match(regulatory, "1") ? "checked" : ""); websWrite(wp, "
\n"); } int txpower = atoi(nvram_safe_get(power)); #ifdef HAVE_ESPOD #ifdef HAVE_SUB3 if(txpower > 28 ) { txpower = 28; nvram_set(power, "28"); } #else if(txpower > 30 ) { txpower = 28; nvram_set(power, "30"); } #endif #endif websWrite(wp, "
\n"); websWrite(wp, "
dBm\n", power, txpower + wifi_gettxpoweroffset(prefix)); websWrite(wp, "
\n"); sprintf(power, "%s_antgain", prefix); #ifndef HAVE_MAKSAT if (nvram_nmatch("1", "%s_regulatory", prefix)) #endif { websWrite(wp, "
\n"); websWrite(wp, "
dBi\n", power, nvram_default_get(power,"0")); websWrite(wp, "
\n"); } #endif #ifdef HAVE_MADWIFI // if (!strcmp (prefix, "ath0")) #endif { // #ifdef HAVE_MADWIFI // if (!strcmp (prefix, "ath0")) //show client only on first // interface // #endif { #ifdef HAVE_MADWIFI // if (!strcmp (prefix, "ath0")) //show client only on first // interface // if (nvram_match ("ath0_mode", "wdsap") // || nvram_match ("ath0_mode", "wdssta")) // showOption (wp, "wl_basic.wifi_bonding", "wifi_bonding"); #endif #ifdef HAVE_REGISTER int cpeonly = iscpe(); #else int cpeonly = 0; #endif websWrite(wp, "
\n"); websWrite(wp, "
\n"); } /* * #ifdef HAVE_MADWIFI else { * * * websWrite (wp, "
\n"); websWrite (wp, "
\n"); } #endif */ } // wireless net mode show_netmode(wp, prefix); // turbo options #ifdef HAVE_MADWIFI // char wl_xchanmode[16]; char wl_outdoor[16]; char wl_diversity[16]; char wl_rxantenna[16]; char wl_txantenna[16]; char wl_width[16]; char wl_preamble[16]; char wl_xr[16]; char wl_comp[32]; char wl_ff[16]; char wmm[32]; char wl_isolate[32]; char wl_sifstime[32]; char wl_preambletime[32]; char wl_intmit[32]; char wl_noise_immunity[32]; char wl_ofdm_weak_det[32]; char wl_protmode[32]; char wl_doth[32]; char wl_csma[32]; sprintf(wl_csma, "%s_csma", prefix); sprintf(wl_doth, "%s_doth", prefix); sprintf(wl_protmode, "%s_protmode", prefix); sprintf(wl_outdoor, "%s_outdoor", prefix); sprintf(wl_diversity, "%s_diversity", prefix); sprintf(wl_rxantenna, "%s_rxantenna", prefix); sprintf(wl_txantenna, "%s_txantenna", prefix); sprintf(wl_width, "%s_channelbw", prefix); // sprintf( wl_comp, "%s_compression", prefix ); sprintf(wl_ff, "%s_ff", prefix); sprintf(wl_preamble, "%s_preamble", prefix); sprintf(wl_preambletime, "%s_preambletime", prefix); sprintf(wl_sifstime, "%s_sifstime", prefix); sprintf(wl_xr, "%s_xr", prefix); sprintf(wl_intmit, "%s_intmit", prefix); sprintf(wl_noise_immunity, "%s_noise_immunity", prefix); sprintf(wl_ofdm_weak_det, "%s_ofdm_weak_det", prefix); #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { showAutoOption(wp, "wl_basic.intmit", wl_intmit); websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); showRadio(wp, "wl_basic.ofdm_weak_det", wl_ofdm_weak_det); } showOptionsLabel(wp, "wl_basic.protmode", wl_protmode, "None CTS RTS/CTS", nvram_default_get(wl_protmode, "None")); showrtssettings(wp, prefix); if (!is_ath11n(prefix)) { show_rates(wp, prefix, 0); show_rates(wp, prefix, 1); } showRadio(wp, "wl_basic.preamble", wl_preamble); #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { showRadio(wp, "wl_basic.extrange", wl_xr); showRadio(wp, "wl_basic.supergff", wl_ff); } #if 0 showRadio(wp, "wl_basic.csma", wl_csma); #endif // showOption (wp, "wl_basic.extchannel", wl_xchanmode); #ifndef HAVE_BUFFALO #if !defined(HAVE_FONERA) && !defined(HAVE_LS2) && !defined(HAVE_MERAKI) if (has_5ghz(prefix)) { if (nvram_nmatch("1", "%s_regulatory", prefix) || !issuperchannel()) { showRadio(wp, "wl_basic.outband", wl_outdoor); } } #endif #endif websWrite(wp, "
\n"); websWrite(wp, "
\n"); /*#if defined(HAVE_EOC5610) websWrite(wp, "
\n"); websWrite(wp, "
\n");*/ #if defined(HAVE_PICO2) || defined(HAVE_PICO2HP) || defined(HAVE_PICO5) /* websWrite( wp, "
\n" ); websWrite( wp, "
\n" );*/ //#elif defined(HAVE_EOC1650) /* websWrite( wp, "
\n" ); websWrite( wp, "
\n" );*/ #elif defined(HAVE_NS2) || defined(HAVE_NS5) || defined(HAVE_LC2) || defined(HAVE_LC5) || defined(HAVE_NS3) websWrite(wp, "
\n"); websWrite(wp, "
\n"); #else #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { showRadio(wp, "wl_basic.diversity", wl_diversity); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); } #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) else { websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); } #endif #endif #endif #ifdef HAVE_MADWIFI sprintf(wl_isolate, "%s_ap_isolate", prefix); showRadio(wp, "wl_adv.label11", wl_isolate); #if 0 websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", wl_sifstime, nvram_default_get(wl_sifstime, "16")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", wl_preambletime, nvram_default_get(wl_preambletime, "20")); websWrite(wp, "
\n"); #endif #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { sprintf(wmm, "%s_wmm", prefix); showRadio(wp, "wl_adv.label18", wmm); } #endif websWrite(wp, "
\n"); websWrite(wp, "
\n", wl_ssid, nvram_safe_get(wl_ssid)); #ifdef HAVE_MADWIFI #ifndef HAVE_BUFFALO if (has_5ghz(prefix)) { showRadio(wp, "wl_basic.radar", wl_doth); } show_chanshift(wp, prefix); #endif #endif #ifdef HAVE_RT2880 #else if (nvram_match(wl_mode, "ap") || nvram_match(wl_mode, "wdsap") || nvram_match(wl_mode, "infra")) #endif { if (has_mimo(prefix) && (nvram_nmatch("n-only", "%s_net_mode", prefix) || nvram_nmatch("ng-only", "%s_net_mode", prefix) || nvram_nmatch("mixed", "%s_net_mode", prefix) || nvram_nmatch("n2-only", "%s_net_mode", prefix) || nvram_nmatch("n5-only", "%s_net_mode", prefix) || nvram_nmatch("na-only", "%s_net_mode", prefix))) { show_channel(wp, prefix, prefix, 1); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); if (nvram_nmatch("40", "%s_nbw", prefix)) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } } else { show_channel(wp, prefix, prefix, 0); #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (is_ath11n(prefix) && (nvram_match(wl_width, "40") || nvram_match(wl_width, "2040"))) { fprintf(stderr, "[CHANNEL WIDTH] 20/40 (2)\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } #endif } char wl_closed[16]; sprintf(wl_closed, "%s_closed", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, " \n", wl_closed, nvram_match(wl_closed, "0") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", wl_closed, nvram_match(wl_closed, "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); } #ifdef HAVE_MADWIFI // if (nvram_match (wl_mode, "sta") || nvram_match (wl_mode, "wdssta") // || nvram_match (wl_mode, "wet")) { char wl_scanlist[32]; sprintf(wl_scanlist, "%s_scanlist", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", wl_scanlist, nvram_default_get(wl_scanlist, "default")); websWrite(wp, "
\n"); } #endif // ACK timing #if defined(HAVE_ACK) || defined(HAVE_MADWIFI) // temp fix for v24 broadcom // ACKnot working sprintf(power, "%s_distance", prefix); //websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", power, nvram_default_get(power, "2000")); websWrite(wp, "\n"); websWrite(wp, "
\n"); // end ACK timing #endif #ifdef HAVE_MADWIFI if (nvram_nmatch("ap", "%s_mode", prefix) || nvram_nmatch("wdsap", "%s_mode", prefix) || nvram_nmatch("infra", "%s_mode", prefix)) { sprintf(power, "%s_maxassoc", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", power, nvram_default_get(power, "256")); websWrite(wp, "\n"); websWrite(wp, "
\n"); } sprintf(power, "%s_mtikie", prefix); nvram_default_get(power, "0"); showRadio(wp, "wl_basic.mtikie", power); showbridgesettings(wp, prefix, 1, 1); #elif HAVE_RT2880 showbridgesettings(wp, "ra0", 1, 1); #else if (!strcmp(prefix, "wl0")) showbridgesettings(wp, get_wl_instance_name(0), 1, 1); if (!strcmp(prefix, "wl1")) showbridgesettings(wp, get_wl_instance_name(1), 1, 1); #endif #else // BUFFALO Basic #ifdef HAVE_MADWIFI // if (!strcmp (prefix, "ath0")) #endif { // #ifdef HAVE_MADWIFI // if (!strcmp (prefix, "ath0")) //show client only on first // interface // #endif { #ifdef HAVE_MADWIFI // if (!strcmp (prefix, "ath0")) //show client only on first // interface // if (nvram_match ("ath0_mode", "wdsap") // || nvram_match ("ath0_mode", "wdssta")) // showOption (wp, "wl_basic.wifi_bonding", "wifi_bonding"); #endif #ifdef HAVE_REGISTER int cpeonly = iscpe(); #else int cpeonly = 0; #endif websWrite(wp, "
\n"); websWrite(wp, "
\n"); } } // RELAYD OPTIONAL SETTINGS #ifdef HAVE_RELAYD if (nvram_match(wl_mode, "wet")) { char wl_relayd[32]; int ip[4] = { 0, 0, 0, 0 }; websWrite(wp, "
\n
"); sprintf(wl_relayd, "%s_relayd_gw_auto", prefix); websWrite(wp, "  (DHCP) \n", prefix, prefix, nvram_default_match(wl_relayd, "1", "1") ? "checked" : ""); websWrite(wp, " \n", prefix, prefix, nvram_default_match(wl_relayd, "0", "1") ? "checked" : ""); websWrite(wp, "
\n"); sprintf(wl_relayd, "%s_relayd_gw_ipaddr", prefix); sscanf(nvram_safe_get(wl_relayd), "%d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3]); sprintf(wl_relayd, "%s_relayd_gw_auto", prefix); websWrite(wp, "\
\n\ \n\
\n\ ...\n\
\n", prefix, nvram_default_match(wl_relayd, "1", "0") ? " style=\"display: none; visibility: hidden;\"" : "", prefix, prefix, ip[0], prefix, ip[1], prefix, ip[2], prefix, ip[3]); } #endif // wireless net mode show_netmode(wp, prefix); // turbo options #ifdef HAVE_MADWIFI // char wl_xchanmode[16]; char wl_outdoor[16]; char wl_diversity[16]; char wl_rxantenna[16]; char wl_txantenna[16]; char wl_width[16]; char wl_preamble[16]; char wl_xr[16]; char wl_comp[32]; char wl_ff[16]; char wmm[32]; char wl_isolate[32]; char wl_sifstime[32]; char wl_preambletime[32]; char wl_intmit[32]; char wl_noise_immunity[32]; char wl_ofdm_weak_det[32]; char wl_protmode[32]; char wl_doth[32]; char wl_csma[32]; sprintf(wl_csma, "%s_csma", prefix); sprintf(wl_doth, "%s_doth", prefix); sprintf(wl_protmode, "%s_protmode", prefix); sprintf(wl_outdoor, "%s_outdoor", prefix); sprintf(wl_diversity, "%s_diversity", prefix); sprintf(wl_rxantenna, "%s_rxantenna", prefix); sprintf(wl_txantenna, "%s_txantenna", prefix); sprintf(wl_width, "%s_channelbw", prefix); // sprintf( wl_comp, "%s_compression", prefix ); sprintf(wl_ff, "%s_ff", prefix); sprintf(wl_preamble, "%s_preamble", prefix); sprintf(wl_preambletime, "%s_preambletime", prefix); sprintf(wl_sifstime, "%s_sifstime", prefix); sprintf(wl_xr, "%s_xr", prefix); sprintf(wl_intmit, "%s_intmit", prefix); sprintf(wl_noise_immunity, "%s_noise_immunity", prefix); sprintf(wl_ofdm_weak_det, "%s_ofdm_weak_det", prefix); #if 0 showRadio(wp, "wl_basic.csma", wl_csma); #endif // showOption (wp, "wl_basic.extchannel", wl_xchanmode); websWrite(wp, "
\n"); websWrite(wp, "
\n"); // test #ifdef HAVE_RT2880 #else if (nvram_match(wl_mode, "ap") || nvram_match(wl_mode, "wdsap") || nvram_match(wl_mode, "infra")) #endif { if (has_mimo(prefix) && (nvram_nmatch("n-only", "%s_net_mode", prefix) || nvram_nmatch("ng-only", "%s_net_mode", prefix) || nvram_nmatch("mixed", "%s_net_mode", prefix) || nvram_nmatch("n2-only", "%s_net_mode", prefix) || nvram_nmatch("n5-only", "%s_net_mode", prefix) || nvram_nmatch("na-only", "%s_net_mode", prefix))) { show_channel(wp, prefix, prefix, 1); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); if (nvram_nmatch("40", "%s_nbw", prefix)) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } } else { show_channel(wp, prefix, prefix, 0); #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (is_ath11n(prefix) && (nvram_match(wl_width, "40") || nvram_match(wl_width, "2040"))) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } #endif } } // wireless ssid websWrite(wp, "
\n"); websWrite(wp, "
\n", wl_ssid, nvram_safe_get(wl_ssid)); #ifdef HAVE_RT2880 if (nvram_match(wl_mode, "ap") || nvram_match(wl_mode, "wdsap") || nvram_match(wl_mode, "infra") || nvram_match(wl_mode, "apsta") || nvram_match(wl_mode, "apstawet")) #else if (nvram_match(wl_mode, "ap") || nvram_match(wl_mode, "wdsap") || nvram_match(wl_mode, "infra")) #endif { // ssid broadcast char wl_closed[16]; sprintf(wl_closed, "%s_closed", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, " \n", wl_closed, nvram_match(wl_closed, "0") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", wl_closed, nvram_match(wl_closed, "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); } #ifdef HAVE_IFL // label char wl_label[16]; sprintf(wl_label, "%s_label", prefix); websWrite(wp, "
\n
\n", wl_label, nvram_safe_get(wl_label)); #endif // WIRELESS Advanced char advanced_label[32]; sprintf(advanced_label, "%s_wl_advanced", prefix); websWrite(wp, "
\n"); websWrite(wp, "", advanced_label, advanced_label, websGetVar(wp, advanced_label, NULL) ? " checked=\"checked\"" : ""); websWrite(wp, "
\n"); websWrite(wp, "
\n", advanced_label, websGetVar(wp, advanced_label, NULL) ? "" : " style=\"display: none;\""); #ifdef HAVE_IFL char wl_note[16]; sprintf(wl_note, "%s_note", prefix); websWrite(wp, "
\n
\n", wl_note, nvram_safe_get(wl_note)); #endif #ifdef HAVE_MADWIFI #ifndef HAVE_MAKSAT #ifndef HAVE_DDLINK if (isXR36(prefix)) { char wl_cardtype[32]; sprintf(wl_cardtype, "%s_cardtype", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); } if (isEMP(prefix)) { char wl_cardtype[32]; sprintf(wl_cardtype, "%s_cardtype", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); } #endif #endif // ! HAVE MAKSAT #ifndef HAVE_NOCOUNTRYSEL char wl_regdomain[16]; sprintf(wl_regdomain, "%s_regdomain", prefix); if (1 || nvram_nmatch("1", "%s_regulatory", prefix) || !issuperchannel()) { websWrite(wp, "
\n"); char *list = getCountryList(); showOptions(wp, wl_regdomain, list, nvram_safe_get(wl_regdomain)); websWrite(wp, "
\n"); } #endif // ! HAVE MAKSAT // power adjustment sprintf(power, "%s_txpwrdbm", prefix); // sprintf (maxpower, "%s_maxpower", prefix); if (issuperchannel()) // show // client // only on // first // interface { char regulatory[32]; sprintf(regulatory, "%s_regulatory", prefix); nvram_default_get(regulatory, "0"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "  \n", prefix, nvram_match(regulatory, "0") ? "checked" : ""); websWrite(wp, " \n", prefix, nvram_match(regulatory, "1") ? "checked" : ""); websWrite(wp, "
\n"); } int txpower = atoi(nvram_safe_get(power)); #ifdef HAVE_ESPOD #ifdef HAVE_SUB3 if (txpower > 28 ) { txpower = 28; nvram_set(power, "28"); } #else if (txpower > 30 ) { txpower = 30; nvram_set(power, "30"); } #endif #endif websWrite(wp, "
\n"); websWrite(wp, "
dBm\n", power, txpower + wifi_gettxpoweroffset(prefix)); websWrite(wp, "
\n"); sprintf(power, "%s_antgain", prefix); #ifndef HAVE_MAKSAT if (nvram_nmatch("1", "%s_regulatory", prefix)) #endif { websWrite(wp, "
\n"); websWrite(wp, "
dBi\n", power, nvram_default_get(power,"0")); websWrite(wp, "
\n"); } #endif // channel options #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { showAutoOption(wp, "wl_basic.intmit", wl_intmit); websWrite(wp, "
\n"); websWrite(wp, "
\n\n
\n"); showRadio(wp, "wl_basic.ofdm_weak_det", wl_ofdm_weak_det); } showOptionsLabel(wp, "wl_basic.protmode", wl_protmode, "None CTS RTS/CTS", nvram_default_get(wl_protmode, "None")); showrtssettings(wp, prefix); if (!is_ath11n(prefix)) { show_rates(wp, prefix, 0); show_rates(wp, prefix, 1); } showRadio(wp, "wl_basic.preamble", wl_preamble); #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { showRadio(wp, "wl_basic.extrange", wl_xr); showRadio(wp, "wl_basic.supergff", wl_ff); } #ifndef HAVE_BUFFALO #if !defined(HAVE_FONERA) && !defined(HAVE_LS2) && !defined(HAVE_MERAKI) if (has_5ghz(prefix)) { if (nvram_nmatch("1", "%s_regulatory", prefix) || !issuperchannel()) { showRadio(wp, "wl_basic.outband", wl_outdoor); } } #endif #endif // antenna settings #if defined(HAVE_PICO2) || defined(HAVE_PICO2HP) || defined(HAVE_PICO5) // do nothing #elif defined(HAVE_NS2) || defined(HAVE_NS5) || defined(HAVE_LC2) || defined(HAVE_LC5) || defined(HAVE_NS3) websWrite(wp, "
\n"); websWrite(wp, "
\n"); #else #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { showRadio(wp, "wl_basic.diversity", wl_diversity); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); } #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) else { websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); } #endif #endif #endif // ap isolation #ifdef HAVE_MADWIFI sprintf(wl_isolate, "%s_ap_isolate", prefix); showRadio(wp, "wl_adv.label11", wl_isolate); #if 0 websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", wl_sifstime, nvram_default_get(wl_sifstime, "16")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", wl_preambletime, nvram_default_get(wl_preambletime, "20")); websWrite(wp, "
\n"); #endif // wmm #if defined(HAVE_MADWIFI_MIMO) || defined(HAVE_ATH9K) if (!is_ath11n(prefix)) #endif { sprintf(wmm, "%s_wmm", prefix); showRadio(wp, "wl_adv.label18", wmm); } #endif // radar detection #ifdef HAVE_MADWIFI #ifndef HAVE_BUFFALO if (has_5ghz(prefix)) { showRadio(wp, "wl_basic.radar", wl_doth); } show_chanshift(wp, prefix); #endif #endif // scanlist #ifdef HAVE_MADWIFI // if (nvram_match (wl_mode, "sta") || nvram_match (wl_mode, "wdssta") // || nvram_match (wl_mode, "wet")) { char wl_scanlist[32]; sprintf(wl_scanlist, "%s_scanlist", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", wl_scanlist, nvram_default_get(wl_scanlist, "default")); websWrite(wp, "
\n"); } #endif // ACK timing #if defined(HAVE_ACK) || defined(HAVE_MADWIFI) // temp fix for v24 broadcom // ACKnot working sprintf(power, "%s_distance", prefix); //websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", power, nvram_default_get(power, "2000")); websWrite(wp, "\n"); websWrite(wp, "
\n"); // end ACK timing #endif #ifdef HAVE_MADWIFI if (nvram_nmatch("ap", "%s_mode", prefix) || nvram_nmatch("wdsap", "%s_mode", prefix) || nvram_nmatch("infra", "%s_mode", prefix)) { sprintf(power, "%s_maxassoc", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", power, nvram_default_get(power, "256")); websWrite(wp, "\n"); websWrite(wp, "
\n"); } sprintf(power, "%s_mtikie", prefix); nvram_default_get(power, "0"); showRadio(wp, "wl_basic.mtikie", power); showbridgesettings(wp, prefix, 1, 1); #elif HAVE_RT2880 showbridgesettings(wp, "ra0", 1, 1); #else if (!strcmp(prefix, "wl0")) showbridgesettings(wp, get_wl_instance_name(0), 1, 1); if (!strcmp(prefix, "wl1")) showbridgesettings(wp, get_wl_instance_name(1), 1, 1); #endif websWrite(wp, "
\n"); #endif // end BUFFALO websWrite(wp, "
\n"); websWrite(wp, "
\n"); #ifdef HAVE_REGISTER if (!iscpe()) #endif show_virtualssid(wp, prefix); } void ej_show_wireless(webs_t wp, int argc, char_t ** argv) { #ifdef HAVE_MADWIFI int c = getdevicecount(); int i; for (i = 0; i < c; i++) { char buf[16]; sprintf(buf, "ath%d", i); ej_show_wireless_single(wp, buf); } #else int c = get_wl_instances(); int i; for (i = 0; i < c; i++) { char buf[16]; sprintf(buf, "wl%d", i); ej_show_wireless_single(wp, buf); } #endif return; } void show_preshared(webs_t wp, char *prefix) { char var[80]; cprintf("show preshared"); sprintf(var, "%s_crypto", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_wpa_psk", prefix); websWrite(wp, #ifdef HAVE_BUFFALO "   \n"); websWrite(wp, " \n", prefix, prefix); websWrite(wp, "
\n"); if (nvram_nmatch("ap", "%s_mode", prefix) || nvram_nmatch("wdsap", "%s_mode", prefix)) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_wpa_gtk_rekey", prefix); websWrite(wp, "\n", prefix, nvram_default_get(var, "3600")); websWrite(wp, #ifdef HAVE_BUFFALO "\n"); #else "\n"); #endif websWrite(wp, "
\n"); } websWrite(wp, "
\n"); } void show_radius(webs_t wp, char *prefix, int showmacformat, int backup) { char var[80]; cprintf("show radius\n"); if (showmacformat) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } char *rad = nvram_nget("%s_radius_ipaddr", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", prefix); websWrite(wp, ".", prefix, get_single_ip(rad, 0)); websWrite(wp, ".", prefix, get_single_ip(rad, 1)); websWrite(wp, ".", prefix, get_single_ip(rad, 2)); websWrite(wp, "\n", prefix, get_single_ip(rad, 3)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_radius_port", prefix); websWrite(wp, "\n", prefix, nvram_default_get(var, "1812")); websWrite(wp, "\n
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_radius_key", prefix); websWrite(wp, "   \n"); websWrite(wp, " \n", prefix, prefix); if (backup) { rad = nvram_nget("%s_radius2_ipaddr", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", prefix); websWrite(wp, ".", prefix, get_single_ip(rad, 0)); websWrite(wp, ".", prefix, get_single_ip(rad, 1)); websWrite(wp, ".", prefix, get_single_ip(rad, 2)); websWrite(wp, "\n", prefix, get_single_ip(rad, 3)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_radius2_port", prefix); websWrite(wp, "\n", prefix, nvram_default_get(var, "1812")); websWrite(wp, "\n
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_radius2_key", prefix); websWrite(wp, "   \n"); websWrite(wp, " \n", prefix, prefix); } websWrite(wp, "
\n"); #ifdef HAVE_MADWIFI if (!showmacformat) { char acct[32]; char vvar[32]; strcpy(vvar, prefix); rep(vvar, '.', 'X'); sprintf(acct, "%s_acct", prefix); websWrite(wp, "
\n
\n"); websWrite(wp, "\n", vvar, prefix, nvram_default_match(acct, "1", "0") ? "checked=\"checked\"" : ""); websWrite(wp, " \n", vvar, prefix, nvram_default_match(acct, "0", "0") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); char *rad = nvram_nget("%s_acct_ipaddr", prefix); websWrite(wp, "
\n", vvar); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n", prefix); websWrite(wp, ".", prefix, get_single_ip(rad, 0)); websWrite(wp, ".", prefix, get_single_ip(rad, 1)); websWrite(wp, ".", prefix, get_single_ip(rad, 2)); websWrite(wp, "\n", prefix, get_single_ip(rad, 3)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_acct_port", prefix); websWrite(wp, "\n", prefix, nvram_default_get(var, "1813")); websWrite(wp, "\n
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_acct_key", prefix); websWrite(wp, "   \n"); websWrite(wp, " \n", prefix, prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); } #endif } #ifdef HAVE_WPA_SUPPLICANT #ifndef HAVE_MICRO static void init_80211x_layers(webs_t wp, char *prefix) { if (nvram_prefix_match("8021xtype", prefix, "tls")) { websWrite(wp, "enable_idtls(\"%s\");\n", prefix); } if (nvram_prefix_match("8021xtype", prefix, "leap")) { websWrite(wp, "enable_idleap(\"%s\");\n", prefix); } if (nvram_prefix_match("8021xtype", prefix, "ttls")) { websWrite(wp, "enable_idttls(\"%s\");\n", prefix); } if (nvram_prefix_match("8021xtype", prefix, "peap")) { websWrite(wp, "enable_idpeap(\"%s\");\n", prefix); } } void ej_init_80211x_layers(webs_t wp, int argc, char_t ** argv) { #ifndef HAVE_MADWIFI int c = get_wl_instances(); int i; for (i = 0; i < c; i++) { char buf[16]; sprintf(buf, "wl%d", i); init_80211x_layers(wp, buf); } return; #else int c = getdevicecount(); int i; for (i = 0; i < c; i++) { char buf[16]; sprintf(buf, "ath%d", i); if (nvram_nmatch("8021X", "%s_security_mode", buf)) init_80211x_layers(wp, buf); } return; #endif } void show_80211X(webs_t wp, char *prefix) { /* * fields * _8021xtype * _8021xuser * _8021xpasswd * _8021xca * _8021xpem * _8021xprv * _8021xaddopt */ char type[32]; sprintf(type, "%s_8021xtype", prefix); nvram_default_get(type, "ttls"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "Peap \n", prefix, prefix, nvram_prefix_match("8021xtype", prefix, "peap") ? "checked=\"checked\"" : ""); websWrite(wp, "Leap \n", prefix, prefix, nvram_prefix_match("8021xtype", prefix, "leap") ? "checked=\"checked\"" : ""); websWrite(wp, "TLS \n", prefix, prefix, nvram_prefix_match("8021xtype", prefix, "tls") ? "checked=\"checked\"" : ""); websWrite(wp, "TTLS \n", prefix, prefix, nvram_prefix_match("8021xtype", prefix, "ttls") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); // ttls authentication websWrite(wp, "
\n", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("ttls8021xuser", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("ttls8021xanon", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("ttls8021xpasswd", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("ttls8021xphase2", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); // peap authentication websWrite(wp, "
\n", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("peap8021xuser", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("peap8021xanon", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("peap8021xpasswd", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("peap8021xphase2", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); // leap authentication websWrite(wp, "
\n", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("leap8021xuser", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("leap8021xanon", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("leap8021xpasswd", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("leap8021xphase2", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); // tls authentication websWrite(wp, "
\n", prefix); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("tls8021xuser", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("tls8021xanon", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("tls8021xpasswd", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n", prefix, nvram_prefix_get("tls8021xphase2", prefix)); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); } #endif #endif void show_wparadius(webs_t wp, char *prefix) { char var[80]; websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "
\n"); #ifdef HAVE_MADWIFI show_radius(wp, prefix, 0, 1); #else show_radius(wp, prefix, 0, 0); #endif websWrite(wp, "
\n"); websWrite(wp, "
\n"); sprintf(var, "%s_wpa_gtk_rekey", prefix); websWrite(wp, "", prefix, nvram_default_get(var, "3600")); websWrite(wp, "
\n"); websWrite(wp, "
\n"); } void show_wep(webs_t wp, char *prefix) { char var[80]; char *bit; cprintf("show wep\n"); #if defined(HAVE_MADWIFI) || defined(HAVE_RT2880) char wl_authmode[16]; sprintf(wl_authmode, "%s_authmode", prefix); nvram_default_get(wl_authmode, "open"); if (nvram_invmatch(wl_authmode, "auto")) { websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, " \n", wl_authmode, nvram_match(wl_authmode, "open") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", wl_authmode, nvram_match(wl_authmode, "shared") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); } #endif websWrite(wp, "
"); websWrite(wp, "", prefix); websWrite(wp, "", prefix); sprintf(var, "%s_key", prefix); nvram_default_get(var, "1"); fprintf(stderr, "[WEP] default: %s\n", var); websWrite(wp, "1 \n", prefix, selmatch(var, "1", "checked=\"checked\"")); websWrite(wp, "2 \n", prefix, selmatch(var, "2", "checked=\"checked\"")); websWrite(wp, "3 \n", prefix, selmatch(var, "3", "checked=\"checked\"")); websWrite(wp, "4 \n", prefix, selmatch(var, "4", "checked=\"checked\"")); websWrite(wp, "
"); websWrite(wp, "
"); sprintf(var, "%s_wep_bit", prefix); bit = nvram_safe_get(var); cprintf("bit %s\n", bit); websWrite(wp, "\n
\n
\n
\n"); websWrite(wp, " \"%s\"\n", p_temp, nvram_safe_get("passphrase_temp")); websWrite(wp, "%s", p_temp); } else { tf_webWriteESCNV(wp, "passphrase_temp"); } nvram_unset("passphrase_temp"); websWrite(wp, "\" />"); websWrite(wp, "\n"); websWrite(wp, "\n
", prefix); char *mlen = "10"; char *mlen2 = "12"; if (!strcmp(bit, "128")) { mlen = "26"; mlen2 = "30"; } websWrite(wp, "
1
\n"); websWrite(wp, "
\n", prefix, mlen2, mlen, nvram_nget("%s_key1", prefix)); websWrite(wp, "
2
\n"); websWrite(wp, "
\n", prefix, mlen2, mlen, nvram_nget("%s_key2", prefix)); websWrite(wp, "
3
\n"); websWrite(wp, "
\n", prefix, mlen2, mlen, nvram_nget("%s_key3", prefix)); websWrite(wp, "
4
\n"); websWrite(wp, "
\n", prefix, mlen2, mlen, nvram_nget("%s_key4", prefix)); websWrite(wp, "
\n"); } void ej_show_defwpower(webs_t wp, int argc, char_t ** argv) { switch (getRouterBrand()) { case ROUTER_ASUS_RTN10: case ROUTER_ASUS_RTN12: case ROUTER_ASUS_RTN16: websWrite(wp, "17"); break; #ifndef HAVE_BUFFALO case ROUTER_BUFFALO_WHRG54S: if (nvram_match("DD_BOARD", "Buffalo WHR-HP-G54")) websWrite(wp, "28"); else websWrite(wp, "71"); break; #endif case ROUTER_BUFFALO_WLI_TX4_G54HP: websWrite(wp, "28"); break; default: websWrite(wp, "71"); break; } } void ej_get_wds_mac(webs_t wp, int argc, char_t ** argv) { int mac = -1, wds_idx = -1, mac_idx = -1; char *c, wds_var[32] = ""; char *interface; if (ejArgs(argc, argv, "%d %d %s", &wds_idx, &mac_idx, &interface) < 3) { websError(wp, 400, "Insufficient args\n"); return; } else if (wds_idx < 1 || wds_idx > MAX_WDS_DEVS) return; else if (mac_idx < 0 || mac_idx > 5) return; snprintf(wds_var, 31, "%s_wds%d_hwaddr", interface, wds_idx); c = nvram_safe_get(wds_var); if (c) { mac = get_single_mac(c, mac_idx); websWrite(wp, "%02X", mac); } else websWrite(wp, "00"); return; } void ej_showbridgesettings(webs_t wp, int argc, char_t ** argv) { char *interface; int mcast; #ifdef FASTWEB ejArgs(argc, argv, "%s %d", &interface, &mcast); #else if (ejArgs(argc, argv, "%s %d", &interface, &mcast) < 2) { websError(wp, 400, "Insufficient args\n"); return; } #endif showbridgesettings(wp, interface, mcast, 0); } void ej_get_wds_ip(webs_t wp, int argc, char_t ** argv) { int ip = -1, wds_idx = -1, ip_idx = -1; char *c, wds_var[32] = ""; char *interface; #ifdef FASTWEB ejArgs(argc, argv, "%d %d %s", &wds_idx, &ip_idx, &interface); #else if (ejArgs(argc, argv, "%d %d %s", &wds_idx, &ip_idx, &interface) < 3) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (wds_idx < 1 || wds_idx > MAX_WDS_DEVS) return; else if (ip_idx < 0 || ip_idx > 3) return; snprintf(wds_var, 31, "%s_wds%d_ipaddr", interface, wds_idx); c = nvram_safe_get(wds_var); if (c) { ip = get_single_ip(c, ip_idx); websWrite(wp, "%d", ip); } else websWrite(wp, "0"); return; } void ej_get_wds_netmask(webs_t wp, int argc, char_t ** argv) { int nm = -1, wds_idx = -1, nm_idx = -1; char *c, wds_var[32] = ""; char *interface; #ifdef FASTWEB ejArgs(argc, argv, "%d %d %s", &wds_idx, &nm_idx, &interface); #else if (ejArgs(argc, argv, "%d %d %s", &wds_idx, &nm_idx, &interface) < 3) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (wds_idx < 1 || wds_idx > 6) return; else if (nm_idx < 0 || nm_idx > 3) return; snprintf(wds_var, 31, "%s_wds%d_netmask", interface, wds_idx); c = nvram_safe_get(wds_var); if (c) { nm = get_single_ip(c, nm_idx); websWrite(wp, "%d", nm); } else websWrite(wp, "255"); return; } void ej_get_wds_gw(webs_t wp, int argc, char_t ** argv) { int gw = -1, wds_idx = -1, gw_idx = -1; char *c, wds_var[32] = ""; char *interface; #ifdef FASTWEB ejArgs(argc, argv, "%d %d %s", &wds_idx, &gw_idx, &interface); #else if (ejArgs(argc, argv, "%d %d %s", &wds_idx, &gw_idx, &interface) < 3) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (wds_idx < 1 || wds_idx > MAX_WDS_DEVS) return; else if (gw_idx < 0 || gw_idx > 3) return; snprintf(wds_var, 31, "%s_wds%d_gw", interface, wds_idx); c = nvram_safe_get(wds_var); if (c) { gw = get_single_ip(c, gw_idx); websWrite(wp, "%d", gw); } else websWrite(wp, "0"); return; } void ej_get_br1_ip(webs_t wp, int argc, char_t ** argv) { int ip = -1, ip_idx = -1; char *c; char *interface; #ifdef FASTWEB ejArgs(argc, argv, "%d %s", &ip_idx, &interface); #else if (ejArgs(argc, argv, "%d %s", &ip_idx, &interface) < 2) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (ip_idx < 0 || ip_idx > 3) return; char br1[32]; sprintf(br1, "%s_br1_ipaddr", interface); c = nvram_safe_get(br1); if (c) { ip = get_single_ip(c, ip_idx); websWrite(wp, "%d", ip); } else websWrite(wp, "0"); return; } void ej_get_br1_netmask(webs_t wp, int argc, char_t ** argv) { int nm = -1, nm_idx = -1; char *c; char *interface; #ifdef FASTWEB ejArgs(argc, argv, "%d %s", &nm_idx, &interface); #else if (ejArgs(argc, argv, "%d %s", &nm_idx, &interface) < 2) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (nm_idx < 0 || nm_idx > 3) return; char nms[32]; sprintf(nms, "%s_br1_netmask", interface); c = nvram_safe_get(nms); if (c) { nm = get_single_ip(c, nm_idx); websWrite(wp, "%d", nm); } else websWrite(wp, "255"); return; } void ej_get_uptime(webs_t wp, int argc, char_t ** argv) { char line[256]; FILE *fp; if ((fp = popen("uptime", "r"))) { fgets(line, sizeof(line), fp); line[strlen(line) - 1] = '\0'; // replace new line with null #ifdef HAVE_ESPOD char *p; p = strtok( line, "," ); if( p != NULL ) { websWrite(wp, "%s
\n", p); p = strtok( NULL, "\0"); websWrite(wp, "%s", p); } #else websWrite(wp, "%s", line); #endif pclose(fp); } return; } void ej_get_wan_uptime(webs_t wp, int argc, char_t ** argv) { float sys_uptime; float uptime; int days, minutes; FILE *fp, *fp2; if (nvram_match("wan_proto", "disabled")) return; if (nvram_match("wan_ipaddr", "0.0.0.0")) { websWrite(wp, "%s", live_translate("status_router.notavail")); return; } if (!(fp = fopen("/tmp/.wanuptime", "r"))) { websWrite(wp, "%s", live_translate("status_router.notavail")); return; } if (!feof(fp) && fscanf(fp, "%f", &uptime) == 1) { fp2 = fopen("/proc/uptime", "r"); fscanf(fp2, "%f", &sys_uptime); fclose(fp2); uptime = sys_uptime - uptime; days = (int)uptime / (60 * 60 * 24); if (days) websWrite(wp, "%d day%s, ", days, (days == 1 ? "" : "s")); minutes = (int)uptime / 60; websWrite(wp, "%d:%02d:%02d", (minutes / 60) % 24, minutes % 60, (int)uptime % 60); } fclose(fp); return; } void ej_get_wdsp2p(webs_t wp, int argc, char_t ** argv) { int index = -1, ip[4] = { 0, 0, 0, 0 }, netmask[4] = { 0, 0, 0, 0}; char nvramvar[32] = { 0 }; char *interface; #ifdef FASTWEB ejArgs(argc, argv, "%d %s", &index, &interface); #else if (ejArgs(argc, argv, "%d %s", &index, &interface) < 2) { websError(wp, 400, "Insufficient args\n"); return; } #endif char wlwds[32]; sprintf(wlwds, "%s_wds1_enable", interface); if (nvram_selmatch(wp, "wk_mode", "ospf") && nvram_selmatch(wp, "expert_mode", "1") && nvram_selmatch(wp, wlwds, "1")) { char buf[16]; sprintf(buf, "%s_wds%d_ospf", interface, index); websWrite(wp, "\n", buf, nvram_safe_get(buf)); } snprintf(nvramvar, 31, "%s_wds%d_ipaddr", interface, index); sscanf(nvram_safe_get(nvramvar), "%d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3]); snprintf(nvramvar, 31, "%s_wds%d_netmask", interface, index); sscanf(nvram_safe_get(nvramvar), "%d.%d.%d.%d", &netmask[0], &netmask[1], &netmask[2], &netmask[3]); snprintf(nvramvar, 31, "%s_wds%d_enable", interface, index); // set netmask to a suggested default if blank if (netmask[0] == 0 && netmask[1] == 0 && netmask[2] == 0 && netmask[3] == 0) { netmask[0] = 255; netmask[1] = 255; netmask[2] = 255; netmask[3] = 252; } if (nvram_match(nvramvar, "1")) { websWrite(wp, "\
\n\ \n\
\n\ ...\n\
\n", interface, index, interface, index, ip[0], interface, index, ip[1], interface, index, ip[2], interface, index, ip[3]); websWrite(wp, "\
\n\
\n\ \n\ ...\n\
\n", interface, index, interface, index, netmask[0], interface, index, netmask[1], interface, index, netmask[2], interface, index, netmask[3]); } return; } void ej_get_clone_wmac(webs_t wp, int argc, char_t ** argv) { #ifdef HAVE_RB500 return 0; #else char *c; int mac, which; int dofree = 0; #ifdef FASTWEB ejArgs(argc, argv, "%d", &which); #else if (ejArgs(argc, argv, "%d", &which) < 1) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (nvram_match("def_whwaddr", "00:00:00:00:00:00")) { // if (strlen (nvram_safe_get ("il0macaddr")) == 0) // { // if (nvram_match ("port_swap", "1")) // c = strdup (nvram_safe_get ("et1macaddr")); // else // c = strdup (nvram_safe_get ("et0macaddr")); // MAC_ADD (c); // } // else // { // c = strdup (nvram_safe_get ("il0macaddr")); // } // dofree = 1; if (nvram_match("port_swap", "1")) { if (strlen(nvram_safe_get("et1macaddr")) != 0) // safe: // maybe // et1macaddr // not there? { c = strdup(nvram_safe_get("et1macaddr")); } else { c = strdup(nvram_safe_get("et0macaddr")); MAC_ADD(c); // et0macaddr +3 } } else { c = strdup(nvram_safe_get("et0macaddr")); } dofree = 1; if (c) { MAC_ADD(c); MAC_ADD(c); } } else c = nvram_safe_get("def_whwaddr"); if (c) { mac = get_single_mac(c, which); websWrite(wp, "%02X", mac); if (dofree) free(c); } else websWrite(wp, "00"); return; #endif } /* * todo stylesheet compatible code */ /* * lonewolf additions */ // Note that there is no VLAN #16. It's just a convieniant way of denoting a // "Tagged" port void ej_port_vlan_table(webs_t wp, int argc, char_t ** argv) { /* * vlans[x][y] where x 0-15 are VLANS x 16 is tagging, 17 is * auto-negotiation, 18 is 100/10 Mbit, and 19 is Full/Half duplex y 0-4 * are switch ports (port 5 is set automaticly) y 5 it the bridge device * (x 16 dosn't apply) */ int i, j, vlans[21][6], tmp, wl_br; char *c, *next, buff[32], portvlan[32]; for (i = 0; i < 21; i++) for (j = 0; j < 6; j++) vlans[i][j] = -1; wl_br = -1; for (i = 0; i < 8; i++) { if (i < 5) snprintf(buff, 31, "port%dvlans", i); else if (i == 5) snprintf(buff, 31, "%s", "lan_ifnames"); else snprintf(buff, 31, "ub%d_ifnames", i - 5); c = nvram_safe_get(buff); if (c) { foreach(portvlan, c, next) { if (portvlan[0] == 'e' && portvlan[1] == 't' && portvlan[2] == 'h' && portvlan[3] == '1') wl_br = i - 5; if (ISDIGIT(portvlan, 1) || (portvlan[0] == 'v' && portvlan[1] == 'l' && portvlan[2] == 'a' && portvlan[3] == 'n')) { if (ISDIGIT(portvlan, 1)) tmp = atoi(portvlan); else { portvlan[0] = portvlan[4]; portvlan[1] = portvlan[5]; portvlan[2] = '\0'; if (ISDIGIT(portvlan, 1)) tmp = atoi(portvlan); else continue; } if (i < 5) { vlans[tmp][i] = 1; } else { vlans[tmp][5] = i - 5; } } } } } for (i = 0; i < 21; i++) { websWrite(wp, " \n"); websWrite(wp, ""); switch (i) { case 16: websWrite(wp, ""); break; case 17: websWrite(wp, ""); break; case 18: websWrite(wp, "Full Speed"); break; case 19: websWrite(wp, "Full Duplex"); break; case 20: websWrite(wp, "Enabled"); break; default: snprintf(buff, 31, "%d", i); websWrite(wp, buff); break; } websWrite(wp, "\n"); for (j = 0; j < 5; j++) { snprintf(buff, 31, "\"port%dvlan%d\"", j, i); websWrite(wp, "
\n"); } if (i < 16) { websWrite(wp, " \n"); } else { websWrite(wp, " \n"); } websWrite(wp, "\n"); if (i == 16 || i == 20) { websWrite(wp, " \n"); } } websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, " \n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, "\n"); websWrite(wp, " "); return; } /* * Note: VLAN #16 designates tagging. There is no VLAN #16 (only 0-15) */ void ej_get_qossvcs(webs_t wp, int argc, char_t ** argv) { char *qos_svcs = nvram_safe_get("svqos_svcs"); char name[32], type[32], data[32], level[32]; int no_svcs = 0, i = 0; // calc # of services // no_svcs = strspn(qos_svcs,"|"); while ((qos_svcs = strpbrk(qos_svcs, "|"))) { no_svcs++; qos_svcs++; } // write HTML data websWrite(wp, "", no_svcs); qos_svcs = nvram_safe_get("svqos_svcs"); /* * services format is "name type data level | name type data level |" * ..etc */ for (i = 0; i < no_svcs && qos_svcs && qos_svcs[0]; i++) { if (sscanf (qos_svcs, "%31s %31s %31s %31s ", name, type, data, level) < 4) break; websWrite(wp, "\n\ \n\ \n\ \n\ \n\ \n\ %s\n\ \n", i, i, name, i, type, name); websWrite(wp, "\n\ \n\ \n", i, strcmp(level, "100") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "10") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "20") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "30") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "40") == 0 ? "selected=\\\"selected\\\"" : ""); qos_svcs = strpbrk(++qos_svcs, "|"); qos_svcs++; } return; } #ifndef HAVE_AQOS void ej_get_qosips(webs_t wp, int argc, char_t ** argv) { char *qos_ips = nvram_safe_get("svqos_ips"); char ip[32], level[32]; int no_ips = 0, i = 0; // calc # of ips while ((qos_ips = strpbrk(qos_ips, "|"))) { no_ips++; qos_ips++; } websWrite(wp, "\n\ \n\ \n\ \n\ \n"); // write HTML data websWrite(wp, "", no_ips); qos_ips = nvram_safe_get("svqos_ips"); /* * IP format is "data level | data level |" ..etc */ for (i = 0; i < no_ips && qos_ips && qos_ips[0]; i++) { if (sscanf(qos_ips, "%31s %31s ", ip, level) < 2) break; websWrite(wp, "\n\ \n\ \n\ \n\ \n\ %s\n\ \n", i, i, ip, ip); websWrite(wp, "\n\ \n\ \n", i, strcmp(level, "100") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "10") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "20") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "30") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "40") == 0 ? "selected=\\\"selected\\\"" : ""); qos_ips = strpbrk(++qos_ips, "|"); qos_ips++; } return; } #else void ej_get_qosips(webs_t wp, int argc, char_t ** argv) { char *qos_ips = nvram_safe_get("svqos_ips"); char ip[32], level[32], level2[32], lanlevel[32]; int no_ips = 0, i = 0; // calc # of ips while ((qos_ips = strpbrk(qos_ips, "|"))) { no_ips++; qos_ips++; } websWrite(wp, "\n\ \n\ \n\ \n\ \n\ \n\ \n"); // write HTML data websWrite(wp, "", no_ips); qos_ips = nvram_safe_get("svqos_ips"); /* * IP format is "data level | data level |" ..etc */ lanlevel[0] = '\0'; for (i = 0; i < no_ips && qos_ips && qos_ips[0]; i++) { if (sscanf(qos_ips, "%31s %31s %31s %31s", ip, level, level2, lanlevel) < 3) break; websWrite(wp, "\n\ \n\ \n\ \n\ \n\ %s\n\ \n\ kBits\n\ \n\ \n\ kBits\n\ \n\ \n\ kBits\n\ \n\ \n", i, i, ip, ip, i, level, i, level2, i, atoi(lanlevel)); qos_ips = strpbrk(++qos_ips, "|"); qos_ips++; } return; } #endif #ifndef HAVE_AQOS void ej_get_qosmacs(webs_t wp, int argc, char_t ** argv) { char *qos_macs = nvram_safe_get("svqos_macs"); char mac[32], level[32]; int no_macs = 0, i = 0; // calc # of ips while ((qos_macs = strpbrk(qos_macs, "|"))) { no_macs++; qos_macs++; } websWrite(wp, "\n\ \n\ \n\ \n\ \n"); // write HTML data websWrite(wp, "", no_macs); qos_macs = nvram_safe_get("svqos_macs"); /* * IP format is "data level | data level |" ..etc */ for (i = 0; i < no_macs && qos_macs && qos_macs[0]; i++) { if (sscanf(qos_macs, "%31s %31s ", mac, level) < 2) break; websWrite(wp, "\n\ \n\ \n\ \n\ \n\ %s\n\ \n", i, i, mac, mac); websWrite(wp, "\n\ \n\ \n", i, strcmp(level, "100") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "10") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "20") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "30") == 0 ? "selected=\\\"selected\\\"" : "", strcmp(level, "40") == 0 ? "selected=\\\"selected\\\"" : ""); qos_macs = strpbrk(++qos_macs, "|"); qos_macs++; } return; } #else void ej_get_qosmacs(webs_t wp, int argc, char_t ** argv) { char *qos_macs = nvram_safe_get("svqos_macs"); char mac[32], level[32], level2[32], lanlevel[32], user[32]; int no_macs = 0, i = 0; // calc # of ips while ((qos_macs = strpbrk(qos_macs, "|"))) { no_macs++; qos_macs++; } websWrite(wp, "\n\ \n\ \n\ \n\ \n\ \n\ \n"); // write HTML data websWrite(wp, "", no_macs); qos_macs = nvram_safe_get("svqos_macs"); /* * IP format is "data level | data level |" ..etc */ for (i = 0; i < no_macs && qos_macs && qos_macs[0]; i++) { if (sscanf(qos_macs, "%31s %31s %31s %31s ", mac, level, level2, lanlevel) < 3) break; if (sscanf(qos_macs, "%31s %31s %31s %31s %32s ", mac, level, level2, user, lanlevel) < 5) sprintf(lanlevel, "0"); // if( lanlevel[0] == '|') // sprintf(lanlevel, "0"); websWrite(wp, "\n\ \n\ \n\ \n\ \n\ %s\n\ \n\ kBits\n\ \n\ \n\ kBits\n\ \n\ \n\ kBits\n\ \n\ \n", i, i, mac, mac, i, level, i, level2, i, lanlevel); qos_macs = strpbrk(++qos_macs, "|"); qos_macs++; } return; } #endif /* * Added by Botho 03.April.06 */ void ej_dumpip_conntrack(webs_t wp, int argc, char_t ** argv) { int ip_count = 0; FILE *fp; int c; fp = fopen("/proc/net/ip_conntrack", "rb"); if (fp == NULL) return; while (!feof(fp)) { c = getc(fp); if (c == EOF) break; if (c == 0xa) ip_count++; } websWrite(wp, "%d", ip_count); fclose(fp); return; } /* * Added by Botho 28.Oct.06 */ static int search_hit(char *search, char *line, char *ret) { unsigned int searchLen; unsigned int i; unsigned int j; unsigned int lineLen; if (line == NULL || search == NULL || ret == NULL) return 1; lineLen = strlen(line); searchLen = strlen(search); if (searchLen > lineLen) return (1); // this can't match, invalid data? for (i = 0; i < lineLen - searchLen; i++) { if (!strncasecmp((char *)&line[i], search, searchLen)) break; // we got hit } for (j = i + searchLen; j < i + 15 + searchLen; j++) { if (j >= lineLen) break; // end of line may be a delimiter too // return(1); // incomplete data if (line[j] == ' ') break; // we reach _space_ delimiter } memcpy(ret, &line[i + searchLen], j - (i + searchLen)); ret[j - (i + searchLen)] = 0; return (0); } static int string_search(char *string, char *search) { int searchLen; int i; if (search == NULL) return 0; searchLen = strlen(search); if (string == NULL) return 0; if (searchLen > strlen(string)) { return (0); // this can't match } int slen = strlen(string); for (i = 0; i < slen - searchLen; i++) { // +1 removed. if (!strncasecmp((char *)&string[i], search, searchLen)) { return (1); // we got hit } } return (0); } void ej_ip_conntrack_table(webs_t wp, int argc, char_t ** argv) { FILE *fp; int ip_count = 1; char line[512]; char protocol[16] = ""; int timeout = 0; char srcip[16] = ""; char dstip[16] = ""; int _dport; struct servent *servp; char dstport[6] = ""; char state[12] = ""; char dum1[32]; int dum2; char *lanip = nvram_get("lan_ipaddr"); fp = fopen("/proc/net/ip_conntrack", "rb"); if (fp == NULL) return; while (fgets(line, sizeof(line), fp) != NULL) { websWrite(wp, "\n"); // Nb websWrite(wp, "%d", ip_count); // Proto if (string_search(line, "tcp")) sprintf(protocol, "TCP"); else if (string_search(line, "udp")) sprintf(protocol, "UDP"); else if (string_search(line, "icmp")) sprintf(protocol, "ICMP"); else sprintf(protocol, live_translate("share.unknown")); websWrite(wp, "%s", protocol); // Timeout sscanf(line, "%s %d %d", &dum1[0], &dum2, &timeout); websWrite(wp, "%d", timeout); // src search_hit("src=", line, srcip); // char buf[200]; // getHostName (buf, srcip); // websWrite (wp, "%s", // buf != "unknown" ? buf : live_translate ("share.unknown") , // srcip); if (!strcmp(srcip, lanip)) websWrite(wp, "%s", srcip); else websWrite(wp, "%s", srcip, srcip); // dst search_hit("dst=", line, dstip); // getHostName (buf, dstip); // websWrite (wp, "%s", // buf != "unknown" ? buf : live_translate ("share.unknown") , // dstip); if (!strcmp(dstip, lanip)) websWrite(wp, "%s", dstip); else websWrite(wp, "%s", dstip, dstip); // service search_hit("dport=", line, dstport); _dport = atoi(dstport); servp = my_getservbyport(htons(_dport), protocol); websWrite(wp, "%s", servp ? servp->s_name : dstport); // State if (string_search(line, "ESTABLISHED")) sprintf(state, "ESTABLISHED"); else if (string_search(line, "TIME_WAIT")) sprintf(state, "TIME_WAIT"); else if (string_search(line, "UNREPLIED")) sprintf(state, "UNREPLIED"); else if (string_search(line, "CLOSE")) sprintf(state, "CLOSE"); else if (string_search(line, "ASSURED")) sprintf(state, "ASSURED"); else { if (string_search(line, "udp")) sprintf(state, "UNREPLIED"); else sprintf(state, " "); } websWrite(wp, "%s\n", state); websWrite(wp, "\n"); ip_count++; } fclose(fp); return; } void ej_gethostnamebyip(webs_t wp, int argc, char_t ** argv) { char buf[200]; char *argument; #ifdef FASTWEB ejArgs(argc, argv, "%s", &argument); #else if (ejArgs(argc, argv, "%s", &argument) < 1) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (argc == 1) { getHostName(buf, argument); websWrite(wp, "%s", strcmp(buf, "unknown") ? buf : live_translate("share.unknown")); } return; } /* * BEGIN Added by Botho 10.May.06 */ void ej_show_wan_to_switch(webs_t wp, int argc, char_t ** argv) { if (nvram_match("wan_proto", "disabled") || getSTA() || getWET()) // WAN // disabled // OR // Wirelles // is // not // AP { websWrite(wp, "
\n\ \n\
\n\
\n\ \n\
\n\

\n", nvram_match("fullswitch", "1") ? "checked=\"checked\"" : ""); } return; } #define PROC_DEV "/proc/net/dev" void ej_wl_packet_get(webs_t wp, int argc, char_t ** argv) { char line[256]; FILE *fp; #ifdef HAVE_MADWIFI char *ifname = nvram_safe_get("wifi_display"); #elif HAVE_RT2880 char *ifname = "ra0"; #else char name[32]; sprintf(name, "%s_ifname", nvram_safe_get("wifi_display")); char *ifname = nvram_safe_get(name); #endif struct dev_info { // unsigned long rx_bytes; unsigned long rx_pks; unsigned long rx_errs; unsigned long rx_drops; // unsigned long rx_fifo; // unsigned long rx_frame; // unsigned long rx_com; // unsigned long rx_mcast; // unsigned long tx_bytes; unsigned long tx_pks; unsigned long tx_errs; unsigned long tx_drops; // unsigned long tx_fifo; unsigned long tx_colls; // unsigned long tx_carr; // unsigned long tx_com; } info; info.rx_pks = info.rx_errs = info.rx_drops = 0; info.tx_pks = info.tx_errs = info.tx_drops = info.tx_colls = 0; if ((fp = fopen(PROC_DEV, "r")) == NULL) { return; } else { /* * Inter-| Receive | Transmit face |bytes packets errs drop fifo * frame compressed multicast|bytes packets errs drop fifo colls * carrier compressed lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 eth0: * 674829 5501 0 0 0 0 0 0 1249130 1831 0 0 0 0 0 0 eth1: 0 0 0 0 0 0 * 0 0 0 0 0 0 0 0 0 0 eth2: 0 0 0 0 0 719 0 0 1974 16 295 0 0 0 0 0 * br0: 107114 1078 0 0 0 0 0 0 910094 1304 0 0 0 0 0 0 * */ while (fgets(line, sizeof(line), fp) != NULL) { int ifl = 0; if (!strchr(line, ':')) continue; while (line[ifl] != ':') ifl++; line[ifl] = 0; /* interface */ char ifnamecopy[32]; int l = 0; int i; int len = strlen(line); for (i = 0; i < len; i++) { if (line[i] == ' ') continue; ifnamecopy[l++] = line[i]; } ifnamecopy[l] = 0; if (!strcmp(ifnamecopy, ifname)) { /* * sscanf (line + ifl + 1, "%ld %ld %ld %ld %ld %ld %ld %ld * %ld %ld %ld %ld %ld %ld %ld %ld", &info.rx_bytes, * &info.rx_pks, &info.rx_errs, &info.rx_drops, * &info.rx_fifo, &info.rx_frame, &info.rx_com, * &info.rx_mcast, &info.tx_bytes, &info.tx_pks, * &info.tx_errs, &info.tx_drops, &info.tx_fifo, * &info.tx_colls, &info.tx_carr, &info.tx_com); */ sscanf(line + ifl + 1, "%*ld %ld %ld %ld %*ld %*ld %*ld %*ld %*ld %ld %ld %ld %*ld %ld %*ld %*ld", &info.rx_pks, &info.rx_errs, &info.rx_drops, &info.tx_pks, &info.tx_errs, &info.tx_drops, &info.tx_colls); } } fclose(fp); } websWrite(wp, "SWRXgoodPacket=%ld;", info.rx_pks); websWrite(wp, "SWRXerrorPacket=%ld;", info.rx_errs + info.rx_drops); websWrite(wp, "SWTXgoodPacket=%ld;", info.tx_pks); websWrite(wp, "SWTXerrorPacket=%ld;", info.tx_errs + info.tx_drops + info.tx_colls); return; } /* * END Added by Botho 10.May.06 */ void ej_statfs(webs_t wp, int argc, char_t ** argv) { struct statfs sizefs; if (argc != 2) return; if ((statfs(argv[0], &sizefs) != 0) || (sizefs.f_type == 0x73717368)) memset(&sizefs, 0, sizeof(sizefs)); websWrite(wp, "var %s = {\n\ used: %llu,\n\ size: %llu\n\ };\n", argv[1], ((uint64_t) sizefs.f_bsize * (sizefs.f_blocks - sizefs.f_bfree)), ((uint64_t) sizefs.f_bsize * sizefs.f_blocks)); } void ej_statnv(webs_t wp, int argc, char_t ** argv) { int space = 0; int used = nvram_used(&space); websWrite(wp, "%.2f KB / %d KB", (float)used / 1024, space / 1024); } #ifdef HAVE_RSTATS /* * * rstats Copyright (C) 2006 Jonathan Zarate * * Licensed under GNU GPL v2 or later. * */ void ej_bandwidth(webs_t wp, int argc, char_t ** argv) { char *name; int sig; char *argument; #ifdef FASTWEB ejArgs(argc, argv, "%s", &argument); #else if (ejArgs(argc, argv, "%s", &argument) < 1) { websError(wp, 400, "Insufficient args\n"); return; } #endif if (argc == 1) { if (strcmp(argument, "speed") == 0) { sig = SIGUSR1; name = "/var/spool/rstats-speed.js"; } else { sig = SIGUSR2; name = "/var/spool/rstats-history.js"; } unlink(name); killall("rstats", sig); wait_file_exists(name, 5, 0); do_file(name, wp, NULL); unlink(name); } } #endif #ifdef HAVE_PORTSETUP void ej_portsetup(webs_t wp, int argc, char_t ** argv) { char ssid[64]; char *next, *bnext; char var[64]; char eths[256]; static char bword[256]; char bufferif[512]; websWrite(wp, "

\n"); websWrite(wp, "
\n"); char *wanifname = nvram_safe_get("wan_ifname2"); if (strlen(wanifname) == 0) wanifname = nvram_safe_get("wan_ifname"); memset(eths, 0, 256); getIfLists(eths, 256); if (strlen(wanifname) > 0) { websWrite(wp, "\n"); websWrite(wp, "
\n
\n"); websWrite(wp, "
\n"); } memset(bufferif, 0, 256); getIfList(bufferif, "br"); foreach(var, eths, next) { if (!strcmp("etherip0", var)) continue; if (strchr(var,'.') == NULL) { if (!strcmp(get_wan_face(), var)) continue; if (!strcmp(nvram_safe_get("lan_ifname"), var)) continue; foreach(bword, bufferif, bnext) { if(!strcmp( bword, var) ) { goto skip; } } } char layer[64]; strcpy(layer, var); rep(layer, '.', 'X'); sprintf(ssid, "%s_bridged", var); // nvram_nset("0", "%s_bridged", var); websWrite(wp, "
\n
%s
\n", var); websWrite(wp, " \n", layer, var, nvram_default_match(ssid, "0", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", layer, var, nvram_default_match(ssid, "1", "1") ? "checked=\"checked\"" : ""); websWrite(wp, "
\n"); websWrite(wp, "
\n", layer); websWrite(wp, "
\n"); websWrite(wp, "
%s
\n", live_translate("idx.mtu")); char mtu[32]; sprintf(mtu, "%s_mtu", var); websWrite(wp, "\n", var, nvram_default_get(mtu, "1500")); websWrite(wp, "
\n"); char mcast[32]; sprintf(mcast, "%s_multicast", var); nvram_default_get(mcast, "0"); showRadio(wp, "wl_basic.multicast", mcast); if (has_gateway()) { sprintf(mcast, "%s_nat", var); nvram_default_get(mcast, "1"); showRadio(wp, "wl_basic.masquerade", mcast); } show_ipnetmask(wp, var); #if defined(HAVE_BKM) || defined(HAVE_TMK) #ifdef HAVE_REGISTER if (registered_has_cap(21)) #endif { char nld_enable[32], nld_bridge[32], bufferif[256]; static char word[256]; char *next; sprintf(nld_enable, "nld_%s_enable", var); websWrite(wp, "
\n
ZCM enable
\n"); websWrite(wp, "
\n", var, nvram_match(nld_enable, "1") ? "checked=\"checked\"" : ""); sprintf(nld_bridge, "nld_%s_bridge", var); nvram_default_get(nld_bridge,"br0"); websWrite(wp, "
\n
ZCM Bridge
\n"); websWrite(wp, "\n
\n"); } #endif #if defined(HAVE_BATMANADV) #ifdef HAVE_REGISTER if (registered_has_cap(19)) #endif { char bat_enable[32], bat_bridge[32], bufferif[256]; static char word[256]; char *next; sprintf(bat_enable, "bat_%s_enable", var); websWrite(wp, "
\n
L2Mesh enable
\n"); websWrite(wp, "
\n", var, nvram_match(bat_enable, "1") ? "checked=\"checked\"" : ""); sprintf(bat_bridge, "bat_%s_bridge", var); nvram_default_get(bat_bridge,"br0"); websWrite(wp, "
\n
L2Mesh Bridge
\n"); websWrite(wp, "\n
\n"); } #endif websWrite(wp, "
\n
\n"); websWrite(wp, "\n"); skip:; } websWrite(wp, "

\n"); } #endif static void show_macfilter_if(webs_t wp, char *ifname) { websWrite(wp, "
\n"); websWrite(wp, "%s - %s\n", IFMAP(ifname), live_translate("wl_mac.legend")); websWrite(wp, "
\n"); websWrite(wp, "
%s
\n", live_translate("wl_mac.label")); char macmode[32]; sprintf(macmode, "%s_macmode1", ifname); rep(macmode, '.', 'X'); if (nvram_get(macmode) == NULL) nvram_set(macmode, "disabled"); char id[32]; sprintf(id, "idmac%s", ifname); rep(id, '.', 'X'); char mycopy[256]; strcpy(mycopy, live_translate("share.enable")); websWrite(wp, "%s \n", macmode, nvram_match(macmode, "other") ? "checked=\"checked\"" : "", id, mycopy); strcpy(mycopy, live_translate("share.disable")); websWrite(wp, "%s\n", macmode, nvram_match(macmode, "disabled") ? "checked=\"checked\"" : "", id, mycopy); websWrite(wp, "
\n"); websWrite(wp, "
\n", id); websWrite(wp, "
%s
 
\n", live_translate("wl_mac.label2")); sprintf(macmode, "%s_macmode", ifname); if (nvram_get(macmode) == NULL) nvram_set(macmode, "disabled"); strcpy(mycopy, live_translate("wl_mac.deny")); websWrite(wp, "%s \n", macmode, nvram_invmatch(macmode, "allow") ? "checked=\"checked\"" : "", mycopy); websWrite(wp, "
\n"); strcpy(mycopy, live_translate("wl_mac.allow")); websWrite(wp, "%s\n", macmode, nvram_match(macmode, "allow") ? "checked=\"checked\"" : "", mycopy); websWrite(wp, "

\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); websWrite(wp, "

\n"); } void ej_list_mac_layers(webs_t wp, int argc, char_t ** argv) { #ifndef HAVE_MADWIFI int c = get_wl_instances(); char devs[32]; int i; for (i = 0; i < c; i++) { char macmode[32]; char id[32]; sprintf(devs, "wl%d", i); sprintf(macmode, "%s_macmode1", devs); sprintf(id, "idmac%s", devs); rep(id, '.', 'X'); rep(macmode, '.', 'X'); websWrite(wp, "show_layer_ext(document.wireless.%s, '%s', \"%s\" == \"other\");\n", macmode, id, nvram_match(macmode, "other") ? "other" : "disabled"); } #else int c = getdevicecount(); char devs[32]; int i; for (i = 0; i < c; i++) { char macmode[32]; char id[32]; sprintf(devs, "ath%d", i); sprintf(macmode, "%s_macmode1", devs); sprintf(id, "idmac%s", devs); rep(id, '.', 'X'); rep(macmode, '.', 'X'); websWrite(wp, "show_layer_ext(document.wireless.%s, '%s', \"%s\" == \"other\");\n", macmode, id, nvram_match(macmode, "other") ? "other" : "disabled"); // show_macfilter_if (wp, devs); char vif[32]; sprintf(vif, "%s_vifs", devs); char var[80], *next; char *vifs = nvram_safe_get(vif); if (vifs != NULL) foreach(var, vifs, next) { sprintf(macmode, "%s_macmode1", var); sprintf(id, "idmac%s", var); rep(id, '.', 'X'); rep(macmode, '.', 'X'); websWrite(wp, "show_layer_ext(document.wireless.%s, '%s', \"%s\" == \"other\");\n", macmode, id, nvram_match(macmode, "other") ? "other" : "disabled"); } } #endif } void ej_show_macfilter(webs_t wp, int argc, char_t ** argv) { #ifndef HAVE_MADWIFI int c = get_wl_instances(); char devs[32]; int i; for (i = 0; i < c; i++) { sprintf(devs, "wl%d", i); show_macfilter_if(wp, devs); } #else int c = getdevicecount(); char devs[32]; int i; for (i = 0; i < c; i++) { sprintf(devs, "ath%d", i); show_macfilter_if(wp, devs); char vif[32]; sprintf(vif, "%s_vifs", devs); char var[80], *next; char *vifs = nvram_safe_get(vif); if (vifs != NULL) foreach(var, vifs, next) { show_macfilter_if(wp, var); } } #endif } void ej_show_congestion(webs_t wp, int argc, char_t ** argv) { char *next; char var[80]; char eths[256]; FILE *fp = fopen("/proc/sys/net/ipv4/tcp_available_congestion_control", "rb"); if (fp == NULL) { strcpy(eths, "vegas westwood bic"); } else { int c = 0; while (1 && c < 255) { int v = getc(fp); if (v == EOF || v == 0xa) break; eths[c++] = v; } eths[c++] = 0; fclose(fp); } websWrite(wp, "
\n"); websWrite(wp, "
\n"); websWrite(wp, "\n"); websWrite(wp, "
\n"); } void ej_show_ifselect(webs_t wp, int argc, char_t ** argv) { if (argc < 1) return; char *ifname = argv[0]; websWrite(wp, "\n"); } #ifdef HAVE_RFLOW void ej_show_rflowif(webs_t wp, int argc, char_t ** argv) { websWrite(wp, "\n", nvram_safe_get("lan_ifname"), nvram_match("rflow_if", nvram_safe_get ("lan_ifname")) ? "selected=\"selected\"" : ""); char *lanifs = nvram_safe_get("lan_ifnames"); char *next; char var[80]; foreach(var, lanifs, next) { if (nvram_match("wan_ifname", var)) continue; if (!ifexists(var)) continue; websWrite(wp, "\n", var, nvram_match("rflow_if", var) ? "selected=\"selected\"" : "", var); } #if !defined(HAVE_MADWIFI) && !defined(HAVE_RT2880) int cnt = get_wl_instances(); int c; for (c = 0; c < cnt; c++) { sprintf(var, "wl%d_ifname", c); websWrite(wp, "\n", nvram_safe_get(var), nvram_match("rflow_if", nvram_safe_get(var)) ? "selected=\"selected\"" : "", c); } #endif char *wanif = nvram_safe_get("wan_ifname"); if (strlen(wanif) != 0) { websWrite(wp, "\n", wanif, nvram_match("rflow_if", wanif) ? "selected=\"selected\"" : ""); } } #endif #ifdef CONFIG_STATUS_GPIO void ej_show_status_gpio_output(webs_t wp, int argc, char_t ** argv) { char *var, *next; char nvgpio[32]; char *value = websGetVar(wp, "action", ""); char *gpios = nvram_safe_get("gpio_outputs"); var = (char *)malloc(strlen(gpios) + 1); if (var != NULL) { if (gpios != NULL) { foreach(var, gpios, next) { sprintf(nvgpio, "gpio%s", var); nvgpio = nvram_nget("gpio_%s", var); if (!nvgpio) nvram_set(nvgpio, "0"); websWrite(wp, "\n", nvgpio, nvram_match(nvgpio, "1") ? "checked=\"checked\"" : ""); websWrite(wp, "\n", nvgpio, nvram_match(nvgpio, "0") ? "checked=\"checked\"" : ""); } } free(var); } } #endif