From a8087a7c1b83ae7770f2b1c278d0eb5318b7e33e Mon Sep 17 00:00:00 2001 From: Niklas Date: Wed, 28 Sep 2011 17:44:42 +0200 Subject: added a select field to the manual conf gui. also fixed some bugs in the ip4_manualConf function --- LogReceiver/html/networkdiscovery.html | 50 ++++++++++++++------- LogReceiver/ndgui.cpp | 39 ++++++++++++++-- LogReceiver/ndgui.h | 20 ++++++--- LogReceiver/networkdiscovery.cpp | 81 +++++++++++++++++++++++++--------- LogReceiver/networkdiscovery.h | 5 ++- LogReceiver/networkmanager.cpp | 29 +++++++----- LogReceiver/networkmanager.h | 12 ++--- 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 = ""; + $("#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){

All form fields are required.

- - + + 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 #include -#include -#include -#include -#include +#include #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 _ifNameList; // maps interfaceName to its gateway + QList _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 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 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: QListcheckCarrierState(QList &interfaces); bool checkCarrierState(QString interface); bool checkConnectivity(QString ifName); + bool checkConnectivityViaTcp(QString server); QList 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 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 nameServer); + int ip4_configureInterface(QString ifname, QString ipAddress, + QString broadcast, QString netmask, int af); + int writeResolvConf(QString path, QString ifname, QList 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 nameServer); + struct rtnl_addr *addr); + }; -- cgit v1.2.3-55-g7522