2
Copyright 2008 Will Stephenson <wstephenson@kde.org>
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License as
6
published by the Free Software Foundation; either version 2 of
7
the License or (at your option) version 3 or any later version
8
accepted by the membership of KDE e.V. (or its successor approved
9
by the membership of KDE e.V.), which shall act as a proxy
10
defined in Section 14 of version 3 of the license.
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with this program. If not, see <http://www.gnu.org/licenses/>.
21
#include "networkinterface.h"
22
#include "networkinterface_p.h"
24
#include <arpa/inet.h>
28
#include "dbus/nm-ip4-configinterface.h"
30
#include "networkmanagerdefinitions.h"
32
// lifted from libnm-glib/nm-device.h, remove when our NM packages have this version
33
#define NM_DEVICE_UDI "udi"
34
#define NM_DEVICE_INTERFACE "interface"
35
#define NM_DEVICE_DRIVER "driver"
36
#define NM_DEVICE_CAPABILITIES "capabilities"
37
#define NM_DEVICE_MANAGED "managed"
38
#define NM_DEVICE_IP4_CONFIG "ip4-config"
39
#define NM_DEVICE_STATE "state"
40
#define NM_DEVICE_VENDOR "vendor"
41
#define NM_DEVICE_PRODUCT "product"
43
NMNetworkInterfacePrivate::NMNetworkInterfacePrivate( const QString & path, QObject * owner ) : deviceIface(NMNetworkManager::DBUS_SERVICE, path, QDBusConnection::systemBus()), uni(path), designSpeed(0), manager(0)/*, propHelper(owner)*/
46
//isLinkUp = deviceIface.isLinkUp();
47
driver = deviceIface.driver();
48
interfaceName = deviceIface.interface();
49
ipV4Address = deviceIface.ip4Address();
50
managed = deviceIface.managed();
51
udi = deviceIface.udi();
52
firmwareMissing = deviceIface.firmwareMissing();
54
//TODO set active connections based on active connection list on the manager; find out if
56
//activeConnection = deviceIface.activeConnection();
57
//propHelper.registerProperty(NM_DEVICE_UDI, PropertySignalPair("uni",0));
60
NMNetworkInterfacePrivate::~NMNetworkInterfacePrivate()
65
NMNetworkInterface::NMNetworkInterface(const QString & path, NMNetworkManager * manager, QObject * parent) : QObject(parent), d_ptr(new NMNetworkInterfacePrivate(path, this))
67
Q_D(NMNetworkInterface);
72
NMNetworkInterface::NMNetworkInterface(NMNetworkInterfacePrivate & dd, NMNetworkManager * manager, QObject * parent) : QObject(parent), d_ptr(&dd)
74
qDBusRegisterMetaType<UIntList>();
75
qDBusRegisterMetaType<UIntListList>();
76
Q_D(NMNetworkInterface);
81
void NMNetworkInterface::init()
83
Q_D(NMNetworkInterface);
84
d->capabilities = convertCapabilities(d->deviceIface.capabilities());
85
d->connectionState = convertState(d->deviceIface.state());
87
connect(&d->deviceIface, SIGNAL(StateChanged(uint,uint,uint)), this, SLOT(stateChanged(uint,uint,uint)));
90
NMNetworkInterface::~NMNetworkInterface()
95
QString NMNetworkInterface::uni() const
97
Q_D(const NMNetworkInterface);
101
void NMNetworkInterface::setUni(const QVariant & uni)
103
Q_D(NMNetworkInterface);
104
d->uni = uni.toString();
107
QString NMNetworkInterface::interfaceName() const
109
Q_D(const NMNetworkInterface);
110
return d->interfaceName;
113
void NMNetworkInterface::setInterfaceName(const QVariant & name)
115
Q_D(NMNetworkInterface);
116
d->interfaceName = name.toString();
119
QString NMNetworkInterface::ipInterfaceName() const
121
Q_D(const NMNetworkInterface);
122
return d->deviceIface.ipInterface();
125
QString NMNetworkInterface::driver() const
127
Q_D(const NMNetworkInterface);
131
bool NMNetworkInterface::firmwareMissing() const
133
Q_D(const NMNetworkInterface);
134
return d->firmwareMissing;
137
void NMNetworkInterface::setDriver(const QVariant & driver)
139
Q_D(NMNetworkInterface);
140
d->driver = driver.toString();
143
QString NMNetworkInterface::udi() const
145
Q_D(const NMNetworkInterface);
149
int NMNetworkInterface::ipV4Address() const
151
Q_D(const NMNetworkInterface);
152
return d->ipV4Address;
155
Solid::Control::IPv4Config NMNetworkInterface::ipV4Config() const
157
Q_D(const NMNetworkInterface);
158
if (d->connectionState != Solid::Control::NetworkInterface::Activated) {
159
return Solid::Control::IPv4Config();
161
// ask the daemon for the details
162
QDBusObjectPath ipV4ConfigPath = d->deviceIface.ip4Config();
163
OrgFreedesktopNetworkManagerIP4ConfigInterface iface(NMNetworkManager::DBUS_SERVICE, ipV4ConfigPath.path(), QDBusConnection::systemBus());
164
if (iface.isValid()) {
165
//convert ipaddresses into object
166
UIntListList addresses = iface.addresses();
167
QList<Solid::Control::IPv4Address> addressObjects;
168
foreach (UIntList addressList, addresses) {
169
if ( addressList.count() == 3 ) {
170
Solid::Control::IPv4Address addr(htonl(addressList[0]), addressList[1], htonl(addressList[2]));
171
addressObjects.append(addr);
174
//convert routes into objects
175
UIntListList routes = iface.routes();
176
QList<Solid::Control::IPv4Route> routeObjects;
177
foreach (UIntList routeList, routes) {
178
if ( routeList.count() == 4 ) {
179
Solid::Control::IPv4Route addr(routeList[0], routeList[1], routeList[2], routeList[3]);
180
routeObjects.append(addr);
183
// nameservers' IP addresses are always in network byte order
184
return Solid::Control::IPv4Config(addressObjects,
185
iface.nameservers(), iface.domains(),
188
return Solid::Control::IPv4Config();
193
bool NMNetworkInterface::isActive() const
195
Q_D(const NMNetworkInterface);
196
return !(d->connectionState == Solid::Control::NetworkInterface::Unavailable
197
|| d->connectionState == Solid::Control::NetworkInterface::Disconnected
198
|| d->connectionState == Solid::Control::NetworkInterface::Failed );
201
bool NMNetworkInterface::managed() const
203
Q_D(const NMNetworkInterface);
207
void NMNetworkInterface::disconnectInterface()
209
Q_D(NMNetworkInterface);
210
d->deviceIface.Disconnect();
213
void NMNetworkInterface::setManaged(const QVariant & driver)
215
Q_D(NMNetworkInterface);
216
d->driver = driver.toBool();
219
Solid::Control::NetworkInterface::ConnectionState NMNetworkInterface::connectionState() const
221
Q_D(const NMNetworkInterface);
222
return d->connectionState;
225
void NMNetworkInterface::setConnectionState(const QVariant & state)
227
Q_D(NMNetworkInterface);
228
d->connectionState = convertState(state.toUInt());
231
int NMNetworkInterface::designSpeed() const
233
Q_D(const NMNetworkInterface);
234
return d->designSpeed;
237
bool NMNetworkInterface::isLinkUp() const
239
Q_D(const NMNetworkInterface);
243
Solid::Control::NetworkInterface::Capabilities NMNetworkInterface::capabilities() const
245
Q_D(const NMNetworkInterface);
246
return d->capabilities;
249
QVariant NMNetworkInterface::capabilitiesV() const
251
Q_D(const NMNetworkInterface);
252
return QVariant(d->capabilities);
255
void NMNetworkInterface::setCapabilitiesV(const QVariant & caps)
257
Q_D(NMNetworkInterface);
258
d->capabilities = convertCapabilities(caps.toUInt());
261
Solid::Control::NetworkInterface::Capabilities NMNetworkInterface::convertCapabilities(uint theirCaps)
263
Solid::Control::NetworkInterface::Capabilities ourCaps
264
= (Solid::Control::NetworkInterface::Capabilities) theirCaps;
268
Solid::Control::NetworkInterface::ConnectionState NMNetworkInterface::convertState(uint theirState)
270
Solid::Control::NetworkInterface::ConnectionState ourState = (Solid::Control::NetworkInterface::ConnectionState)theirState;
274
void NMNetworkInterface::stateChanged(uint new_state, uint old_state, uint reason)
276
Q_D(NMNetworkInterface);
277
d->connectionState = convertState(new_state);
278
emit connectionStateChanged(d->connectionState, convertState(old_state), reason);
281
#include "networkinterface.moc"