Changeset 10757


Ignore:
Timestamp:
11/05/08 02:55:27 (5 years ago)
Author:
BrainSlayer
Message:

radauth support for rt2880

Location:
src/router
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • src/router/libutils/wl.c

    r10753 r10757  
    192192} 
    193193 
     194static const char *ieee80211_ntoa( const uint8_t mac[6] ) 
     195{ 
     196    static char a[18]; 
     197    int i; 
     198 
     199    i = snprintf( a, sizeof( a ), "%02x:%02x:%02x:%02x:%02x:%02x", 
     200                  mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] ); 
     201    return ( i < 17 ? NULL : a ); 
     202} 
     203typedef union _MACHTTRANSMIT_SETTING { 
     204        struct  { 
     205                unsigned short  MCS:7;  // MCS 
     206                unsigned short  BW:1;   //channel bandwidth 20MHz or 40 MHz 
     207                unsigned short  ShortGI:1; 
     208                unsigned short  STBC:2; //SPACE 
     209                unsigned short  rsv:3; 
     210                unsigned short  MODE:2; // Use definition MODE_xxx. 
     211        } field; 
     212        unsigned short      word; 
     213} MACHTTRANSMIT_SETTING; 
     214 
     215typedef struct _RT_802_11_MAC_ENTRY { 
     216        unsigned char            Addr[6]; 
     217        unsigned char            Aid; 
     218        unsigned char            Psm;     // 0:PWR_ACTIVE, 1:PWR_SAVE 
     219        unsigned char            MimoPs;  // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled 
     220        char                     AvgRssi0; 
     221        char                     AvgRssi1; 
     222        char                     AvgRssi2; 
     223        unsigned int             ConnectedTime; 
     224        MACHTTRANSMIT_SETTING    TxRate; 
     225} RT_802_11_MAC_ENTRY; 
     226 
     227typedef struct _RT_802_11_MAC_TABLE { 
     228        unsigned long            Num; 
     229        RT_802_11_MAC_ENTRY      Entry[32]; //MAX_LEN_OF_MAC_TABLE = 32 
     230} RT_802_11_MAC_TABLE; 
     231 
     232#define RTPRIV_IOCTL_GET_MAC_TABLE              (SIOCIWFIRSTPRIV + 0x0F) 
     233 
     234int getassoclist( char *ifname, unsigned char *list ) 
     235{ 
     236    struct iwreq iwr; 
     237    char type[32]; 
     238    char netmode[32]; 
     239    unsigned int *count = ( unsigned int * )list; 
     240 
     241    RT_802_11_MAC_TABLE table = {0}; 
     242    int s, i; 
     243 
     244    sprintf( type, "%s_mode", ifname ); 
     245    sprintf( netmode, "%s_net_mode", ifname ); 
     246    if( nvram_match( netmode, "disabled" ) ) 
     247    { 
     248        return 0; 
     249    } 
     250 
     251    if( !ifexists( ifname ) ) 
     252    { 
     253        printf( "IOCTL_STA_INFO ifresolv %s failed!\n", ifname ); 
     254        return 0; 
     255    } 
     256    int state = get_radiostate( ifname ); 
     257 
     258    if( state == 0 || state == -1 ) 
     259    { 
     260        printf( "IOCTL_STA_INFO radio %s not enabled!\n", ifname ); 
     261        return 0; 
     262    } 
     263    s = socket( AF_INET, SOCK_DGRAM, 0 ); 
     264    if( s < 0 ) 
     265    { 
     266        fprintf( stderr, "socket(SOCK_DRAGM)\n" ); 
     267        return 0; 
     268    } 
     269    ( void )memset( &iwr, 0, sizeof( struct iwreq ) ); 
     270    ( void )strncpy( iwr.ifr_name, ifname, sizeof( iwr.ifr_name ) ); 
     271 
     272    iwr.u.data.pointer = (caddr_t) &table; 
     273    if( ioctl( s, RTPRIV_IOCTL_GET_MAC_TABLE, &iwr ) < 0 ) 
     274    { 
     275        fprintf( stderr, "IOCTL_STA_INFO for %s failed!\n", ifname ); 
     276        close( s ); 
     277        return 0; 
     278    } 
     279 
     280 
     281    unsigned char *l = ( unsigned char * )list; 
     282 
     283    count[0] = 0; 
     284    l += 4; 
     285    for (i=0;i<table.Num;i++) 
     286    { 
     287        memcpy( l, &table.Entry[i].Addr, 6 ); 
     288        if( l[0] == 0 && l[1] == 0 && l[2] == 0 && l[3] == 0 && l[4] == 0 
     289            && l[5] == 0 ) 
     290            break; 
     291        l += 6; 
     292        count[0]++; 
     293    } 
     294    close( s ); 
     295 
     296    return count[0]; 
     297} 
     298 
     299 
     300 
     301 
    194302 
    195303#else 
     
    225333#endif 
    226334} 
    227 #endif 
    228335int wl_getbssid( char *wl, char *mac ) 
    229336{ 
     
    272379    return count[0]; 
    273380} 
     381#endif 
    274382 
    275383int getwdslist( char *name, unsigned char *list ) 
Note: See TracChangeset for help on using the changeset viewer.