Changeset 2956


Ignore:
Timestamp:
2006-01-13T19:49:15+01:00 (12 years ago)
Author:
nbd
Message:

improve wds watchdog (close #164)

Location:
branches/whiterussian/openwrt/package/wificonf
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/whiterussian/openwrt/package/wificonf/Makefile

    r2022 r2956  
    44 
    55PKG_NAME:=wificonf 
    6 PKG_RELEASE:=5 
     6PKG_RELEASE:=6 
    77 
    88PKG_BUILD_DIR:=$(BUILD_DIR)/wificonf 
  • branches/whiterussian/openwrt/package/wificonf/wificonf.c

    r2895 r2956  
    2323#include <signal.h> 
    2424 
     25#define WD_INTERVAL 5 
     26#define WD_AUTH_IDLE 20 
     27#define WD_WDS_WAIT 120 
     28#define WD_WDS_IDLE 120 
     29#define WD_CLIENT_IDLE 20 
     30 
    2531/*------------------------------------------------------------------*/ 
    2632/* 
     
    253259{ 
    254260        FILE *f; 
    255         unsigned char buf[8192], buf2[8192], wbuf[80], *v, *p, *next, *tmp; 
     261        unsigned char buf[8192], wdslist[8192], wbuf[80], *v, *p, *next, *tmp; 
    256262        int wds = 0, i, j, restart_wds; 
    257263        wlc_ssid_t ssid; 
     
    260266                return; 
    261267 
    262         system("kill $(cat /var/run/wifi.pid) 2>&- >&-"); 
    263268        f = fopen("/var/run/wifi.pid", "w"); 
    264269        fprintf(f, "%d\n", getpid()); 
     
    266271         
    267272        v = nvram_safe_get(wl_var("wds")); 
    268         memset(buf2, 0, 8192); 
    269         p = buf2; 
     273        memset(wdslist, 0, 8192); 
     274        p = wdslist; 
    270275        foreach(wbuf, v, next) { 
    271276                if (ether_atoe(wbuf, p)) { 
     
    279284         
    280285        for (;;) { 
    281                 sleep(5); 
     286                sleep(WD_INTERVAL); 
    282287 
    283288                /* client mode */ 
     
    300305                                if ((sta->flags & 0x18) != 0x18)  
    301306                                        i = 1; 
    302                                 if (sta->idle > 20) 
     307                                if (sta->idle > WD_CLIENT_IDLE) 
    303308                                        i = 1; 
    304309                        } 
     
    310315                 
    311316                /* wds */ 
    312                 p = buf2; 
     317                p = wdslist; 
    313318                restart_wds = 0; 
    314                 for (i = 0; i < wds; i++) { 
     319                for (i = 0; (i < wds) && !restart_wds; i++, p += 6) { 
    315320                        memset(buf, 0, 8192); 
    316321                        strcpy(buf, "sta_info"); 
    317322                        memcpy(buf + strlen(buf) + 1, p, 6); 
    318                         if (bcom_ioctl(skfd, ifname, WLC_GET_VAR, buf, 8192) < 0) { 
    319                         } else { 
     323                        if (!(bcom_ioctl(skfd, ifname, WLC_GET_VAR, buf, 8192) < 0)) { 
    320324                                sta_info_t *sta = (sta_info_t *) (buf + 4); 
    321                                 if (!(sta->flags & 0x40)) { 
    322                                 } else { 
    323                                         if (sta->idle > 120) 
     325                                if ((sta->flags & 0x40) == 0x40) /* this is a wds link */ {  
     326                                        if (sta->idle > WD_WDS_IDLE) 
     327                                                restart_wds = 1; 
     328 
     329                                        /* if not authorized after WD_AUTH_IDLE seconds idletime */ 
     330                                        if (((sta->flags & WL_STA_AUTHO) != WL_STA_AUTHO) && (sta->idle > WD_AUTH_IDLE)) 
    324331                                                restart_wds = 1; 
    325332                                } 
    326333                        } 
    327                         p += 6; 
    328                 } 
    329                 if (restart_wds) 
     334                } 
     335                if (restart_wds) { 
    330336                        setup_bcom_wds(skfd, ifname); 
     337                        sleep(WD_WDS_WAIT); 
     338                } 
    331339        } 
    332340} 
     
    674682        } 
    675683 
     684        system("kill $(cat /var/run/wifi.pid) 2>&- >&-"); 
     685 
    676686        prefix = strdup("wl0_"); 
    677687        iw_enum_devices(skfd, &setup_interfaces, NULL, 0); 
Note: See TracChangeset for help on using the changeset viewer.