1
// This file is generated by kconfig_compiler from ipv6.kcfg.
2
// All changes you do to this file will be lost.
7
#include "../../types.h"
10
Ipv6Dbus::Ipv6Dbus(Knm::Ipv6Setting * setting) : SettingDbus(setting)
18
void Ipv6Dbus::fromMap(const QVariantMap & map)
20
kDebug() << "IPv6 map: ";
21
foreach(const QString &key, map.keys())
22
kDebug() << key << " : " << map.value(key);
24
Knm::Ipv6Setting * setting = static_cast<Knm::Ipv6Setting*>(m_setting);
26
if (map.contains("method")) {
27
setting->setMethod(methodStringToEnum(map.value("method").value<QString>())); }
29
if (map.contains("dns")) {
30
QDBusArgument dnsArg = map.value("dns").value< QDBusArgument>();
31
QList<QHostAddress> dbusDns;
34
while(!dnsArg.atEnd())
39
for (int i = 0; i < 16; i++)
43
QHostAddress tmpHost(tmp);
46
//NO dnsArg.endArray(); it's fatal in debug builds.
48
setting->setDns(dbusDns);
51
if (map.contains(QLatin1String(NM_SETTING_IP6_CONFIG_DNS_SEARCH)) &&
52
!map.value(QLatin1String(NM_SETTING_IP6_CONFIG_DNS_SEARCH)).value<QStringList>().isEmpty()
54
setting->setDnssearch(map.value(QLatin1String(NM_SETTING_IP6_CONFIG_DNS_SEARCH)).value<QStringList>());
57
if (map.contains("addresses")) {
58
QDBusArgument addressArg = map.value("addresses").value< QDBusArgument>();
59
QList<Solid::Control::IPv6Address> addresses;
61
addressArg.beginArray();
62
while(!addressArg.atEnd())
64
IpV6AddressMap addressMap;
65
addressArg >> addressMap;
67
if (addressMap.address.isEmpty() || !addressMap.netMask || addressMap.gateway.isEmpty())
69
kWarning() << "Invalid address format detected.";
72
Q_IPV6ADDR ip, gateway;
73
for (int i = 0; i < 16; i++)
75
ip[i] = addressMap.address[i];
77
for (int i = 0; i < 16; i++)
79
gateway[i] = addressMap.gateway[i];
82
Solid::Control::IPv6Address addr(ip, addressMap.netMask, gateway);
85
kWarning() << "Invalid address format detected.";
91
//NO addressArg.endArray(); it's fatal in debug builds.
93
setting->setAddresses(addresses);
96
if (map.contains("routes"))
98
QDBusArgument routeArg = map.value("routes").value< QDBusArgument>();
99
QList<Solid::Control::IPv6Route> routes;
101
routeArg.beginArray();
102
while(!routeArg.atEnd())
104
IpV6RouteMap routeMap;
105
routeArg >> routeMap;
107
if (routeMap.route.isEmpty() || !routeMap.prefix || routeMap.nextHop.isEmpty() || !routeMap.metric)
109
kWarning() << "Invalid route format detected.";
112
Q_IPV6ADDR addr, nexthop;
113
for (int i = 0; i < 16; i++)
115
addr[i] = routeMap.route[i];
117
for (int i = 0; i < 16; i++)
119
nexthop[i] = routeMap.nextHop[i];
122
Solid::Control::IPv6Route route(addr, routeMap.prefix, nexthop, routeMap.metric);
123
if (!route.isValid())
125
kWarning() << "Invalid route format detected.";
131
setting->setRoutes(routes);
134
if (map.contains(QLatin1String(NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS))) {
135
setting->setIgnoredhcpdns(map.value(QLatin1String(NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS)).value<bool>());
137
if (map.contains(QLatin1String(NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES))) {
138
setting->setIgnoreautoroute(map.value(QLatin1String(NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES)).value<bool>());
140
if (map.contains(QLatin1String(NM_SETTING_IP6_CONFIG_NEVER_DEFAULT))) {
141
setting->setNeverdefault(map.value(QLatin1String(NM_SETTING_IP6_CONFIG_NEVER_DEFAULT)).value<bool>());
143
if (map.contains(QLatin1String(NM_SETTING_IP6_CONFIG_MAY_FAIL))) {
144
setting->setMayfail(map.value(QLatin1String(NM_SETTING_IP6_CONFIG_MAY_FAIL)).value<bool>());
148
Knm::Ipv6Setting::EnumMethod::type Ipv6Dbus::methodStringToEnum(QString method)
150
if (method.toLower() == "automatic" || method.toLower() == "auto")
151
return Knm::Ipv6Setting::EnumMethod::Automatic;
152
else if (method.toLower() == "linklocal" || method.toLower() == "link-local")
153
return Knm::Ipv6Setting::EnumMethod::LinkLocal;
154
else if (method.toLower() == "manual")
155
return Knm::Ipv6Setting::EnumMethod::Manual;
156
else if (method.toLower() == "shared")
157
return Knm::Ipv6Setting::EnumMethod::Shared;
158
else if (method.toLower() == "ignore")
159
return Knm::Ipv6Setting::EnumMethod::Ignore;
162
kDebug() << "Unknown method given:" << method;
163
return Knm::Ipv6Setting::EnumMethod::Automatic;
167
QVariantMap Ipv6Dbus::toMap()
170
Knm::Ipv6Setting * setting = static_cast<Knm::Ipv6Setting *>(m_setting);
171
switch (setting->method()) {
172
case Knm::Ipv6Setting::EnumMethod::Automatic:
173
map.insert("method", "auto");
175
case Knm::Ipv6Setting::EnumMethod::LinkLocal:
176
map.insert("method", "link-local");
178
case Knm::Ipv6Setting::EnumMethod::Manual:
179
map.insert("method", "manual");
181
case Knm::Ipv6Setting::EnumMethod::Shared:
182
map.insert("method", "shared");
184
case Knm::Ipv6Setting::EnumMethod::Ignore:
185
map.insert("method", "ignore");
189
if (!setting->dns().isEmpty()) {
190
QList<QByteArray> dbusDns;
191
foreach (const QHostAddress &dns, setting->dns()) {
192
Q_IPV6ADDR dnsAddress = dns.toIPv6Address();
193
QByteArray assembledDnsAddress;
194
for (int i = 0; i <16; i++)
196
assembledDnsAddress[i] = dnsAddress[i];
199
dbusDns << assembledDnsAddress;
201
map.insert("dns", QVariant::fromValue(dbusDns));
204
if (!setting->dnssearch().isEmpty()) {
205
map.insert(QLatin1String(NM_SETTING_IP6_CONFIG_DNS_SEARCH), setting->dnssearch());
207
if (!setting->addresses().isEmpty()) {
208
QList<IpV6AddressMap> dbusAddresses;
209
foreach (const Solid::Control::IPv6Address &addr, setting->addresses()) {
210
IpV6AddressMap dbusAddress;
211
Q_IPV6ADDR address = addr.address();
212
QList<quint8> assembledAddress;
213
for (int i = 0; i < 16; i++)
215
assembledAddress << address[i];
218
Q_IPV6ADDR gateway = addr.gateway();
219
QList<quint8> assembledGateway;
220
for (int i = 0; i < 16; i++)
222
assembledGateway << gateway[i];
225
dbusAddress.address = assembledAddress;
226
dbusAddress.netMask = addr.netMask();
227
dbusAddress.gateway = assembledGateway;
228
dbusAddresses << dbusAddress;
230
map.insert("addresses", QVariant::fromValue(dbusAddresses));
232
if (!setting->routes().isEmpty()) {
233
QList<IpV6RouteMap> dbusRoutes;
234
foreach (const Solid::Control::IPv6Route &route, setting->routes()) {
235
IpV6RouteMap dbusRoute;
237
Q_IPV6ADDR Route = route.route();
238
QList<quint8> assembledRoute;
239
for (int i = 0; i < 16; i++)
241
assembledRoute << Route[i];
244
Q_IPV6ADDR nextHop = route.nextHop();
245
QList<quint8> assembledNextHop;
246
for (int i = 0; i < 16; i++)
248
assembledNextHop << nextHop[i];
251
dbusRoute.route = assembledRoute;
252
dbusRoute.prefix = route.prefix();
253
dbusRoute.nextHop = assembledNextHop;
254
dbusRoute.metric = route.metric();
255
dbusRoutes << dbusRoute;
258
map.insert("routes", QVariant::fromValue(dbusRoutes));
262
insertIfTrue(map, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, setting->ignoredhcpdns());
263
insertIfTrue(map, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, setting->ignoreautoroute());
264
insertIfTrue(map, NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, setting->neverdefault());
265
insertIfTrue(map, NM_SETTING_IP6_CONFIG_MAY_FAIL, setting->mayfail());
269
QVariantMap Ipv6Dbus::toSecretsMap()
275
QDBusArgument &operator<<(QDBusArgument &argument, const IpV6AddressMap &map)
277
argument.beginStructure();
278
argument << map.address << map.netMask << map.gateway;
279
argument.endStructure();
283
const QDBusArgument &operator>>(const QDBusArgument &argument, IpV6AddressMap &map)
285
argument.beginStructure();
286
argument >> map.address >> map.netMask >> map.gateway;
287
argument.endStructure();
291
QDBusArgument &operator<<(QDBusArgument &argument, const IpV6RouteMap &map)
293
argument.beginStructure();
294
argument << map.route << map.prefix << map.nextHop << map.metric;
295
argument.endStructure();
299
const QDBusArgument &operator>>(const QDBusArgument &argument, IpV6RouteMap &map)
301
argument.beginStructure();
302
argument >> map.route >> map.prefix >> map.nextHop >> map.metric;
303
argument.endStructure();