diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/include/ap.h WAP54Gv3_3_04_02_GPL/release/src/include/ap.h --- WAP54Gv3_3_04_02_GPL.orig/release/src/include/ap.h 2005-09-20 21:18:08.000000000 -0700 +++ WAP54Gv3_3_04_02_GPL/release/src/include/ap.h 2007-10-28 14:09:43.000000000 -0700 @@ -126,6 +126,8 @@ extern void start_antenna_selection(void) ; #endif /* SetAntDiv */ +extern void start_txpwr(void) ; + #ifdef B_3_21_7_0 extern int make_nvram_list(void) ; #endif /* B_3_21_7_0 */ diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/include/ap_ver.h WAP54Gv3_3_04_02_GPL/release/src/include/ap_ver.h --- WAP54Gv3_3_04_02_GPL.orig/release/src/include/ap_ver.h 2005-11-20 23:20:35.000000000 -0800 +++ WAP54Gv3_3_04_02_GPL/release/src/include/ap_ver.h 2007-10-28 14:09:43.000000000 -0700 @@ -18,7 +18,7 @@ #if defined(LinksysWAP54G4712) #define DetectDownGrade char *FirmwareVersion = "v3.04, Oct 31, 2005"; -char *SubFirmwareVersion = "3.04" ; +char *SubFirmwareVersion = "3.04 - HyperWAP v1.0 - fifi.1" ; char *MyFirmwareVersion = "v3.04.02(USA), Oct 31, 2005"; #elif defined(LinksysWAP54GEU) diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/None_GPL/tiny-snmp/Makefile WAP54Gv3_3_04_02_GPL/release/src/router/None_GPL/tiny-snmp/Makefile --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/None_GPL/tiny-snmp/Makefile 2005-05-23 01:55:29.000000000 -0700 +++ WAP54Gv3_3_04_02_GPL/release/src/router/None_GPL/tiny-snmp/Makefile 2007-10-28 14:09:43.000000000 -0700 @@ -1,4 +1,4 @@ -STRIP=/opt/brcm/hndtools-mipsel-linux-3.0/bin/mipsel-linux-strip +STRIP=/opt/brcm/hndtools-mipsel-linux-3.2.3/bin/mipsel-linux-strip USELIBS=libnetsnmpagent.a libnetsnmpmibs.a diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/busybox/syslogd.c WAP54Gv3_3_04_02_GPL/release/src/router/busybox/syslogd.c --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/busybox/syslogd.c 2005-05-19 19:43:22.000000000 -0700 +++ WAP54Gv3_3_04_02_GPL/release/src/router/busybox/syslogd.c 2007-10-28 14:10:21.000000000 -0700 @@ -469,10 +469,19 @@ Since we are using UDP sockets, connect just sets the default host and port for future operations */ + while (1) { if ( 0 != (connect(remotefd, (struct sockaddr *) &remoteaddr, len))){ + switch(errno) { + case ENETUNREACH: + case EHOSTUNREACH: + sleep(1); + continue; + default: error_msg_and_die("syslogd: cannot connect to remote host %s:%d", RemoteHost, RemotePort); } - + } + break; + } } #endif diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/rc/ap.c WAP54Gv3_3_04_02_GPL/release/src/router/rc/ap.c --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/rc/ap.c 2005-09-20 21:13:41.000000000 -0700 +++ WAP54Gv3_3_04_02_GPL/release/src/router/rc/ap.c 2007-10-28 14:09:51.000000000 -0700 @@ -69,7 +69,6 @@ #if defined(LinksysWAP55AG) || defined(LinksysWAP55AG4712) struct stat assoclist_5G ; #endif -struct stat assoclist ; /* start for declaration function */ #ifdef AP_Client @@ -109,7 +108,7 @@ #endif /* end of SETDEFVALS */ { "EnableLAN", "on" }, #ifdef SetAntDiv - { "antenna_selection", "default" }, +// { "antenna_selection", "default" }, #endif #if defined(LinksysWAP55AG) || defined(LinksysWAP55AG4712) { "wl_country_domain_5G", "0" }, @@ -126,7 +125,7 @@ { "chk_fw_hdr", "Enabled" }, #endif /* DetectModleNumber */ #if defined(DetectDownGrade) - { "chk_downgrade_hdr","Enabled" }, + { "chk_downgrade_hdr","Disabled" }, #endif /* DetectDownGrade */ #if defined(FCCTesting) { "pwr", "32" }, @@ -149,6 +148,12 @@ { "ap_client_wep_key", "" }, { "ap_client_wep_mode", "open" }, { "ap_repeater_mode", "stop" }, + + { "boot_wait", "on" }, + { "txpwr", "42" }, + { "wl_txant", "3" }, + { "wl_antdiv", "3" }, + #endif { 0, 0 }, }; @@ -265,6 +270,8 @@ make_killall_daemons_script("/tmp/killall_daemons"); + start_txpwr() ; + #ifdef AP_Client start_ap_client() ; #endif @@ -418,64 +425,8 @@ } int ap_syslogd(char* msg) { - char *remote_ipaddr = NULL ; - char *log_ipaddr_4 = NULL ; - char log_ipaddr[16] ; - int sockfd ; - struct sockaddr_in serv_addr, cli_addr ; - int n ; - - /* get log_ipaddr */ - remote_ipaddr = nvram_safe_get( "log_ipaddr" ); - log_ipaddr_4 = nvram_safe_get( "log_ipaddr_4" ); - - if( remote_ipaddr != NULL && - strcmp(remote_ipaddr, "0.0.0.0") && - log_ipaddr_4 != NULL ) - { - memset( log_ipaddr, '\0', sizeof(log_ipaddr) ); - sprintf( log_ipaddr, "%s.%s.%s.%s", - nvram_safe_get( "wan_ipaddr_1" ), nvram_safe_get( "wan_ipaddr_2" ), - nvram_safe_get( "wan_ipaddr_3" ), nvram_safe_get( "log_ipaddr_4" ) ); - - /* save log */ - set_log_info( msg ); - - bzero( (char *)&serv_addr, sizeof(serv_addr) ) ; - serv_addr.sin_family = AF_INET ; - serv_addr.sin_addr.s_addr = inet_addr(log_ipaddr) ; - serv_addr.sin_port = htons(SERV_UDP_PORT) ; - - /* open a UDP socket */ - if( (sockfd = socket( AF_INET, SOCK_DGRAM, 0 )) < 0 ) - { - perror( "open a UDP socket fail " ); - return -1 ; - } - - /* bind any local address for us */ - bzero( (char *)&cli_addr, sizeof(cli_addr) ) ; - cli_addr.sin_family = AF_INET ; - cli_addr.sin_addr.s_addr = htonl(INADDR_ANY) ; - cli_addr.sin_port = htons(0) ; - - if( bind( sockfd, (struct sockaddr *)&cli_addr, sizeof(cli_addr)) < 0 ) - { - perror( "client: can't bind local address " ); - return -1 ; - } - - n = strlen(msg) ; - - if( sendto(sockfd, msg, n, 0, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) != n ) - { - perror( "sendto error " ); - return -1 ; - } - - close(sockfd) ; - } - + set_log_info(msg); + syslog(LOG_INFO|LOG_SYSLOG, "%s", msg); return 0; } #if 0 @@ -556,7 +507,6 @@ /* get size of /tmp/assoclist */ stat( ASSOCLIST, &assoclist ); #endif - assoclist.st_size = 0 ; ASSOCDBG(fprintf( stderr, "assoclist.st_size=<%d>\n", assoclist.st_size );) #endif @@ -574,19 +524,26 @@ #endif } } + void WirelessAssocList() { + typedef struct { unsigned char mac[6]; } mac_t; + typedef struct { mac_t mac; unsigned char found; } macrec_t; + static macrec_t *macrecArray; + static size_t macrecCount; + static size_t macrecSize; + macrec_t macrec; + macrec_t* found; + macrec_t* from; + macrec_t* to; + macrec_t* end; FILE *fp = NULL ; - char *buf ; - struct stat my_assoclist ; - int assoclist_cnt = 0; - int my_assoclist_cnt = 0; - int cnt = 0; - int diff = 0 ; - int i = 0; - char val1[10], val2[18] ; - char msg[50]; + char buf[80]; + char msg[80]; + char *ptr; + char *macstr; char *boardtype = NULL ; + unsigned i; boardtype = nvram_safe_get("boardtype"); @@ -596,66 +553,123 @@ else system("/usr/sbin/wl -i eth2 assoclist >/tmp/assoclist" ); - /* get size of /tmp/assoclist */ - stat( ASSOCLIST, &my_assoclist ); - - ASSOCDBG(fprintf( stderr, "assoclist.st_size=<%d> ", assoclist.st_size );) - ASSOCDBG(fprintf( stderr, "my_assoclist.st_size=<%d>\n", my_assoclist.st_size );) - - if( my_assoclist.st_size > assoclist.st_size ) - { - assoclist_cnt = (assoclist.st_size)/28 ; - my_assoclist_cnt = (my_assoclist.st_size)/28 ; - - ASSOCDBG(fprintf( stderr, "assoclist.st_size=<%d> ", assoclist.st_size );) - ASSOCDBG(fprintf( stderr, "my_assoclist.st_size=<%d>\n", my_assoclist.st_size );) - ASSOCDBG(fprintf( stderr, "assoclist_cnt=<%d> ", assoclist_cnt );) - ASSOCDBG(fprintf( stderr, "my_assoclist_cnt=<%d>\n", my_assoclist_cnt );) - - /* Allocate buf */ - buf = (char *)malloc(1024) ; + macrec.found = 0; /* open /tmp/assoclist */ fp = fopen( ASSOCLIST, "r" ) ; - if( fp == NULL ) - { - DanielDBG(fprintf( stderr, "open /tmp/assoclist error \n" );) + if( fp == NULL ) { + ap_syslogd("cannot open " ASSOCLIST); + return; } - diff = my_assoclist_cnt-assoclist_cnt ; + while( !feof(fp) ) { + if (!fgets( buf, sizeof(buf), fp )) + break; + ptr = buf; + while(*ptr && isspace(*ptr)) ++ptr; + while(*ptr && !isspace(*ptr)) ++ptr; + while(*ptr && isspace(*ptr)) ++ptr; + macstr = ptr; + if (strlen(ptr) != 18) { + ap_syslogd("unexpected string length"); + fclose(fp); + return; + } - while( !feof(fp) ) - { - if( (cnt <= assoclist_cnt)&& - (assoclist_cnt != 0) ) - { - fgets( buf, 1024, fp ); + for (i=0; i < 6; ++i) { + switch(ptr[0]) { + case '0'...'9': + macrec.mac.mac[i]=(ptr[0]-'0') << 4; + break; + case 'A'...'F': + macrec.mac.mac[i]=(ptr[0]-'A'+10) << 4; + break; + case 'a'...'f': + macrec.mac.mac[i]=(ptr[0]-'a'+10) << 4; + break; + } + switch(ptr[1]) { + case '0'...'9': + macrec.mac.mac[i]|=(ptr[1]-'0'); + break; + case 'A'...'F': + macrec.mac.mac[i]|=(ptr[1]-'A'+10); + break; + case 'a'...'f': + macrec.mac.mac[i]|=(ptr[1]-'a'+10); + break; + } + ptr+=3; + } + ptr[-1] = 0; + + found = NULL; + for (from = macrecArray, end = macrecArray+macrecCount; + from < end; + ++from) { + if (memcmp(from, ¯ec, sizeof(macrec)) == 0) { + found = from; + break; + } + } + if (found) { + found->found = 1; + } else { + sprintf(msg, "Associated with %s", macstr); + ap_syslogd(msg); + if (macrecCount == macrecSize) { + size_t newSize; + macrec_t *newArray; + if (macrecSize == 0) + newSize = 1; + else + newSize = macrecSize*2; + newArray = realloc(macrecArray, + newSize*sizeof(macrec_t)); + if (!newArray) { + ap_syslogd("cannot resize MAC array"); + fclose(fp); + return; } - else - { - fgets( buf, 1024, fp ); - if( i < diff ) - { - sscanf( buf, "%s %s", val1, val2 ); - memset( msg, '\0', sizeof(msg) ); - sprintf( msg, "Wireless PC connected %s", val2 ); - ap_syslogd( msg ); - i++ ; + + macrecSize = newSize; + macrecArray = newArray; } + macrecArray[macrecCount] = macrec; + macrecArray[macrecCount].found = 1; + macrecCount++; } - - cnt++ ; } /* close fp */ fclose(fp); - /* free buf */ - free(buf); - - assoclist.st_size = my_assoclist.st_size ; + from = macrecArray; + to = macrecArray; + end = macrecArray+macrecCount; + while ( from < end ) { + if (!from->found) { + sprintf(msg, "Deassociated with " + "%02X:%02X:%02X:%02X:%02X:%02X", + from->mac.mac[0], + from->mac.mac[1], + from->mac.mac[2], + from->mac.mac[3], + from->mac.mac[4], + from->mac.mac[5]); + ap_syslogd(msg); + ++from; + --macrecCount; + continue; + } else if (from != to) { + *to = *from; + } + to->found = 0; + ++from; + ++to; } } + #if defined(LinksysWAP55AG) || defined(LinksysWAP55AG4712) int WirelessAssocList_5G() { @@ -1681,8 +1695,10 @@ } #endif #ifdef SetAntDiv + void start_antenna_selection(void) { +#if 0 int val ; char *value = NULL ; #ifdef BCM4712APBOARD @@ -1725,9 +1741,27 @@ WL_IOCTL(name, WLC_SET_ANTDIV, &val, sizeof(val)) ; WL_IOCTL(name, WLC_SET_TXANT, &val, sizeof(val)) ; } +#endif /* 0 */ } #endif +void start_txpwr(void) +{ + char buf [64]; + memset (buf, '\0', sizeof(buf)); + sprintf (buf, "/usr/sbin/wl txpwr %s", nvram_safe_get ("txpwr")); + system (buf); + + memset (buf, '\0', sizeof(buf)); + sprintf (buf, "/usr/sbin/wl txant %s", nvram_safe_get ("wl_txant")); + system (buf); + + memset (buf, '\0', sizeof(buf)); + sprintf (buf, "/usr/sbin/wl antdiv %s", nvram_safe_get ("wl_antdiv")); + system (buf); + +} + #ifdef B_3_21_7_0 int make_nvram_list(void) { /* format: nvram_XXX */ @@ -3067,4 +3101,3 @@ } #endif // - - - Vic Yu added - diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/shared/broadcom.c WAP54Gv3_3_04_02_GPL/release/src/router/shared/broadcom.c --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/shared/broadcom.c 2005-09-21 04:21:11.000000000 -0700 +++ WAP54Gv3_3_04_02_GPL/release/src/router/shared/broadcom.c 2007-10-28 14:09:43.000000000 -0700 @@ -1180,8 +1180,10 @@ { "chk_fw_hdr", "", NULL, NULL, TRUE }, #endif /* DetectModleNumber */ #ifdef SetAntDiv - { "antenna_selection", "", NULL, NULL, TRUE }, +// { "antenna_selection", "", NULL, NULL, TRUE }, #endif + { "wl_txant", "", NULL, NULL, TRUE }, + { "wl_antdiv", "", NULL, NULL, TRUE }, { "security_mode_page", "", NULL, NULL, TRUE }, { "sitesurvay", "", NULL, NULL, TRUE }, #ifdef WiFi @@ -1332,6 +1334,7 @@ { "wan_gateway_3", "", validate_range, ARGV("0", "255"), FALSE }, { "wan_gateway_4", "", validate_range, ARGV("0", "255"), FALSE }, { "wl_macmode", "", validate_choice, ARGV("disabled", "allow", "deny"), FALSE }, + { "txpwr", "", validate_range, ARGV("0", "84"), FALSE }, { "wl_rate", "Rate", validate_range, ARGV("0", "54000000"), FALSE, 0 }, { "wl_rateset", "Supported Rates", validate_choice, ARGV("all", "default", "12"), FALSE}, { "wl_mrate", "Multicast Rate", validate_range, ARGV("0", "54000000"), FALSE}, diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/shared/defaults.c WAP54Gv3_3_04_02_GPL/release/src/router/shared/defaults.c --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/shared/defaults.c 2005-09-20 21:16:22.000000000 -0700 +++ WAP54Gv3_3_04_02_GPL/release/src/router/shared/defaults.c 2007-10-28 14:09:43.000000000 -0700 @@ -242,8 +242,8 @@ { "restore_defaults", "0", 0 }, /* Set to 0 to not restore defaults on boot */ // +++ Vic Yu added - { "chk_downgrade_hdr", "Enabled", 0 }, // check downgrade header parameter , Enabled/Disabled - { "antenna_selection", "default", 0 }, // for Antenna selection + { "chk_downgrade_hdr", "Disabled", 0 }, // check downgrade header parameter , Enabled/Disabled +// { "antenna_selection", "default", 0 }, // for Antenna selection { "security_mode_page", "4", 0 }, // security page display , 0:WPA-PSK ,1:Radius-WPA ,2: Radius-WEP ,4: WEP //{ "d11g_rts_cts", "off", 0 }, // 0(off): RTS/CTS disabled ; -1(auto): RTS/CTS enabled { "EnableLAN", "on", 0 }, // ????? @@ -295,7 +295,7 @@ // Check firmware downgrade bit flag { "chk_downgrade_hdr", "Enabled", 0 }, // Enabled, Disabled #endif /* DetectDownGrade */ - { "boot_wait", "off", 0 }, + // GPIO parameter { "wl0gpio0", "0", 0 }, { "wl0gpio1", "0", 0 }, @@ -303,6 +303,10 @@ { "wl0gpio3", "0", 0 }, { "wl0gpio4", "0", 0 }, { "wl0gpio5", "2", 0 }, + { "boot_wait", "on", 0 }, + { "txpwr", "42", 0 }, + { "wl_txant", "3", 0}, + { "wl_antdiv", "3", 0}, // SES { "ses_fsm_current_states","01:01",0}, { "SES_SETUP_FLAG", "0",0 }, diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/AdvancedWSettings.asp WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/AdvancedWSettings.asp --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/AdvancedWSettings.asp 2005-11-20 23:13:34.000000000 -0800 +++ WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/AdvancedWSettings.asp 2007-10-28 14:09:43.000000000 -0700 @@ -23,6 +23,7 @@ f.wl_rts.value = "<% nvram_get("wl_rts"); %>" ; f.wl_frag.value = "<% nvram_get("wl_frag"); %>" ; f.wl_dtim.value = "<% nvram_get("wl_dtim"); %>" ; + f.txpwr.value = "<% nvram_get("txpwr"); %>" ; /* Transmission Rates */ var rateArray = new Array( "0", "1000000", "2000000", "5500000", "6000000", "9000000", "11000000", "12000000", "18000000", "24000000", "36000000", "48000000", "54000000" ); @@ -76,14 +77,27 @@ } /* Antenna Selection */ - var antenna = "<% nvram_get("antenna_selection"); %>" ; + var wl_txant = "<% nvram_get("wl_txant"); %>" ; - if( antenna == "left" ) - f.antenna_selection.options[1].selected = true ; - else if( antenna == "right" ) - f.antenna_selection.options[2].selected = true ; + if( wl_txant == "0" ) + f.wl_txant.options[0].selected = true ; + else if( wl_txant == "3" ) + f.wl_txant.options[1].selected = true ; + else if( wl_txant == "1" ) + f.wl_txant.options[2].selected = true ; else - f.antenna_selection.options[0].selected = true ; + f.wl_txant.options[1].selected = true ; + + var wl_antdiv = "<% nvram_get("wl_antdiv"); %>" ; + + if( wl_antdiv == "0" ) + f.wl_antdiv.options[0].selected = true ; + else if( wl_antdiv == "3" ) + f.wl_antdiv.options[1].selected = true ; + else if( wl_antdiv == "1" ) + f.wl_antdiv.options[2].selected = true ; + else + f.wl_antdiv.options[1].selected = true ; /* frameburst */ var frameburst = "<% nvram_get("wl_frameburst"); %>" ; @@ -302,14 +316,28 @@ - Antenna Selection: - + + + + + RX Antenna: + + + + + Transmit power: + + (Default: 42, Milliseconds, Range: 0~84 ) + Beacon Interval: diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/advance.js WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/advance.js --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/advance.js 2005-11-20 23:13:34.000000000 -0800 +++ WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/advance.js 2007-10-28 14:09:43.000000000 -0700 @@ -14,6 +14,7 @@ var rts = parseInt(f.wl_rts.value, 10) ; var frag = parseInt(f.wl_frag.value, 10); var dtim = parseInt(f.wl_dtim.value, 10); + var txpwr = parseInt(f.txpwr.value, 10); if( f.wl_bcn.value == "" ) { @@ -63,6 +64,14 @@ return false; } + if( !(txpwr >= 0 && txpwr <= 84) ) + { + alert("Invalid Transmit Power (must be between 0 and 84)"); + return false; + } + + + /* Authentication Type */ //CheckAUTH(f) ; diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/passwd.asp WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/passwd.asp --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/passwd.asp 2005-11-20 23:13:34.000000000 -0800 +++ WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/passwd.asp 2007-10-28 14:09:43.000000000 -0700 @@ -41,8 +41,8 @@ border=0>

    Firmware Version: - 2.06 + style="FONT-SIZE: 7pt">    Firmware Version: <% SubAPFirmwareVersion(); %> + diff -rub WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/setup.asp WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/setup.asp --- WAP54Gv3_3_04_02_GPL.orig/release/src/router/www/LinksysWAP54G-Cisco-WSC/setup.asp 2005-11-20 23:13:34.000000000 -0800 +++ WAP54Gv3_3_04_02_GPL/release/src/router/www/LinksysWAP54G-Cisco-WSC/setup.asp 2007-10-28 14:09:43.000000000 -0700 @@ -59,7 +59,7 @@ /* 802.11g Channel */ var channel = "<% GTK_nvram_get("GTK_wl_channel"); %>" ; channel -= 0 ; - for( var i=1 ; i<=11 ; i++ ) + for( var i=1 ; i<=13 ; i++ ) { if( channel == i ) f.GTK_wl_channel.options[i-1].selected = true ; @@ -377,8 +377,10 @@ + +   ( - Regulatory Domain: USA ) + Regulatory Domain: Worldwide )