diff options
author | Kari Oikarinen <kari.oikarinen@qt.io> | 2016-09-19 11:21:26 +0300 |
---|---|---|
committer | Kari Oikarinen <kari.oikarinen@qt.io> | 2016-10-18 12:36:55 +0000 |
commit | bf3d39023b4cbeb20095ff2c84127ce824c2979e (patch) | |
tree | 6a83d377f090c1be7fe451bb9603bfcec4bdc3ee | |
parent | 1a8ff526eb750c6629c03c694c07be8d0bebffe2 (diff) |
Fetch device IP address on the USB NIC
Device IP address is needed by the host for connecting the device with
SSH.
The interface name for the USB gadget network is fetched from configfs
using a hard-coded path that the current development script uses. The
IPv4 address on that interface is then determined.
When there is no IPv4 address (yet) on the interface, an empty string is
returned.
Task-number: QTBUG-55435
Change-Id: Ia16daa89d1b28a7f13ec2d8e8fe2131ff5a48c2b
Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
-rw-r--r-- | client/handshakeservice.cpp | 5 | ||||
-rw-r--r-- | client/handshakeservice.h | 2 | ||||
-rw-r--r-- | client/main.cpp | 6 | ||||
-rw-r--r-- | qdbd/handshakeexecutor.cpp | 28 | ||||
-rw-r--r-- | qdbd/qdbd.pro | 2 |
5 files changed, 35 insertions, 8 deletions
diff --git a/client/handshakeservice.cpp b/client/handshakeservice.cpp index a592a75..85498e9 100644 --- a/client/handshakeservice.cpp +++ b/client/handshakeservice.cpp @@ -70,7 +70,8 @@ void HandshakeService::receive(StreamPacket packet) { QString serial; QString macAddress; - packet >> serial >> macAddress; + QString deviceIpAddress; + packet >> serial >> macAddress >> deviceIpAddress; - emit response(serial, macAddress); + emit response(serial, macAddress, deviceIpAddress); } diff --git a/client/handshakeservice.h b/client/handshakeservice.h index 2800b74..e784aa7 100644 --- a/client/handshakeservice.h +++ b/client/handshakeservice.h @@ -40,7 +40,7 @@ public: void ask(); void close(); signals: - void response(QString serial, QString macAddress); + void response(QString serial, QString macAddress, QString ipAddress); public slots: void receive(StreamPacket packet) override; diff --git a/client/main.cpp b/client/main.cpp index 91ab3e6..e749be1 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -143,9 +143,10 @@ void setupNetworkConfiguration(Connection *connection) QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, service, &QObject::deleteLater); QObject::connect(service, &HandshakeService::response, - [](QString serial, QString mac) { + [](QString serial, QString mac, QString ip) { qDebug() << "Device serial:" << serial; qDebug() << "Host-side MAC address:" << mac; + qDebug() << "Device IP address:" << ip; configureUsbNetwork(serial, mac); QCoreApplication::quit(); }); @@ -163,9 +164,10 @@ void setupHandshakeService(Connection *connection) QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, service, &QObject::deleteLater); QObject::connect(service, &HandshakeService::response, - [](QString serial, QString mac) { + [](QString serial, QString mac, QString ip) { qDebug() << "Device serial:" << serial; qDebug() << "Host-side MAC address:" << mac; + qDebug() << "Device IP address:" << ip; QCoreApplication::quit(); }); QObject::connect(service, &Service::initialized, [=]() { diff --git a/qdbd/handshakeexecutor.cpp b/qdbd/handshakeexecutor.cpp index 0ca9ec8..b5dc9cb 100644 --- a/qdbd/handshakeexecutor.cpp +++ b/qdbd/handshakeexecutor.cpp @@ -24,10 +24,33 @@ #include <QtCore/qdebug.h> #include <QtCore/qfile.h> +#include <QtNetwork/qnetworkinterface.h> + +const QString gadgetConfigFsPath = "/sys/kernel/config/usb_gadget/g1/"; + +QString deviceIpAddress() +{ + QFile file{gadgetConfigFsPath + "functions/rndis.usb0/ifname"}; + if (!file.open(QIODevice::ReadOnly)) + return ""; + + const auto interfaceName = QString{file.readAll()}.trimmed(); + const auto interface = QNetworkInterface::interfaceFromName(interfaceName); + const auto addressEntries = interface.addressEntries(); + + for (const auto &entry : addressEntries) { + const auto ip = entry.ip(); + if (ip.protocol() == QAbstractSocket::IPv4Protocol) { + qDebug() << "Device IP address:" << ip.toString(); + return ip.toString(); + } + } + return ""; +} QString deviceSerial() { - QFile file{"/sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber"}; + QFile file{gadgetConfigFsPath + "strings/0x409/serialnumber"}; if (!file.open(QIODevice::ReadOnly)) return ""; return QString{file.readAll()}.trimmed(); @@ -35,7 +58,7 @@ QString deviceSerial() QString hostSideMac() { - QFile file{"/sys/kernel/config/usb_gadget/g1/functions/rndis.usb0/host_addr"}; + QFile file{gadgetConfigFsPath + "functions/rndis.usb0/host_addr"}; if (!file.open(QIODevice::ReadOnly)) return ""; return QString{file.readAll()}.trimmed(); @@ -56,5 +79,6 @@ void HandshakeExecutor::receive(StreamPacket packet) StreamPacket response; response << deviceSerial(); response << hostSideMac(); + response << deviceIpAddress(); m_stream->write(response); } diff --git a/qdbd/qdbd.pro b/qdbd/qdbd.pro index d92e05e..76ec5df 100644 --- a/qdbd/qdbd.pro +++ b/qdbd/qdbd.pro @@ -1,4 +1,4 @@ -QT += core +QT += core network QT -= gui CONFIG += c++11 |