diff --git a/server/drone.pro b/server/drone.pro
index 4aa591d..484bdd5 100644
--- a/server/drone.pro
+++ b/server/drone.pro
@@ -59,6 +59,7 @@ SOURCES += \
bsdport.cpp \
linuxhostdevice.cpp \
linuxport.cpp \
+ linuxutils.cpp \
params.cpp \
winhostdevice.cpp \
winpcapport.cpp
diff --git a/server/linuxport.cpp b/server/linuxport.cpp
index c4f25fb..3da8c56 100644
--- a/server/linuxport.cpp
+++ b/server/linuxport.cpp
@@ -20,6 +20,7 @@ along with this program. If not, see
#include "linuxport.h"
#include "interfaceinfo.h"
+#include "linuxutils.h"
#ifdef Q_OS_LINUX
@@ -243,11 +244,13 @@ void LinuxPort::populateInterfaceInfo()
return;
}
+ interfaceInfo_ = new InterfaceInfo;
+ interfaceInfo_->speed = sysfsAttrib(name(), "speed").toDouble();
+ interfaceInfo_->mtu = rtnl_link_get_mtu(link);
+
int ifIndex = rtnl_link_get_ifindex(link);
rtnl_link_put(link);
- interfaceInfo_ = new InterfaceInfo;
- // FIXME: speed, mtu
interfaceInfo_->mac = mac;
//
diff --git a/server/linuxutils.cpp b/server/linuxutils.cpp
new file mode 100644
index 0000000..38a8bfb
--- /dev/null
+++ b/server/linuxutils.cpp
@@ -0,0 +1,65 @@
+/*
+Copyright (C) 2021 Srivats P.
+
+This file is part of "Ostinato"
+
+This is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see
+*/
+
+#include "linuxutils.h"
+
+#include
+#include
+
+// Reads a text file (size < 4K) and returns content as a string
+// A terminating \n will be removed
+// There's no way to distinguish an empty file and error while reading
+QString readTextFile(QString fileName)
+{
+ QFile file(fileName);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qWarning("Can't read %s", qUtf8Printable(fileName));
+ return QString();
+ }
+
+ if (file.size() > 4096) {
+ qWarning("Can't read %s - too large (%lld)",
+ qUtf8Printable(fileName), file.size());
+ return QString();
+ }
+
+ QTextStream in(&file);
+ QString text = in.readAll();
+ file.close();
+
+ if (text.endsWith('\n'))
+ text.chop(1);
+
+ return text;
+}
+
+// Reads value from /sys/class/net//
+// and returns as string
+// XXX: reading from sysfs is discouraged
+QString sysfsAttrib(const char *device, const char *attribPath)
+{
+ return readTextFile(QString("/sys/class/net/%1/%2")
+ .arg(device).arg(attribPath));
+}
+
+// Convenience overload
+QString sysfsAttrib(QString device, const char *attribPath)
+{
+ return sysfsAttrib(qPrintable(device), attribPath);
+}
diff --git a/server/linuxutils.h b/server/linuxutils.h
new file mode 100644
index 0000000..7665a61
--- /dev/null
+++ b/server/linuxutils.h
@@ -0,0 +1,29 @@
+/*
+Copyright (C) 2021 Srivats P.
+
+This file is part of "Ostinato"
+
+This is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see
+*/
+
+#ifndef _LINUX_UTILS_H
+#define _LINUX_UTILS_H
+
+#include
+
+QString readTextFile(QString fileName);
+QString sysfsAttrib(const char *device, const char *attribPath);
+QString sysfsAttrib(QString device, const char *attribPath);
+
+#endif