summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas2011-09-28 17:44:42 +0200
committerNiklas2011-09-28 17:44:42 +0200
commita8087a7c1b83ae7770f2b1c278d0eb5318b7e33e (patch)
tree127ff5b78cda66b1d80f18a36e3c3a5e58fc3f69
parentmanual config gui added. put the interfaceconfig map into networkDiscovery an... (diff)
downloadfbgui-a8087a7c1b83ae7770f2b1c278d0eb5318b7e33e.tar.gz
fbgui-a8087a7c1b83ae7770f2b1c278d0eb5318b7e33e.tar.xz
fbgui-a8087a7c1b83ae7770f2b1c278d0eb5318b7e33e.zip
added a select field to the manual conf gui. also fixed some bugs in the ip4_manualConf function
-rw-r--r--LogReceiver/html/networkdiscovery.html50
-rw-r--r--LogReceiver/ndgui.cpp39
-rw-r--r--LogReceiver/ndgui.h20
-rw-r--r--LogReceiver/networkdiscovery.cpp81
-rw-r--r--LogReceiver/networkdiscovery.h5
-rw-r--r--LogReceiver/networkmanager.cpp29
-rw-r--r--LogReceiver/networkmanager.h12
7 files changed, 172 insertions, 64 deletions
diff --git a/LogReceiver/html/networkdiscovery.html b/LogReceiver/html/networkdiscovery.html
index 1302071..1f6125a 100644
--- a/LogReceiver/html/networkdiscovery.html
+++ b/LogReceiver/html/networkdiscovery.html
@@ -42,14 +42,29 @@ var checkRegexp = function ( o, regexp, n ) {
};
var ip4_manualConfigurationDialog = function () {
- var ifname = $("#ifname"),
+ var jsonArr = fbgui.getManualConfInterfaces();
+ //jsonArr = eval('(' + jsonArr + ')');
+ var c = "<select name='nd_mc_ifname_select' id='nd_mc_ifname_select'>";
+ if(jsonArr == "") {
+ c += "<option>NO INTERFACE</option>";
+ } else {
+ jQuery.each(jsonArr, function() {
+ c += " <option>"+ this +"</option>";
+ }
+ );
+ }
+ c += "</select>";
+ $("#nd_mc_ifname").html(c);
+
+ var ifname = $("#nd_mc_ifname_select :selected").text(),
ipaddr = $("#ipaddr"),
netmask = $("#netmask"),
broadcast = $("#broadcast"),
gateway = $("#gateway"),
dns = $("#dns"),
- allFields = $([]).add(ifname).add(ipaddr).add(netmask).add(broadcast).add(gateway).add(dns);
+ allFields = $([]).add(ipaddr).add(netmask).add(broadcast).add(gateway).add(dns);
+
$("#nd_manual_configuration_dialog").dialog(
{ buttons: { "Cancel": function() {
$(this).dialog("close");},
@@ -57,8 +72,6 @@ var ip4_manualConfigurationDialog = function () {
var bValid = true;
allFields.removeClass("ui-state-error");
- //the interface name has to be choosen out of a dropdown menue
- //bValid = bValid && checkLength(ifname, "Interface", 2, 15);
bValid = bValid && checkLength(ipaddr, "IP-Address", 7, 15);
bValid = bValid && checkLength(netmask, "Netmask Address", 7, 15);
bValid = bValid && checkLength(broadcast, "Broadcast Address", 7, 15);
@@ -75,16 +88,19 @@ var ip4_manualConfigurationDialog = function () {
// put variables into a json object
// send to qt networkdiscovery
var o = {"ifname" : ifname,
- "ipaddr" : ipaddr,
- "netmask" : netmask,
- "broadcast" : broadcast,
- "gateway" : gateway,
- "dns" : dns }
- fbgui.ip4_setManualConfiguraton(o);
+ "ipaddr" : ipaddr.val(),
+ "netmask" : netmask.val(),
+ "broadcast" : broadcast.val(),
+ "gateway" : gateway.val(),
+ "dns" : dns.val() }
+ try {
+ fbgui.ip4_setManualConfiguration(o);
+ } catch (e) {
+ fbgui.notifyCall(e);
+ }
$(this).dialog("close");
} }
} ,
- //autoOpen: false,
minWidth: 450,
modal: true,
resizable: false,
@@ -95,11 +111,11 @@ var ip4_manualConfigurationDialog = function () {
};
var abortBootDialog = function (m) {
+ fbgui.notifyCall("abortBootDialog");
$("#nd_abort_boot_msg").html(m);
$("#nd_abort_boot_dialog").dialog(
{ buttons: { "Manual Configure": function() {
- ip4_manualConfigurationDialog();
- $(this).dialog("close");},
+ ip4_manualConfigurationDialog();},
"Show Log": function() {fbgui.showLog();
$(this).dialog("close");},
"Restart": function() {fbgui.restartSystem();
@@ -126,7 +142,9 @@ var chooseInterfaceDialog = function (i) {
$("#nd_choose_interface_msg").html(cb);
$("#nd_choose_interface_dialog").dialog(
- { buttons: { "Show Log": function() {fbgui.showLog();
+ { buttons: { "Manual Configure": function() {
+ ip4_manualConfigurationDialog();},
+ "Show Log": function() {fbgui.showLog();
$(this).dialog("close");},
"Restart": function() {fbgui.restartSystem();
$(this).dialog("close"); },
@@ -208,8 +226,8 @@ var addInterface = function (i){
<p class="validateTips">All form fields are required.</p>
<form>
<fieldset>
- <label for="ifname">Interface</label>
- <input type="text" name="ifname" id="ifname" class="text ui-widget-content ui-corner-all"/>
+ <label for="nd_mc_ifname">Interface</label>
+ <span id="nd_mc_ifname"></span>
<label for="ipaddr">IP-Address</label>
<input type="text" name="ipaddr" id="ipaddr" class="text ui-widget-content ui-corner-all"/>
<label for="netmask">Netmask</label>
diff --git a/LogReceiver/ndgui.cpp b/LogReceiver/ndgui.cpp
index e3ddfd4..26e924c 100644
--- a/LogReceiver/ndgui.cpp
+++ b/LogReceiver/ndgui.cpp
@@ -12,6 +12,7 @@ ndgui::ndgui(QMainWindow *parent) :
connect(&networkDiscovery, SIGNAL(continueBoot(QString, int)), this, SLOT(continueBoot(QString, int)));
_started = false;
+ _manualConfInterfaces = "[\"NO INTERFACE\"]";
_webView = new QWebView(this);
connect(_webView->page()->mainFrame(), SIGNAL(
@@ -74,14 +75,13 @@ void ndgui::continueBoot(QString ifName, int userChoice) {
if (!userChoice) {
QString text = "continue with interface: " + ifName;
qDebug() << text << "no user choice";
- _webView->load(QUrl("qrc:html/continueBoot.html"));
} else {
QString text = "continue with interface: " + ifName;
qDebug() << text << "with user choice";
- _webView->load(QUrl("qrc:html/continueBoot.html"));
QString gateway = networkDiscovery.getGatewayForInterface(ifName);
networkDiscovery.ip4_replaceDefaultRoute(ifName,gateway,0);
}
+ _webView->load(QUrl("qrc:html/continueBoot.html"));
}
void ndgui::showLog() {
@@ -89,6 +89,35 @@ void ndgui::showLog() {
}
/*test html gui version*/
+
+QVariantList ndgui::getManualConfInterfaces() {
+ qDebug() << "call getManualConfInterfaces";
+ /*
+ QString jsonArr("");
+ if(_manConfList.size() > 0) {
+ jsonArr = "[";
+ for(int i = 0; i < _manConfList.size()-1; i++) {
+ jsonArr += "'" + _manConfList.value(i) + "',";
+ }
+ jsonArr += "'" + _manConfList.last() + "']";
+
+ }
+ qDebug() << "value of jsonArr:" << jsonArr;
+ */
+ QVariantList jsonArr;
+ foreach (QString s, _manConfList) {
+ QVariant e(s);
+ jsonArr << e;
+ }
+ qDebug() << "value of jsonArr:" << jsonArr;
+ return jsonArr;
+}
+
+int ndgui::ip4_setManualConfiguration(QVariantMap jsonArr) {
+ return networkDiscovery.ip4_setManualConfiguration(jsonArr);
+
+}
+
/* slots */
@@ -134,6 +163,7 @@ void ndgui::loadJQuery() {
// und _webView->page()->mainFrame() zu _parent
void ndgui::abortBoot(const QString msg) {
+ qDebug() << "call abortBoot:" << msg;
QString code = QString("abortBootDialog('\%1')").arg(msg);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
@@ -166,9 +196,10 @@ void ndgui::addInterface(const QString &ifName) {
if (ifName == "")
return;
qDebug() << "call addInterface";
+ _manConfList.append(ifName);
QString code = QString("addInterface('\%1')").arg(ifName);
_webView->page()->mainFrame()->evaluateJavaScript(code);
}
-void ndgui::notifyCall(){
- qDebug() << "------ called";
+void ndgui::notifyCall(QString msg){
+ qDebug() << "------ called:" << msg;
}
diff --git a/LogReceiver/ndgui.h b/LogReceiver/ndgui.h
index c41cecd..f841cc9 100644
--- a/LogReceiver/ndgui.h
+++ b/LogReceiver/ndgui.h
@@ -3,10 +3,7 @@
#include <QtGui>
#include <QtWebKit>
-#include <QProgressBar>
-#include <QLabel>
-#include <QGroupBox>
-#include <QBoxLayout>
+#include <QVariant>
#include "networkdiscovery.h"
@@ -14,10 +11,13 @@
class ndgui: public QMainWindow {
Q_OBJECT
+Q_PROPERTY(QString manualConfInterfaces READ manualConfInterfaces WRITE setManualConfInterfaces)
public:
ndgui(QMainWindow *parent = 0);
~ndgui();
+ Q_INVOKABLE QVariantList getManualConfInterfaces();
+ Q_INVOKABLE int ip4_setManualConfiguration(QVariantMap result);
public slots:
void handleConnectionEstablished(QString ifName);
@@ -39,8 +39,14 @@ public slots:
void updateIfStatus(const QString &ifName, const QString &status);
void updateStatus(const QString &status);
void updateIfProgressBar(const QString &ifName, const int& percent);
- void notifyCall();
+ void notifyCall(QString msg);
+ // property functions
+ void setManualConfInterfaces(QString jsonArray) {
+ _manualConfInterfaces = jsonArray;
+ }
+ QString manualConfInterfaces() const
+ {return _manualConfInterfaces;}
private:
@@ -52,6 +58,10 @@ private:
QList<QString> _ifNameList; // maps interfaceName to its gateway
+ QList<QString> _manConfList;
+
+ QString _manualConfInterfaces;
+
};
diff --git a/LogReceiver/networkdiscovery.cpp b/LogReceiver/networkdiscovery.cpp
index 159321d..7255095 100644
--- a/LogReceiver/networkdiscovery.cpp
+++ b/LogReceiver/networkdiscovery.cpp
@@ -43,10 +43,9 @@ void NetworkDiscovery::initAndRun(QString serverPath, QString pathToExe,
QFileInfo fInfo(pathToDhcpcdExe);
if (!fInfo.exists()) {
qDebug()
- << "couldn't find customdhcpcd exe. Please check the path to this file.";
- emit
- abortBoot(
- "couldn't find customdhcpcd exe. Please check the path to this file.");
+ << "could not find customdhcpcd exe. Please check the path to this file.";
+ emit abortBoot(
+ "could not find customdhcpcd exe. Please check the path to this file.");
return;
}
@@ -71,9 +70,8 @@ void NetworkDiscovery::initAndRun(QString serverPath, QString pathToExe,
numberOfProcesses = list.size();
runDHCPCD(list);
} else {
- qDebug() << "list is empty. Haven't found usable interface.";
- emit
- abortBoot("Haven't found usable interface");
+ qDebug() << "list is empty. Have not found usable interface.";
+ emit abortBoot("Haven not found usable interface");
return;
}
@@ -98,7 +96,15 @@ int NetworkDiscovery::ip4_setManualConfiguration(QVariantMap result) {
//}
QList<QString> dns;
dns.append(result["dns"].toString());
- return networkManager.ip4_setManualConfiguration(result["ifname"].toString(),
+ qDebug() << result["ifname"].toString();
+ qDebug() << result["ipaddr"].toString();
+ qDebug() << result["netmask"].toString();
+ qDebug() << result["broadcast"].toString();
+ qDebug() << result["gateway"].toString();
+ qDebug() << dns;
+
+
+ networkManager.ip4_setManualConfiguration(result["ifname"].toString(),
result["ipaddr"].toString(),
result["netmask"].toString(),
result["broadcast"].toString(),
@@ -108,6 +114,30 @@ int NetworkDiscovery::ip4_setManualConfiguration(QVariantMap result) {
true,
"/etc/",
dns);
+
+ qDebug() << "set man conf. test connectivity";
+
+ if (!checkConnectivityViaTcp(QString("74.125.39.99"))) {
+ qDebug() << "no connectivity. reset conf.";
+ interfaceconfiguration * ifc = _ifcMap.value(result["ifname"].toString(), NULL);
+ if(ifc != NULL) {
+ QList<QString> dns = ifc->getDnsservers().trimmed().split(" ");
+ networkManager.ip4_setManualConfiguration(result["ifname"].toString(),
+ ifc->getIpAddress(),
+ ifc->getNetmask(),
+ ifc->getBroadcast(),
+ ifc->getGateway(),
+ 0,
+ AF_INET,
+ true,
+ "/etc/",
+ dns);
+ }
+
+ return 0;
+ }
+ emit continueBoot(result["ifname"].toString(), 0);
+ return 0;
}
QString NetworkDiscovery::getGatewayForInterface(QString ifName) {
@@ -231,20 +261,13 @@ bool NetworkDiscovery::checkConnectivity(QString ifName) {
_ifcMap.insert(ifName, ifConf);
// replace default route
- qDebug() << networkManager.replaceDefaultRoute(ifName, ifConf->getGateway(), 0, AF_INET);
+ qDebug() << networkManager.replaceDefaultRoute(ifName,
+ ifConf->getGateway(), 0, AF_INET);
- // check connectivity via tcp connection
- QTcpSocket *tcpSocket = new QTcpSocket(this);
- tcpSocket->connectToHost(QString("209.85.148.105"), 80);
- if (!tcpSocket->waitForConnected(500)) {
- qDebug() << "no internet connection with interface" << ifName;
- qDebug() << tcpSocket->errorString();
- emit
- updateStatusLabel(ifName, "connection not possible");
- return false;
- } else {
+ if (checkConnectivityViaTcp("209.85.148.105")) {
qDebug() << "internet: check passed! for interface" << ifName;
- emit updateStatusLabel(ifName, "connection possible");
+ emit
+ updateStatusLabel(ifName, "connection possible");
if (!_userChoice) {
// blockiere jeden weiteren check
// emite continueBoot
@@ -253,8 +276,24 @@ bool NetworkDiscovery::checkConnectivity(QString ifName) {
} else {
emit connectionEstablished(ifName);
}
- return true;
+ } else {
+ qDebug() << "no internet connection with interface" << ifName;
+ emit
+ updateStatusLabel(ifName, "connection not possible");
}
+
+}
+
+bool NetworkDiscovery::checkConnectivityViaTcp(QString server) {
+ // check connectivity via tcp connection
+ QTcpSocket *tcpSocket = new QTcpSocket(this);
+ tcpSocket->connectToHost(server, 80);
+ if (!tcpSocket->waitForConnected(500)) {
+ qDebug() << tcpSocket->errorString();
+ return false;
+ } else {
+ return true;
+ }
}
/**
diff --git a/LogReceiver/networkdiscovery.h b/LogReceiver/networkdiscovery.h
index 48a6a7e..5e79887 100644
--- a/LogReceiver/networkdiscovery.h
+++ b/LogReceiver/networkdiscovery.h
@@ -48,8 +48,9 @@ public:
QStringList* args = NULL);
int replaceDefaultRoute(QString &ifName, QString &gateway, int af, int mss);
int ip4_replaceDefaultRoute(QString ifName, QString gateway, int mss);
+ QString getGatewayForInterface(QString ifName);
+
int ip4_setManualConfiguration(QVariantMap result);
- QString getGatewayForInterface(QString);
private slots:
void handleNewConnection();
@@ -67,6 +68,7 @@ signals:
void updateStatusLabel(QString ifName, QString status);
void allProcessesFinished();
void continueBoot(QString ifName, int userChoice);
+ void setManualConfInterfaces(QString jsonArr);
private:
QLocalServer *server;
@@ -93,6 +95,7 @@ private:
QList<QString>checkCarrierState(QList<QString> &interfaces);
bool checkCarrierState(QString interface);
bool checkConnectivity(QString ifName);
+ bool checkConnectivityViaTcp(QString server);
QList<QString> getListOfNetworkInterfaces();
bool checkBlackList(QString i);
diff --git a/LogReceiver/networkmanager.cpp b/LogReceiver/networkmanager.cpp
index 1de0591..80aa8a1 100644
--- a/LogReceiver/networkmanager.cpp
+++ b/LogReceiver/networkmanager.cpp
@@ -147,6 +147,7 @@ int NetworkManager::bringInterfaceUpDown(QString ifname, bool up) {
int NetworkManager::ip4_setManualConfiguration(QString ifname, QString ipAddress, QString netmask,
QString broadcast, QString gateway, int metric, int af, bool up, QString pathToResolvConf, QList<QString> nameServer) {
+
//bring the interface up
bringInterfaceUpDown(ifname, up);
//set configuration
@@ -155,7 +156,7 @@ int NetworkManager::ip4_setManualConfiguration(QString ifname, QString ipAddress
replaceDefaultRoute(ifname, gateway, metric, af);
//write resolv.conf
writeResolvConf(pathToResolvConf, ifname, nameServer);
-
+ return 0;
}
int NetworkManager::ip4_configureInterface(QString ifname, QString ipAddress,
@@ -166,15 +167,15 @@ int NetworkManager::ip4_configureInterface(QString ifname, QString ipAddress,
struct nl_addr * local;
struct rtnl_addr * addr = NULL;
int retval = 0;
- int iface_idx, err;
+ int iface_idx, err, prefixLength;
- QByteArray ba_ifn = ifname.toAscii();
+ QByteArray ba_ifn = ifname.trimmed().toAscii();
char * ifn = ba_ifn.data();
- QByteArray ba_ip = ipAddress.toAscii();
+ QByteArray ba_ip = ipAddress.trimmed().toAscii();
char * ipaddr = ba_ip.data();
- QByteArray ba_bc = broadcast.toAscii();
+ QByteArray ba_bc = broadcast.trimmed().toAscii();
char * bcaddr = ba_bc.data();
rtsock = nl_handle_alloc();
@@ -199,7 +200,9 @@ int NetworkManager::ip4_configureInterface(QString ifname, QString ipAddress,
qDebug() << "error with set local addr";
}
- rtnl_addr_set_prefixlen(addr, ip4_netmaskToPrefix(netmask));
+ prefixLength = ip4_netmaskToPrefix(ipAddress,netmask);
+ qDebug() << "prefix length:" << prefixLength;
+ rtnl_addr_set_prefixlen(addr, prefixLength);
local = nl_addr_parse(bcaddr, af);
err = rtnl_addr_set_broadcast(addr, local);
@@ -210,7 +213,8 @@ int NetworkManager::ip4_configureInterface(QString ifname, QString ipAddress,
rtnl_addr_set_ifindex(addr, iface_idx);
- retval = sync_address(ifn, iface_idx, af, addr, 1);
+
+ retval = sync_address(ifn, iface_idx, af, addr);
if(retval < 0) {
qDebug() << "error in sync_address";
}
@@ -219,7 +223,7 @@ int NetworkManager::ip4_configureInterface(QString ifname, QString ipAddress,
return retval;
}
-int NetworkManager::ip4_netmaskToPrefix(QString netmask) {
+int NetworkManager::ip4_netmaskToPrefix(QString ipAddr, QString netmask) {
int retval = -1;
QNetworkAddressEntry nae;
@@ -227,8 +231,8 @@ int NetworkManager::ip4_netmaskToPrefix(QString netmask) {
qDebug() << "error: netmask is empty";
return retval;
}
-
- nae.setNetmask(QHostAddress(netmask));
+ nae.setIp(QHostAddress(ipAddr));
+ nae.setNetmask(QHostAddress(netmask.trimmed()));
retval = nae.prefixLength();
return retval;
@@ -241,7 +245,7 @@ int NetworkManager::ip4_netmaskToPrefix(QString netmask) {
* -1 if something went wrong. else 0
*/
int NetworkManager::sync_address(const char *iface, int ifindex, int family,
- struct rtnl_addr *addr, int num_addrs) {
+ struct rtnl_addr *addr) {
struct nl_handle *nlh;
struct nl_cache *addr_cache;
@@ -352,6 +356,7 @@ int NetworkManager::sync_address(const char *iface, int ifindex, int family,
if (buf_valid == 0) {
//nm_log_dbg (log_domain, "(%s): adding address '%s/%d'",
//iface, buf, nl_addr_get_prefixlen (nladdr));
+ qDebug() << "buf valid adding addr";
}
err = rtnl_addr_add(nlh, addr, 0);
@@ -359,7 +364,7 @@ int NetworkManager::sync_address(const char *iface, int ifindex, int family,
//nm_log_err (log_domain,
// "(%s): error %d returned from rtnl_addr_add():\n%s",
// iface, err, nl_geterror ());
- qDebug() << "error with add addr";
+ qDebug() << "error with add addr"<< strerror(-err);
}
rtnl_addr_put(addr);
diff --git a/LogReceiver/networkmanager.h b/LogReceiver/networkmanager.h
index 9834d28..1191ced 100644
--- a/LogReceiver/networkmanager.h
+++ b/LogReceiver/networkmanager.h
@@ -37,14 +37,16 @@ public:
int ip4_setManualConfiguration(QString ifname, QString ipAddress, QString netmask,
QString broadcast, QString gateway, int metric, int af, bool up, QString pathToResolvConf, QList<QString> nameServer);
+ int ip4_configureInterface(QString ifname, QString ipAddress,
+ QString broadcast, QString netmask, int af);
+ int writeResolvConf(QString path, QString ifname, QList<QString> nameServer);
private:
- int ip4_netmaskToPrefix(QString netmask);
- int ip4_configureInterface(QString ifname, QString ipAddress,
- QString broadcast, QString netmask, int af);
+ int ip4_netmaskToPrefix(QString ipAddr, QString netmask);
+
int sync_address(const char *iface, int ifindex, int family,
- struct rtnl_addr *addr, int num_addrs);
- int writeResolvConf(QString path, QString ifname, QList<QString> nameServer);
+ struct rtnl_addr *addr);
+
};