libiwinfo: reuse existing temporary interface for scanning
This commit is contained in:
parent
62fe7c0e77
commit
1423d3556e
1 changed files with 41 additions and 26 deletions
|
@ -1138,7 +1138,7 @@ static void nl80211_get_scancrypto(const char *spec,
|
||||||
|
|
||||||
int nl80211_get_scanlist(const char *ifname, char *buf, int *len)
|
int nl80211_get_scanlist(const char *ifname, char *buf, int *len)
|
||||||
{
|
{
|
||||||
int freq, rssi, qmax, count;
|
int freq, rssi, qmax, count, is_tmp = 0;
|
||||||
char *res;
|
char *res;
|
||||||
char cmd[256];
|
char cmd[256];
|
||||||
char ssid[128] = { 0 };
|
char ssid[128] = { 0 };
|
||||||
|
@ -1245,40 +1245,55 @@ int nl80211_get_scanlist(const char *ifname, char *buf, int *len)
|
||||||
{
|
{
|
||||||
if( (res = nl80211_ifname2phy(ifname)) != NULL )
|
if( (res = nl80211_ifname2phy(ifname)) != NULL )
|
||||||
{
|
{
|
||||||
/*
|
/* Got a temp interface, don't create yet another one */
|
||||||
* This is a big ugly hack, just look away.
|
if( !strncmp(ifname, "tmp.", 4) )
|
||||||
*/
|
{
|
||||||
|
sprintf(cmd, "ifconfig %s up 2>/dev/null", ifname);
|
||||||
|
if( WEXITSTATUS(system(cmd)) )
|
||||||
|
return -1;
|
||||||
|
|
||||||
sprintf(cmd, "ifconfig %s down 2>/dev/null", ifname);
|
wext_get_scanlist(ifname, buf, len);
|
||||||
if( WEXITSTATUS(system(cmd)) )
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
sprintf(cmd, "iw phy %s interface add scan.%s "
|
sprintf(cmd, "ifconfig %s down 2>/dev/null", ifname);
|
||||||
"type station 2>/dev/null", res, ifname);
|
(void) WEXITSTATUS(system(cmd));
|
||||||
if( WEXITSTATUS(system(cmd)) )
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
sprintf(cmd, "ifconfig scan.%s up 2>/dev/null", ifname);
|
return 0;
|
||||||
if( WEXITSTATUS(system(cmd)) )
|
}
|
||||||
goto out;
|
|
||||||
|
|
||||||
sprintf(cmd, "scan.%s", ifname);
|
/* Spawn a new scan interface */
|
||||||
wext_get_scanlist(cmd, buf, len);
|
else
|
||||||
|
{
|
||||||
|
sprintf(cmd, "ifconfig %s down 2>/dev/null", ifname);
|
||||||
|
if( WEXITSTATUS(system(cmd)) )
|
||||||
|
goto out;
|
||||||
|
|
||||||
out:
|
sprintf(cmd, "iw phy %s interface add scan.%s "
|
||||||
sprintf(cmd, "ifconfig scan.%s down 2>/dev/null", ifname);
|
"type station 2>/dev/null", res, ifname);
|
||||||
(void) WEXITSTATUS(system(cmd));
|
if( WEXITSTATUS(system(cmd)) )
|
||||||
|
goto out;
|
||||||
|
|
||||||
sprintf(cmd, "iw dev scan.%s del 2>/dev/null", ifname);
|
sprintf(cmd, "ifconfig scan.%s up 2>/dev/null", ifname);
|
||||||
(void) WEXITSTATUS(system(cmd));
|
if( WEXITSTATUS(system(cmd)) )
|
||||||
|
goto out;
|
||||||
|
|
||||||
sprintf(cmd, "ifconfig %s up 2>/dev/null", ifname);
|
sprintf(cmd, "scan.%s", ifname);
|
||||||
(void) WEXITSTATUS(system(cmd));
|
wext_get_scanlist(cmd, buf, len);
|
||||||
|
|
||||||
sprintf(cmd, "killall -HUP hostapd 2>/dev/null");
|
out:
|
||||||
(void) WEXITSTATUS(system(cmd));
|
sprintf(cmd, "ifconfig scan.%s down 2>/dev/null", ifname);
|
||||||
|
(void) WEXITSTATUS(system(cmd));
|
||||||
|
|
||||||
return 0;
|
sprintf(cmd, "iw dev scan.%s del 2>/dev/null", ifname);
|
||||||
|
(void) WEXITSTATUS(system(cmd));
|
||||||
|
|
||||||
|
sprintf(cmd, "ifconfig %s up 2>/dev/null", ifname);
|
||||||
|
(void) WEXITSTATUS(system(cmd));
|
||||||
|
|
||||||
|
sprintf(cmd, "killall -HUP hostapd 2>/dev/null");
|
||||||
|
(void) WEXITSTATUS(system(cmd));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue