Changeset 10808


Ignore:
Timestamp:
11/07/08 16:02:50 (5 years ago)
Author:
BrainSlayer
Message:

how todo wiviz on ralink

Location:
src/router
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/router/httpd/visuals/dd-wrt.c

    r10802 r10808  
    56535653#define RTPRIV_IOCTL_GET_MAC_TABLE              (SIOCIWFIRSTPRIV + 0x0F) 
    56545654 
     5655typedef struct STAINFO { 
     5656        char mac[6]; 
     5657        char rssi; 
     5658        char noise; 
     5659        char ifname[32]; 
     5660} STAINFO; 
     5661 
     5662 
    56555663int 
    56565664ej_active_wireless_if( webs_t wp, int argc, char_t ** argv, 
     
    56635671    int s, len,i; 
    56645672    struct iwreq iwr; 
     5673    int ignore=0; 
    56655674 
    56665675    if( !ifexists( ifname ) ) 
     
    56735682    if( state == 0 || state == -1 ) 
    56745683    { 
    5675         printf( "IOCTL_STA_INFO radio %s not enabled!\n", ifname ); 
    56765684        return cnt; 
    56775685    } 
     
    56795687    if( s < 0 ) 
    56805688    { 
    5681         fprintf( stderr, "socket(SOCK_DRAGM)\n" ); 
    56825689        return cnt; 
    56835690    } 
     
    56895696    if( ioctl( s, RTPRIV_IOCTL_GET_MAC_TABLE, &iwr ) < 0 ) 
    56905697    { 
    5691         fprintf( stderr, "IOCTL_STA_INFO for %s failed!\n", ifname ); 
    5692         close( s ); 
    5693         return cnt; 
    5694     } 
    5695  
    5696  
     5698        ignore=1; 
     5699    } 
     5700if (!ignore) 
    56975701for (i = 0; i < table.Num; i++) { 
    56985702        if( cnt ) 
     
    57365740        } 
    57375741    } 
    5738     close( s ); 
    5739  
     5742STAINFO *sta = getRaStaInfo("wl0"); 
     5743    if (sta) 
     5744        { 
     5745        char mac[32]; 
     5746        strcpy( mac, ieee80211_ntoa( sta->mac ) ); 
     5747            websWrite( wp, "'%s','%s','N/A','N/A','%d','%d','%d'", mac,sta->ifname, sta->rssi, sta->noise,(sta->rssi - (sta->noise)) ); 
     5748        free(sta); 
     5749         
     5750        } 
     5751     
     5752close(s); 
    57405753    return cnt; 
    57415754} 
  • src/router/libutils/wl.c

    r10785 r10808  
    3333 
    3434#ifdef HAVE_RT2880 
    35 char *getRADev(char *prefix) 
    36 { 
    37 char *ifname=NULL; 
    38         if (!strcmp(prefix,"wl0"))ifname="ra0"; 
    39         if (!strcmp(prefix,"wl0.1"))ifname="ra1"; 
    40         if (!strcmp(prefix,"wl0.2"))ifname="ra2"; 
    41         if (!strcmp(prefix,"wl0.3"))ifname="ra3"; 
    42         if (!strcmp(prefix,"wl0.4"))ifname="ra4"; 
    43         if (!strcmp(prefix,"wl0.5"))ifname="ra5"; 
    44         if (!strcmp(prefix,"wl0.6"))ifname="ra6"; 
    45         if (!strcmp(prefix,"wl0.7"))ifname="ra7"; 
    46 if (ifname) 
    47     return ifname; 
    48 else  
    49     return prefix; 
     35char *getRADev( char *prefix ) 
     36{ 
     37    char *ifname = NULL; 
     38 
     39    if( !strcmp( prefix, "wl0" ) ) 
     40        ifname = "ra0"; 
     41    if( !strcmp( prefix, "wl0.1" ) ) 
     42        ifname = "ra1"; 
     43    if( !strcmp( prefix, "wl0.2" ) ) 
     44        ifname = "ra2"; 
     45    if( !strcmp( prefix, "wl0.3" ) ) 
     46        ifname = "ra3"; 
     47    if( !strcmp( prefix, "wl0.4" ) ) 
     48        ifname = "ra4"; 
     49    if( !strcmp( prefix, "wl0.5" ) ) 
     50        ifname = "ra5"; 
     51    if( !strcmp( prefix, "wl0.6" ) ) 
     52        ifname = "ra6"; 
     53    if( !strcmp( prefix, "wl0.7" ) ) 
     54        ifname = "ra7"; 
     55    if( ifname ) 
     56        return ifname; 
     57    else 
     58        return prefix; 
    5059} 
    5160 
    5261int getchannels( unsigned int *list, char *ifname ) 
    5362{ 
    54 list[0]=1; 
    55 list[1]=2; 
    56 list[2]=3; 
    57 list[3]=4; 
    58 list[4]=5; 
    59 list[5]=6; 
    60 list[6]=7; 
    61 list[7]=8; 
    62 list[8]=9; 
    63 list[9]=10; 
    64 list[10]=11; 
    65 list[11]=12; 
    66 list[12]=13; 
     63    list[0] = 1; 
     64    list[1] = 2; 
     65    list[2] = 3; 
     66    list[3] = 4; 
     67    list[4] = 5; 
     68    list[5] = 6; 
     69    list[6] = 7; 
     70    list[7] = 8; 
     71    list[8] = 9; 
     72    list[9] = 10; 
     73    list[10] = 11; 
     74    list[11] = 12; 
     75    list[12] = 13; 
    6776#ifdef BUFFALO_JP 
    68 list[13]=14; 
    69 return 14; 
     77    list[13] = 14; 
     78    return 14; 
    7079#else 
    71 return 13; 
     80    return 13; 
    7281#endif 
    7382} 
     
    102111} 
    103112 
    104  
    105113u_int ieee80211_mhz2ieee( u_int freq ) 
    106114{ 
    107     if( freq == 2484) 
     115    if( freq == 2484 ) 
    108116        return 14; 
    109     if( freq < 2484) 
    110         return ( freq - ( 2407) ) / 5; 
     117    if( freq < 2484 ) 
     118        return ( freq - ( 2407 ) ) / 5; 
    111119    if( freq < 4990 && freq > 4940 ) 
    112120        return ( ( freq * 10 ) + ( ( ( freq % 5 ) == 2 ) ? 5 : 0 ) - 
    113121                 49400 ) / 5; 
    114122    if( freq < 5000 ) 
    115         return 15 + ( ( freq - ( 2512) ) / 20 ); 
     123        return 15 + ( ( freq - ( 2512 ) ) / 20 ); 
    116124 
    117125    return ( freq - ( 5000 ) ) / 5; 
    118126} 
    119127 
    120  
    121 unsigned int ieee80211_ieee2mhz(unsigned int chan) 
    122 { 
    123                 if (chan == 14) 
    124                         return 2484; 
    125                 if (chan < 14) 
    126                         return ((2407) + chan * 5); 
    127                 else { 
    128                         if (chan > 236 && chan < 256) { 
    129                                 //recalculate offset 
    130                                 int newchan = chan - 256; 
    131                                 int newfreq = (2407) + (newchan * 5); 
    132                                 return newfreq; 
    133                         } else 
    134                                 return ((2512) + ((chan - 15) * 20)); 
    135                 } 
     128unsigned int ieee80211_ieee2mhz( unsigned int chan ) 
     129{ 
     130    if( chan == 14 ) 
     131        return 2484; 
     132    if( chan < 14 ) 
     133        return ( ( 2407 ) + chan * 5 ); 
     134    else 
     135    { 
     136        if( chan > 236 && chan < 256 ) 
     137        { 
     138            //recalculate offset 
     139            int newchan = chan - 256; 
     140            int newfreq = ( 2407 ) + ( newchan * 5 ); 
     141 
     142            return newfreq; 
     143        } 
     144        else 
     145            return ( ( 2512 ) + ( ( chan - 15 ) * 20 ) ); 
     146    } 
    136147} 
    137148 
     
    148159 
    149160    freq = ( float )wrq.u.freq.m; 
    150     if (freq<1000.0f) 
    151         { 
    152         return (int)freq; 
    153         } 
     161    if( freq < 1000.0f ) 
     162    { 
     163        return ( int )freq; 
     164    } 
    154165    for( i = 0; i < wrq.u.freq.e; i++ ) 
    155166        freq *= 10; 
     
    172183 
    173184    freq = ( float )wrq.u.freq.m; 
    174     if (freq<1000.0f) 
    175         { 
    176         return ieee80211_ieee2mhz((unsigned int)freq); 
    177         } 
     185    if( freq < 1000.0f ) 
     186    { 
     187        return ieee80211_ieee2mhz( ( unsigned int )freq ); 
     188    } 
    178189    for( i = 0; i < wrq.u.freq.e; i++ ) 
    179190        freq *= 10; 
     
    223234    return ( i < 17 ? NULL : a ); 
    224235} 
    225 typedef union _MACHTTRANSMIT_SETTING { 
    226         struct  { 
    227                 unsigned short  MCS:7;  // MCS 
    228                 unsigned short  BW:1;   //channel bandwidth 20MHz or 40 MHz 
    229                 unsigned short  ShortGI:1; 
    230                 unsigned short  STBC:2; //SPACE 
    231                 unsigned short  rsv:3; 
    232                 unsigned short  MODE:2; // Use definition MODE_xxx. 
    233         } field; 
    234         unsigned short      word; 
     236typedef union _MACHTTRANSMIT_SETTING 
     237{ 
     238    struct 
     239    { 
     240        unsigned short MCS:7;   // MCS 
     241        unsigned short BW:1;    //channel bandwidth 20MHz or 40 MHz 
     242        unsigned short ShortGI:1; 
     243        unsigned short STBC:2;  //SPACE 
     244        unsigned short rsv:3; 
     245        unsigned short MODE:2;  // Use definition MODE_xxx. 
     246    } field; 
     247    unsigned short word; 
    235248} MACHTTRANSMIT_SETTING; 
    236249 
    237 typedef struct _RT_802_11_MAC_ENTRY { 
    238         unsigned char            Addr[6]; 
    239         unsigned char            Aid; 
    240         unsigned char            Psm;     // 0:PWR_ACTIVE, 1:PWR_SAVE 
    241         unsigned char            MimoPs;  // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled 
    242         char                     AvgRssi0; 
    243         char                     AvgRssi1; 
    244         char                     AvgRssi2; 
    245         unsigned int             ConnectedTime; 
    246         MACHTTRANSMIT_SETTING    TxRate; 
     250typedef struct _RT_802_11_MAC_ENTRY 
     251{ 
     252    unsigned char Addr[6]; 
     253    unsigned char Aid; 
     254    unsigned char Psm;          // 0:PWR_ACTIVE, 1:PWR_SAVE 
     255    unsigned char MimoPs;       // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled 
     256    char AvgRssi0; 
     257    char AvgRssi1; 
     258    char AvgRssi2; 
     259    unsigned int ConnectedTime; 
     260    MACHTTRANSMIT_SETTING TxRate; 
    247261} RT_802_11_MAC_ENTRY; 
    248262 
    249 typedef struct _RT_802_11_MAC_TABLE { 
    250         unsigned long            Num; 
    251         RT_802_11_MAC_ENTRY      Entry[32]; //MAX_LEN_OF_MAC_TABLE = 32 
     263typedef struct _RT_802_11_MAC_TABLE 
     264{ 
     265    unsigned long Num; 
     266    RT_802_11_MAC_ENTRY Entry[32];      //MAX_LEN_OF_MAC_TABLE = 32 
    252267} RT_802_11_MAC_TABLE; 
     268 
     269typedef struct STAINFO 
     270{ 
     271    char mac[6]; 
     272    char rssi; 
     273    char noise; 
     274    char ifname[32]; 
     275} STAINFO; 
     276 
     277int OidQueryInformation( unsigned long OidQueryCode, int socket_id, 
     278                         char *DeviceName, void *ptr, 
     279                         unsigned long PtrLength ) 
     280{ 
     281    struct iwreq wrq; 
     282 
     283    strcpy( wrq.ifr_name, DeviceName ); 
     284    wrq.u.data.length = PtrLength; 
     285    wrq.u.data.pointer = ( caddr_t ) ptr; 
     286    wrq.u.data.flags = OidQueryCode; 
     287 
     288    return ( ioctl( socket_id, ( SIOCIWFIRSTPRIV + 0x0E ), &wrq ) ); 
     289} 
     290 
     291#include "stapriv.h" 
     292#include "oid.h" 
     293 
     294STAINFO *getRaStaInfo( char *ifname ) 
     295{ 
     296    char G_bRadio = 1;          //TRUE 
     297 
     298    int ConnectStatus = 0; 
     299    unsigned char BssidQuery[6]; 
     300 
     301    if( !nvram_nmatch( "sta", "%s_mode", ifname ) 
     302        && !nvram_nmatch( "apsta", "%s_mode", ifname ) 
     303        && !nvram_nmatch( "apstawet", "%s_mode", ifname ) ) 
     304    { 
     305        return NULL; 
     306    } 
     307    char *ifn = "ra0"; 
     308 
     309    if( nvram_nmatch( "apsta", "%s_mode", ifname ) 
     310        || nvram_nmatch( "apstawet", "%s_mode", ifname ) ) 
     311        ifn = "apcli0"; 
     312 
     313    int s; 
     314 
     315    s = getsocket(  ); 
     316    if( OidQueryInformation 
     317        ( OID_GEN_MEDIA_CONNECT_STATUS, s, ifn, &ConnectStatus, 
     318          sizeof( ConnectStatus ) ) < 0 ) 
     319    { 
     320        return NULL; 
     321    } 
     322    if( OidQueryInformation 
     323        ( RT_OID_802_11_RADIO, s, ifn, &G_bRadio, sizeof( G_bRadio ) ) < 0 ) 
     324    { 
     325        return NULL; 
     326    } 
     327    if( G_bRadio && ConnectStatus == 1 ) 
     328    { 
     329        memset( &BssidQuery, 0x00, sizeof( BssidQuery ) ); 
     330        OidQueryInformation( OID_802_11_BSSID, s, ifn, &BssidQuery, 
     331                             sizeof( BssidQuery ) ); 
     332        long RSSI; 
     333        int nNoiseDbm; 
     334        unsigned char lNoise; // this value is (ULONG) in Ndis driver (NOTICE!!!) 
     335 
     336        OidQueryInformation( RT_OID_802_11_RSSI, s, ifn, &RSSI, 
     337                             sizeof( RSSI ) ); 
     338        OidQueryInformation(RT_OID_802_11_QUERY_NOISE_LEVEL, s, "ra0", &lNoise, sizeof(lNoise)); 
     339        nNoiseDbm = lNoise; 
     340        nNoiseDbm -= 143; 
     341 
     342 
     343 
     344        STAINFO *ret = malloc( sizeof( STAINFO ) ); 
     345 
     346        memcpy( ret->mac, BssidQuery, 6 ); 
     347        strcpy( ret->ifname, ifn ); 
     348        ret->rssi = RSSI; 
     349        ret->noise = nNoiseDbm; 
     350        return ret; 
     351    } 
     352    return NULL; 
     353 
     354} 
    253355 
    254356#define RTPRIV_IOCTL_GET_MAC_TABLE              (SIOCIWFIRSTPRIV + 0x0F) 
     
    261363    unsigned int *count = ( unsigned int * )list; 
    262364 
    263     RT_802_11_MAC_TABLE table = {0}; 
     365    RT_802_11_MAC_TABLE table = { 0 }; 
    264366    int s, i; 
    265367 
     
    271373    } 
    272374 
    273     if( !ifexists( ifname ) ) 
    274     { 
    275         printf( "IOCTL_STA_INFO ifresolv %s failed!\n", ifname ); 
    276         return 0; 
    277     } 
    278375    int state = get_radiostate( ifname ); 
     376    int ignore = 0; 
    279377 
    280378    if( state == 0 || state == -1 ) 
    281379    { 
    282         printf( "IOCTL_STA_INFO radio %s not enabled!\n", ifname ); 
    283         return 0; 
    284     } 
    285     s = socket( AF_INET, SOCK_DGRAM, 0 ); 
    286     if( s < 0 ) 
    287     { 
    288         fprintf( stderr, "socket(SOCK_DRAGM)\n" ); 
    289         return 0; 
    290     } 
    291     ( void )memset( &iwr, 0, sizeof( struct iwreq ) ); 
    292     ( void )strncpy( iwr.ifr_name, ifname, sizeof( iwr.ifr_name ) ); 
    293  
    294     iwr.u.data.pointer = (caddr_t) &table; 
    295     if( ioctl( s, RTPRIV_IOCTL_GET_MAC_TABLE, &iwr ) < 0 ) 
    296     { 
    297         fprintf( stderr, "IOCTL_STA_INFO for %s failed!\n", ifname ); 
    298         close( s ); 
    299         return 0; 
    300     } 
    301  
     380        ignore = 1; 
     381    } 
     382    if( !ignore ) 
     383    { 
     384        s = getsocket(  ); 
     385        if( s < 0 ) 
     386        { 
     387            ignore = 1; 
     388        } 
     389        ( void )memset( &iwr, 0, sizeof( struct iwreq ) ); 
     390        ( void )strncpy( iwr.ifr_name, ifname, sizeof( iwr.ifr_name ) ); 
     391 
     392        iwr.u.data.pointer = ( caddr_t ) & table; 
     393        if( ioctl( s, RTPRIV_IOCTL_GET_MAC_TABLE, &iwr ) < 0 ) 
     394        { 
     395            ignore = 1; 
     396        } 
     397    } 
    302398 
    303399    unsigned char *l = ( unsigned char * )list; 
     
    305401    count[0] = 0; 
    306402    l += 4; 
    307     for (i=0;i<table.Num;i++) 
    308     { 
    309         memcpy( l, &table.Entry[i].Addr, 6 ); 
    310         if( l[0] == 0 && l[1] == 0 && l[2] == 0 && l[3] == 0 && l[4] == 0 
    311             && l[5] == 0 ) 
    312             break; 
     403    STAINFO *sta = getRaStaInfo( ifname ); 
     404 
     405    if( sta != NULL ) 
     406    { 
     407        memcpy( l, sta->mac, 6 ); 
    313408        l += 6; 
    314409        count[0]++; 
    315     } 
    316     close( s ); 
     410        free( sta ); 
     411    } 
     412    if( !ignore ) 
     413        for( i = 0; i < table.Num; i++ ) 
     414        { 
     415            memcpy( l, &table.Entry[i].Addr, 6 ); 
     416            if( l[0] == 0 && l[1] == 0 && l[2] == 0 && l[3] == 0 && l[4] == 0 
     417                && l[5] == 0 ) 
     418                break; 
     419            l += 6; 
     420            count[0]++; 
     421        } 
    317422 
    318423    return count[0]; 
    319424} 
    320  
    321  
    322  
    323  
     425int getRssi( char *ifname, unsigned char *mac ) 
     426{ 
     427    struct iwreq iwr; 
     428    char type[32]; 
     429    char netmode[32]; 
     430 
     431    RT_802_11_MAC_TABLE table = { 0 }; 
     432    int s, i; 
     433 
     434    sprintf( type, "%s_mode", ifname ); 
     435    sprintf( netmode, "%s_net_mode", ifname ); 
     436    if( nvram_match( netmode, "disabled" ) ) 
     437    { 
     438        return 0; 
     439    } 
     440 
     441    int state = get_radiostate( ifname ); 
     442    int ignore = 0; 
     443 
     444    if( state == 0 || state == -1 ) 
     445    { 
     446        ignore = 1; 
     447    } 
     448    if( !ignore ) 
     449    { 
     450        s = getsocket(  ); 
     451        if( s < 0 ) 
     452        { 
     453            ignore = 1; 
     454        } 
     455        ( void )memset( &iwr, 0, sizeof( struct iwreq ) ); 
     456        ( void )strncpy( iwr.ifr_name, ifname, sizeof( iwr.ifr_name ) ); 
     457 
     458        iwr.u.data.pointer = ( caddr_t ) & table; 
     459        if( ioctl( s, RTPRIV_IOCTL_GET_MAC_TABLE, &iwr ) < 0 ) 
     460        { 
     461            ignore = 1; 
     462        } 
     463    } 
     464 
     465    STAINFO *sta = getRaStaInfo( ifname ); 
     466 
     467    if( sta != NULL ) 
     468    { 
     469        if( !memcmp( mac, sta->mac, 6 ) ) 
     470        { 
     471            int retu = sta->rssi; 
     472 
     473            free( sta ); 
     474            return -95 + retu; 
     475        } 
     476        free( sta ); 
     477    } 
     478    if( !ignore ) 
     479        for( i = 0; i < table.Num; i++ ) 
     480        { 
     481            if( !memcmp( mac, &table.Entry[i].Addr, 6 ) ) 
     482            { 
     483                return -95 + table.Entry[i].AvgRssi0; 
     484            } 
     485        } 
     486    return 0; 
     487} 
     488 
     489int getNoise( char *ifname, unsigned char *mac ) 
     490{ 
     491 
     492    return -95; 
     493 
     494} 
    324495 
    325496#else 
     
    416587} 
    417588 
     589#ifndef HAVE_RT2880 
    418590int getNoise( char *ifname, unsigned char *macname ) 
    419591{ 
     
    436608    return noise; 
    437609} 
    438  
     610#endif 
    439611/* 
    440612 * struct iw_statistics *wlcompat_get_wireless_stats(struct net_device *dev) 
     
    481653#include "net80211/ieee80211_ioctl.h" 
    482654 
    483  
    484  
    485655int getsocket( void ) 
    486656{ 
     
    496666} 
    497667 
    498  
    499668/* 
    500669 * Atheros  
    501670 */ 
    502  
    503671 
    504672#define IOCTL_ERR(x) [x - SIOCIWFIRSTPRIV] "ioctl[" #x "]" 
     
    8911059} 
    8921060 
    893  
    8941061struct wifi_channels 
    8951062{ 
     
    11361303} 
    11371304 
    1138  
    11391305int getRssi( char *ifname, unsigned char *mac ) 
    11401306{ 
     
    13501516#endif 
    13511517 
    1352  
    1353  
    13541518#ifdef HAVE_RT2880 
    13551519char *get_wl_instance_name( int instance ) 
     
    13661530    return 1; 
    13671531} 
    1368  
    1369  
    13701532 
    13711533#else 
  • src/router/wiviz2/channelhopper.c

    r10806 r10808  
    126126    hopPos = (hopPos + 1) % cfg->channelHopSeqLen; 
    127127    } 
     128#ifdef HAVE_MADWIFI 
    128129    if (nc>255)nc=1; 
     130#elif HAVE_RT2880 
     131    if (nc>14)nc=1; 
     132#else 
     133    if (nc>255)nc=1; 
     134#endif 
    129135    //Set the channel 
    130136#ifdef HAVE_MADWIFI 
  • src/router/wiviz2/wiviz.c

    r10806 r10808  
    6666void readWL(wiviz_cfg * cfg); 
    6767void reloadConfig(); 
    68  
     68int stop = 0; 
     69  
    6970wiviz_cfg * global_cfg; 
    7071char *wl_dev; 
     
    7273int main(int argc, char * * argv) { 
    7374  char *dev;                           
    74   int stop = 0; 
    7575  int oldMonitor, newMonitor;         
    7676  u_char packet[4096];                  
     
    8585  wl_dev=get_wdev(); 
    8686#endif 
     87if (argc>1) 
     88if (!strcmp(argv[1],"terminate")) 
     89    { 
     90#ifdef HAVE_MADWIFI 
     91  // return to original channel 
     92  sysprintf("iwconfig %s channel %sM",get_monitor(),nvram_nget("%s_channel",get_wdev())); 
     93  sleep(1); 
     94  sysprintf("ifconfig %s down",get_monitor()); 
     95  sysprintf("wlanconfig %s destroy",get_monitor()); 
     96#elif HAVE_RT2880 
     97  nvram_set("wl0_mode",nvram_safe_get("wl0_oldmode")); 
     98  sysprintf("startservice configurewifi"); 
     99#else 
     100  wl_ioctl(wl_dev, WLC_SET_MONITOR, &oldMonitor, 4); 
     101#endif     
     102    } 
     103 
    87104  global_cfg = &cfg; 
    88105  signal(SIGUSR1, &signal_handler); 
     
    116133          nvram_set("wl0_oldmode",nvram_safe_get("wl0_mode")); 
    117134          nvram_set("wl0_mode","sta"); 
     135          if (!nvram_match("wl0_oldmode","sta")) 
    118136          sysprintf("startservice configurewifi"); 
    119137          sysprintf("iwconfig ra0 mode monitor"); 
     
    165183    if (cfg.hosts[i].staInfo) free(cfg.hosts[i].staInfo); 
    166184    } 
    167 #endif 
    168 #ifdef HAVE_MADWIFI 
    169   // return to original channel 
    170   sysprintf("iwconfig %s channel %sM",get_monitor(),nvram_nget("%s_channel",get_wdev())); 
    171   sleep(1); 
    172   sysprintf("ifconfig %s down",get_monitor()); 
    173   sysprintf("wlanconfig %s destroy",get_monitor()); 
    174 #elif HAVE_RT2880 
    175   nvram_set("wl0_mode",nvram_safe_get("wl0_oldmode")); 
    176   sysprintf("startservice configurewifi"); 
    177 #else 
    178   wl_ioctl(wl_dev, WLC_SET_MONITOR, &oldMonitor, 4); 
    179185#endif 
    180186  close(s); 
     
    373379  if (signum == SIGUSR1) writeJavascript(); 
    374380  if (signum == SIGUSR2) reloadConfig(); 
     381  if (signum == SIGTERM) stop=1; 
    375382  } 
    376383 
Note: See TracChangeset for help on using the changeset viewer.