File indexing completed on 2024-05-12 17:00:16
0001 /* 0002 * SPDX-FileCopyrightText: 2020 David Redondo <kde@david-redondo.de> 0003 * SPDX-FileCopyrightText: 2021 Alessio Bonfiglio <alessio.bonfiglio@mail.polimi.it> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0006 */ 0007 0008 #pragma once 0009 0010 #include "NetworkBackend.h" 0011 #include "NetworkDevice.h" 0012 0013 #include <QElapsedTimer> 0014 0015 #include <netlink/cache.h> 0016 #include <netlink/socket.h> 0017 0018 struct rtnl_addr; 0019 struct rtnl_link; 0020 0021 class RtNetlinkDevice : public NetworkDevice 0022 { 0023 Q_OBJECT 0024 public: 0025 RtNetlinkDevice(const QString &id); 0026 void update(rtnl_link *link, nl_cache *address_cache, nl_cache *route_cache, qint64 elapsedTime); 0027 Q_SIGNALS: 0028 void connected(); 0029 void disconnected(); 0030 0031 private: 0032 bool m_connected = false; 0033 }; 0034 0035 class RtNetlinkBackend : public NetworkBackend 0036 { 0037 public: 0038 RtNetlinkBackend(QObject *parent); 0039 ~RtNetlinkBackend() override; 0040 bool isSupported() override; 0041 void start() override; 0042 void stop() override; 0043 void update() override; 0044 0045 private: 0046 QHash<QByteArray, RtNetlinkDevice *> m_devices; 0047 std::unique_ptr<nl_sock, decltype(&nl_socket_free)> m_socket; 0048 QElapsedTimer m_updateTimer; 0049 };