Попробуйте по порядку эти команды после перезапуска системы:
ip a | grep wlan0 | grep UP
/etc/init.d/dnsmasq status | grep "(running)"
/etc/init.d/hostapd status | grep "hostapd is running"
sysctl net.ipv4.ip_forward | grep 1
За проверку точки доступа ответственна эта функция:
void MainWindow::checkStatus() {
char tmp1[200], tmp2[200], tmp3[200], command[100], *temp;
QSettings *GlobalSettings = new QSettings("/root/.WiFiHostapdAP/WiFi_Hostapd_AP.conf",QSettings::NativeFormat); // создание нового объекта
bool starting = true;
QString temp_QT;
qDebug() << "Testing AP... ";
////////////////////////////////////////////////////////////////////////////////////////////
// Активирована ли точка доступа?
////////////////////////////////////////////////////////////////////////////////////////////
// точка доступа активирована, если
// 1. Поднят интерфейс
////////////////////////////////////////////////////////////////////////////////////////////
strcpy(command, "ip a | grep ");
temp_QT = GlobalSettings->value("AP/Iface", "wlan0").toString().toLocal8Bit();
temp = temp_QT.toAscii().data();
strcat(command, temp);
strcat(command, " | grep UP");
console(command, tmp1);
if(strlen(tmp1)<3) { starting=false; qDebug() << command << " ... FAIL"; } else { qDebug() << command << " ... OK"; }
////////////////////////////////////////////////////////////////////////////////////////////
// 2. Поднят DNSMASQ
////////////////////////////////////////////////////////////////////////////////////////////
strcpy(command, "/etc/init.d/dnsmasq status | grep \"(running)\"");
console(command, tmp2);
if(strlen(tmp2)>5) { qDebug() << command << " ... OK"; }
else { starting=false; qDebug() << command << " ... FAIL"; }
////////////////////////////////////////////////////////////////////////////////////////////
// 3. Поднят Hostapd
////////////////////////////////////////////////////////////////////////////////////////////
strcpy(command, "");
temp_QT = GlobalSettings->value("DHCP/HOSTAPDstartCommand", "/etc/init.d/hostapd").toString().toLocal8Bit();
temp = temp_QT.toAscii().data();
strcat(command, temp);
strcat(command, " status | grep \"hostapd is running\"");
console(command, tmp3);
if(strlen(tmp3)<5){ starting=false; qDebug() << command << " ... FAIL"; } else { qDebug() << command << " ... OK"; }
// 4. Включен форвардинг
////////////////////////////////////////////////////////////////////////////////////////////
strcpy(command, "sysctl net.ipv4.ip_forward | grep 1");
console(command, tmp3);
if(strlen(tmp3)<5){ starting=false; qDebug() << command << " ... FAIL"; } else { qDebug() << command << " ... OK"; }
////////////////////////////////////////////////////////////////////////////////////////////
if(starting==true) {
ui->identificator->setText(tr("<h3><font color=\"green\">Активировано</font></h3>"));
ui->Activate->setEnabled(false);
ui->Disactive->setEnabled(true);
qDebug() << "AP is running. \n";
} else {
ui->identificator->setText(tr("<h3><font color=\"red\">Отключена</font></h3>"));
ui->Activate->setEnabled(true);
ui->Disactive->setEnabled(false);
qDebug() << "AP not running. \n";
}
////////////////////////////////////////////////////////////////////////////////////////////
delete GlobalSettings;
}
void MainWindow::console( char cmd[], char *ret) {
char buf[BUFSIZ];
FILE *ptr;
if ((ptr = popen(cmd, "r")) != NULL)
while (fgets(buf, BUFSIZ, ptr) != NULL)
strcat(ret, buf);
pclose(ptr);
}
Вроде, все правильно. Иногда, бывает, чудит Popen (из-за этого теперь мониторю трафик через /proc/net/dev, а не ifconfig.
Буду разбираться. Насчёт падения сейчас погуглю. Вывод ни на что не натолкнул...
Пользователь решил продолжить мысль 11 Марта 2012, 14:00:02:
Попробуйте поставить из этого репозитория этот пакет:
deb-src http://archive.ubuntu.com/ubuntu lucid main restricted universe multiverse
libqt4-core