Changeset 3398


Ignore:
Timestamp:
2006-03-18T10:52:49+01:00 (10 years ago)
Author:
nbd
Message:

fix wds watchdog, don't use client mode watchdog in ad-hoc mode (#373), set txpwr default to pa0maxpwr, improve wl0_distance handling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/whiterussian/openwrt/package/wificonf/wificonf.c

    r3323 r3398  
    281281        FILE *f; 
    282282        unsigned char buf[8192], wdslist[8192], wbuf[80], *v, *p, *next, *tmp; 
    283         int wds = 0, ap, i, j, restart_wds, wdstimeout; 
     283        int i, j, wds = 0, c = 0, restart_wds = 0, wdstimeout = 0; 
    284284 
    285285        if (fork()) 
     
    300300        } 
    301301         
    302         /* client mode */ 
    303         bcom_ioctl(skfd, ifname, WLC_GET_AP, &ap, sizeof(i)); 
    304  
    305         if (ap && ((wdstimeout = atoi(nvram_safe_get(wl_var("wdstimeout")))) <= 0)) 
    306                 return; 
    307          
    308302        for (;;) { 
    309                 sleep(WD_INTERVAL); 
    310  
    311                 if (!ap) { 
     303                sleep(1); 
     304                 
     305                /* refresh the distance setting - the driver might change it */ 
     306                set_distance(skfd, ifname); 
     307 
     308                if (restart_wds) 
     309                        wdstimeout--; 
     310 
     311                if ((c++ < WD_INTERVAL) || ((restart_wds > 0) && (wdstimeout > 0))) 
     312                        continue; 
     313                else 
     314                        c = 0; 
     315 
     316                if (nvram_match(wl_var("mode"), "sta") || 
     317                        nvram_match(wl_var("mode"), "wet")) { 
    312318                        i = 0; 
    313319                        if (bcom_ioctl(skfd, ifname, WLC_GET_BSSID, buf, 6) < 0)  
     
    333339                                set_wext_ssid(skfd, ifname); 
    334340                } 
    335  
    336341                 
    337342                /* wds */ 
    338343                p = wdslist; 
    339344                restart_wds = 0; 
     345                if (wdstimeout == 0) 
     346                        wdstimeout = atoi(nvram_safe_get(wl_var("wdstimeout"))); 
     347                 
    340348                for (i = 0; (i < wds) && !restart_wds; i++, p += 6) { 
    341349                        memset(buf, 0, 8192); 
     
    354362                        } 
    355363                } 
    356                 if (restart_wds) { 
     364 
     365                if (restart_wds && (wdstimeout > 0)) { 
    357366                        setup_bcom_wds(skfd, ifname); 
    358                         sleep(wdstimeout); 
    359                 } 
    360  
    361                 /* refresh the distance setting - the driver might change it */ 
    362                 set_distance(skfd, ifname); 
     367                } 
    363368        } 
    364369} 
     
    384389        bcom_ioctl(skfd, ifname, WLC_SET_COUNTRY, buf, 4); 
    385390         
    386         if (v = nvram_get(wl_var("txpwr"))) { 
    387                 val = atoi(v); 
    388                 val = mw_to_qdbm(val); 
    389                 bcom_set_int(skfd, ifname, "qtxpower", val); 
    390         } 
     391        val = atoi(nvram_safe_get(wl_var("txpwr"))); 
     392        if (val <= 0) 
     393                val = atoi(nvram_safe_get(wl_var("pa0maxpwr"))); 
     394        val = mw_to_qdbm(val); 
     395        bcom_set_int(skfd, ifname, "qtxpower", val); 
    391396         
    392397        /* Set other options */ 
     
    465470                wds_enabled = setup_bcom_wds(skfd, ifname); 
    466471 
    467         if (!ap || wds_enabled)  
    468                 start_watchdog(skfd, ifname); 
     472        start_watchdog(skfd, ifname); 
    469473         
    470474        /* Set up afterburner, disabled it if WDS is enabled */ 
     
    707711        } 
    708712 
    709         system("kill $(cat /var/run/wifi.pid) 2>&- >&-"); 
     713        system("kill $(cat /var/run/wifi.pid 2>&-) 2>&- >&-"); 
    710714 
    711715        prefix = strdup("wl0_"); 
Note: See TracChangeset for help on using the changeset viewer.