Changeset 10808
- Timestamp:
- 11/07/08 16:02:50 (5 years ago)
- Location:
- src/router
- Files:
-
- 4 edited
-
httpd/visuals/dd-wrt.c (modified) (6 diffs)
-
libutils/wl.c (modified) (16 diffs)
-
wiviz2/channelhopper.c (modified) (1 diff)
-
wiviz2/wiviz.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/router/httpd/visuals/dd-wrt.c
r10802 r10808 5653 5653 #define RTPRIV_IOCTL_GET_MAC_TABLE (SIOCIWFIRSTPRIV + 0x0F) 5654 5654 5655 typedef struct STAINFO { 5656 char mac[6]; 5657 char rssi; 5658 char noise; 5659 char ifname[32]; 5660 } STAINFO; 5661 5662 5655 5663 int 5656 5664 ej_active_wireless_if( webs_t wp, int argc, char_t ** argv, … … 5663 5671 int s, len,i; 5664 5672 struct iwreq iwr; 5673 int ignore=0; 5665 5674 5666 5675 if( !ifexists( ifname ) ) … … 5673 5682 if( state == 0 || state == -1 ) 5674 5683 { 5675 printf( "IOCTL_STA_INFO radio %s not enabled!\n", ifname );5676 5684 return cnt; 5677 5685 } … … 5679 5687 if( s < 0 ) 5680 5688 { 5681 fprintf( stderr, "socket(SOCK_DRAGM)\n" );5682 5689 return cnt; 5683 5690 } … … 5689 5696 if( ioctl( s, RTPRIV_IOCTL_GET_MAC_TABLE, &iwr ) < 0 ) 5690 5697 { 5691 fprintf( stderr, "IOCTL_STA_INFO for %s failed!\n", ifname ); 5692 close( s ); 5693 return cnt; 5694 } 5695 5696 5698 ignore=1; 5699 } 5700 if (!ignore) 5697 5701 for (i = 0; i < table.Num; i++) { 5698 5702 if( cnt ) … … 5736 5740 } 5737 5741 } 5738 close( s ); 5739 5742 STAINFO *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 5752 close(s); 5740 5753 return cnt; 5741 5754 } -
src/router/libutils/wl.c
r10785 r10808 33 33 34 34 #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; 35 char *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; 50 59 } 51 60 52 61 int getchannels( unsigned int *list, char *ifname ) 53 62 { 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; 67 76 #ifdef BUFFALO_JP 68 list[13]=14;69 return 14;77 list[13] = 14; 78 return 14; 70 79 #else 71 return 13;80 return 13; 72 81 #endif 73 82 } … … 102 111 } 103 112 104 105 113 u_int ieee80211_mhz2ieee( u_int freq ) 106 114 { 107 if( freq == 2484 )115 if( freq == 2484 ) 108 116 return 14; 109 if( freq < 2484 )110 return ( freq - ( 2407 ) ) / 5;117 if( freq < 2484 ) 118 return ( freq - ( 2407 ) ) / 5; 111 119 if( freq < 4990 && freq > 4940 ) 112 120 return ( ( freq * 10 ) + ( ( ( freq % 5 ) == 2 ) ? 5 : 0 ) - 113 121 49400 ) / 5; 114 122 if( freq < 5000 ) 115 return 15 + ( ( freq - ( 2512 ) ) / 20 );123 return 15 + ( ( freq - ( 2512 ) ) / 20 ); 116 124 117 125 return ( freq - ( 5000 ) ) / 5; 118 126 } 119 127 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 } 128 unsigned 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 } 136 147 } 137 148 … … 148 159 149 160 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 } 154 165 for( i = 0; i < wrq.u.freq.e; i++ ) 155 166 freq *= 10; … … 172 183 173 184 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 } 178 189 for( i = 0; i < wrq.u.freq.e; i++ ) 179 190 freq *= 10; … … 223 234 return ( i < 17 ? NULL : a ); 224 235 } 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; 236 typedef 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; 235 248 } MACHTTRANSMIT_SETTING; 236 249 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; 250 typedef 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; 247 261 } RT_802_11_MAC_ENTRY; 248 262 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 263 typedef 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 252 267 } RT_802_11_MAC_TABLE; 268 269 typedef struct STAINFO 270 { 271 char mac[6]; 272 char rssi; 273 char noise; 274 char ifname[32]; 275 } STAINFO; 276 277 int 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 294 STAINFO *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 } 253 355 254 356 #define RTPRIV_IOCTL_GET_MAC_TABLE (SIOCIWFIRSTPRIV + 0x0F) … … 261 363 unsigned int *count = ( unsigned int * )list; 262 364 263 RT_802_11_MAC_TABLE table = { 0};365 RT_802_11_MAC_TABLE table = { 0 }; 264 366 int s, i; 265 367 … … 271 373 } 272 374 273 if( !ifexists( ifname ) )274 {275 printf( "IOCTL_STA_INFO ifresolv %s failed!\n", ifname );276 return 0;277 }278 375 int state = get_radiostate( ifname ); 376 int ignore = 0; 279 377 280 378 if( state == 0 || state == -1 ) 281 379 { 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 } 302 398 303 399 unsigned char *l = ( unsigned char * )list; … … 305 401 count[0] = 0; 306 402 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 ); 313 408 l += 6; 314 409 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 } 317 422 318 423 return count[0]; 319 424 } 320 321 322 323 425 int 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 489 int getNoise( char *ifname, unsigned char *mac ) 490 { 491 492 return -95; 493 494 } 324 495 325 496 #else … … 416 587 } 417 588 589 #ifndef HAVE_RT2880 418 590 int getNoise( char *ifname, unsigned char *macname ) 419 591 { … … 436 608 return noise; 437 609 } 438 610 #endif 439 611 /* 440 612 * struct iw_statistics *wlcompat_get_wireless_stats(struct net_device *dev) … … 481 653 #include "net80211/ieee80211_ioctl.h" 482 654 483 484 485 655 int getsocket( void ) 486 656 { … … 496 666 } 497 667 498 499 668 /* 500 669 * Atheros 501 670 */ 502 503 671 504 672 #define IOCTL_ERR(x) [x - SIOCIWFIRSTPRIV] "ioctl[" #x "]" … … 891 1059 } 892 1060 893 894 1061 struct wifi_channels 895 1062 { … … 1136 1303 } 1137 1304 1138 1139 1305 int getRssi( char *ifname, unsigned char *mac ) 1140 1306 { … … 1350 1516 #endif 1351 1517 1352 1353 1354 1518 #ifdef HAVE_RT2880 1355 1519 char *get_wl_instance_name( int instance ) … … 1366 1530 return 1; 1367 1531 } 1368 1369 1370 1532 1371 1533 #else -
src/router/wiviz2/channelhopper.c
r10806 r10808 126 126 hopPos = (hopPos + 1) % cfg->channelHopSeqLen; 127 127 } 128 #ifdef HAVE_MADWIFI 128 129 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 129 135 //Set the channel 130 136 #ifdef HAVE_MADWIFI -
src/router/wiviz2/wiviz.c
r10806 r10808 66 66 void readWL(wiviz_cfg * cfg); 67 67 void reloadConfig(); 68 68 int stop = 0; 69 69 70 wiviz_cfg * global_cfg; 70 71 char *wl_dev; … … 72 73 int main(int argc, char * * argv) { 73 74 char *dev; 74 int stop = 0;75 75 int oldMonitor, newMonitor; 76 76 u_char packet[4096]; … … 85 85 wl_dev=get_wdev(); 86 86 #endif 87 if (argc>1) 88 if (!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 87 104 global_cfg = &cfg; 88 105 signal(SIGUSR1, &signal_handler); … … 116 133 nvram_set("wl0_oldmode",nvram_safe_get("wl0_mode")); 117 134 nvram_set("wl0_mode","sta"); 135 if (!nvram_match("wl0_oldmode","sta")) 118 136 sysprintf("startservice configurewifi"); 119 137 sysprintf("iwconfig ra0 mode monitor"); … … 165 183 if (cfg.hosts[i].staInfo) free(cfg.hosts[i].staInfo); 166 184 } 167 #endif168 #ifdef HAVE_MADWIFI169 // return to original channel170 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_RT2880175 nvram_set("wl0_mode",nvram_safe_get("wl0_oldmode"));176 sysprintf("startservice configurewifi");177 #else178 wl_ioctl(wl_dev, WLC_SET_MONITOR, &oldMonitor, 4);179 185 #endif 180 186 close(s); … … 373 379 if (signum == SIGUSR1) writeJavascript(); 374 380 if (signum == SIGUSR2) reloadConfig(); 381 if (signum == SIGTERM) stop=1; 375 382 } 376 383
Note: See TracChangeset
for help on using the changeset viewer.
