Skip to content

Commit 858f5ff

Browse files
ctcseveas
authored andcommitted
add ipv6 support
1 parent ae2941c commit 858f5ff

2 files changed

Lines changed: 72 additions & 33 deletions

File tree

NetworkManager.py

Lines changed: 71 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ def wrap(self, val):
9696
if hasattr(val, 'items'):
9797
return dict([(x, self.wrap(y)) for x, y in val.items()])
9898
else:
99+
if (isinstance(val, dbus.Struct) or isinstance(val, dbus.ByteArray)):
100+
return val
99101
return [self.wrap(x) for x in val]
100102
return val
101103

@@ -149,11 +151,18 @@ def preprocess(self, name, args, kwargs):
149151
settings['802-11-wireless']['ssid'] = fixups.ssid_to_dbus(settings['802-11-wireless']['ssid'])
150152
if 'ipv4' in settings:
151153
if 'addresses' in settings['ipv4']:
152-
settings['ipv4']['addresses'] = [fixups.addrconf_to_dbus(addr) for addr in settings['ipv4']['addresses']]
154+
settings['ipv4']['addresses'] = [fixups.addrconf_to_dbus(addr,socket.AF_INET) for addr in settings['ipv4']['addresses']]
153155
if 'routes' in settings['ipv4']:
154-
settings['ipv4']['routes'] = [fixups.route_to_dbus(route) for route in settings['ipv4']['routes']]
156+
settings['ipv4']['routes'] = [fixups.route_to_dbus(route,socket.AF_INET) for route in settings['ipv4']['routes']]
155157
if 'dns' in settings['ipv4']:
156-
settings['ipv4']['dns'] = [fixups.addr_to_dbus(addr) for addr in settings['ipv4']['dns']]
158+
settings['ipv4']['dns'] = [fixups.addr_to_dbus(addr,socket.AF_INET) for addr in settings['ipv4']['dns']]
159+
if 'ipv6' in settings:
160+
if 'addresses' in settings['ipv6']:
161+
settings['ipv6']['addresses'] = [fixups.addrconf_to_dbus(addr,socket.AF_INET6) for addr in settings['ipv6']['addresses']]
162+
if 'routes' in settings['ipv6']:
163+
settings['ipv6']['routes'] = [fixups.route_to_dbus(route,socket.AF_INET6) for route in settings['ipv6']['routes']]
164+
if 'dns' in settings['ipv6']:
165+
settings['ipv6']['dns'] = [fixups.addr_to_dbus(addr,socket.AF_INET6) for addr in settings['ipv6']['dns']]
157166
return args, kwargs
158167
NetworkManager = NetworkManager()
159168

@@ -191,9 +200,13 @@ def postprocess(self, name, val):
191200
if 'bssid' in val_:
192201
val_['bssid'] = fixups.mac_to_python(val_['bssid'])
193202
if 'ipv4' in val:
194-
val['ipv4']['addresses'] = [fixups.addrconf_to_python(addr) for addr in val['ipv4']['addresses']]
195-
val['ipv4']['routes'] = [fixups.route_to_python(route) for route in val['ipv4']['routes']]
196-
val['ipv4']['dns'] = [fixups.addr_to_python(addr) for addr in val['ipv4']['dns']]
203+
val['ipv4']['addresses'] = [fixups.addrconf_to_python(addr,socket.AF_INET) for addr in val['ipv4']['addresses']]
204+
val['ipv4']['routes'] = [fixups.route_to_python(route,socket.AF_INET) for route in val['ipv4']['routes']]
205+
val['ipv4']['dns'] = [fixups.addr_to_python(addr,socket.AF_INET) for addr in val['ipv4']['dns']]
206+
if 'ipv6' in val:
207+
val['ipv6']['addresses'] = [fixups.addrconf_to_python(addr,socket.AF_INET6) for addr in val['ipv6']['addresses']]
208+
val['ipv6']['routes'] = [fixups.route_to_python(route,socket.AF_INET6) for route in val['ipv6']['routes']]
209+
val['ipv6']['dns'] = [fixups.addr_to_python(addr,socket.AF_INET6) for addr in val['ipv6']['dns']]
197210
return val
198211
preprocess = NetworkManager.preprocess
199212

@@ -220,7 +233,9 @@ def SpecificDevice(self):
220233

221234
def postprocess(self, name, val):
222235
if name == 'Ip4Address':
223-
return fixups.addr_to_python(val)
236+
return fixups.addr_to_python(val,socket.AF_INET)
237+
if name == 'Ip6Address':
238+
return fixups.addr_to_python(val,socket.AF_INET6)
224239
return val
225240

226241
class AccessPoint(NMDbusInterface):
@@ -274,16 +289,25 @@ class IP4Config(NMDbusInterface):
274289

275290
def postprocess(self, name, val):
276291
if name == 'Addresses':
277-
return [fixups.addrconf_to_python(addr) for addr in val]
292+
return [fixups.addrconf_to_python(addr,socket.AF_INET) for addr in val]
278293
if name == 'Routes':
279-
return [fixups.route_to_python(route) for route in val]
294+
return [fixups.route_to_python(route,socket.AF_INET) for route in val]
280295
if name in ('Nameservers', 'WinsServers'):
281-
return [fixups.addr_to_python(addr) for addr in val]
296+
return [fixups.addr_to_python(addr,socket.AF_INET) for addr in val]
282297
return val
283298

284299
class IP6Config(NMDbusInterface):
285300
interface_name = 'org.freedesktop.NetworkManager.IP6Config'
286301

302+
def postprocess(self, name, val):
303+
if name == 'Addresses':
304+
return [fixups.addrconf_to_python(addr,socket.AF_INET6) for addr in val]
305+
if name == 'Routes':
306+
return [fixups.route_to_python(route,socket.AF_INET6) for route in val]
307+
if name in ('Nameservers', 'WinsServers'):
308+
return [fixups.addr_to_python(addr,socket.AF_INET6) for addr in val]
309+
return val
310+
287311
class DHCP4Config(NMDbusInterface):
288312
interface_name = 'org.freedesktop.NetworkManager.DHCP4Config'
289313

@@ -301,9 +325,9 @@ class VPNConnection(NMDbusInterface):
301325

302326
def preprocess(self, name, args, kwargs):
303327
conf = args[0]
304-
conf['addresses'] = [fixups.addrconf_to_python(addr) for addr in conf['addresses']]
305-
conf['routes'] = [fixups.route_to_python(route) for route in conf['routes']]
306-
conf['dns'] = [fixups.addr_to_python(addr) for addr in conf['dns']]
328+
conf['addresses'] = [fixups.addrconf_to_python(addr,socket.AF_INET) for addr in conf['addresses']]
329+
conf['routes'] = [fixups.route_to_python(route,socket.AF_INET) for route in conf['routes']]
330+
conf['dns'] = [fixups.addr_to_python(addr,socket.AF_INET) for addr in conf['dns']]
307331
return args, kwargs
308332

309333
class VPNPlugin(NMDbusInterface):
@@ -345,52 +369,67 @@ def mac_to_dbus(mac):
345369
return [dbus.Byte(int(x, 16)) for x in mac.split(':')]
346370

347371
@staticmethod
348-
def addrconf_to_python(addrconf):
372+
def addrconf_to_python(addrconf,family):
349373
addr, netmask, gateway = addrconf
350374
return [
351-
fixups.addr_to_python(addr),
375+
fixups.addr_to_python(addr,family),
352376
netmask,
353-
fixups.addr_to_python(gateway)
377+
fixups.addr_to_python(gateway,family)
354378
]
355379

356380
@staticmethod
357-
def addrconf_to_dbus(addrconf):
381+
def addrconf_to_dbus(addrconf,family):
358382
addr, netmask, gateway = addrconf
359-
return [
360-
fixups.addr_to_dbus(addr),
361-
fixups.mask_to_dbus(netmask),
362-
fixups.addr_to_dbus(gateway)
363-
]
383+
if (family == socket.AF_INET):
384+
return [
385+
fixups.addr_to_dbus(addr,family),
386+
fixups.mask_to_dbus(netmask),
387+
fixups.addr_to_dbus(gateway,family)
388+
]
389+
else:
390+
return dbus.Struct(
391+
(
392+
fixups.addr_to_dbus(addr,family),
393+
fixups.mask_to_dbus(netmask),
394+
fixups.addr_to_dbus(gateway,family)
395+
), signature = 'ayuay'
396+
)
364397

365398
@staticmethod
366-
def addr_to_python(addr):
367-
return socket.inet_ntoa(struct.pack('I', addr))
399+
def addr_to_python(addr,family):
400+
if (family == socket.AF_INET):
401+
return socket.inet_ntop(family,struct.pack('I', addr))
402+
else:
403+
return socket.inet_ntop(family,b''.join(addr))
368404

369405
@staticmethod
370-
def addr_to_dbus(addr):
371-
return dbus.UInt32(struct.unpack('I', socket.inet_aton(addr))[0])
406+
def addr_to_dbus(addr,family):
407+
if (family == socket.AF_INET):
408+
return dbus.UInt32(struct.unpack('I', socket.inet_pton(family,addr))[0])
409+
else:
410+
return dbus.ByteArray(socket.inet_pton(family,addr))
372411

373412
@staticmethod
374413
def mask_to_dbus(mask):
375414
return dbus.UInt32(mask)
376415

377416
@staticmethod
378-
def route_to_python(route):
417+
def route_to_python(route,family):
379418
addr, netmask, gateway, metric = route
380419
return [
381-
fixups.addr_to_python(addr),
420+
fixups.addr_to_python(addr,family),
382421
netmask,
383-
fixups.addr_to_python(gateway),
422+
fixups.addr_to_python(gateway,family),
384423
socket.ntohl(metric)
385424
]
386425

387426
@staticmethod
388-
def route_to_dbus(route):
427+
def route_to_dbus(route,family):
389428
addr, netmask, gateway, metric = route
390429
return [
391-
fixups.addr_to_dbus(addr),
430+
fixups.addr_to_dbus(addr,family),
392431
fixups.mask_to_dbus(netmask),
393-
fixups.addr_to_dbus(gateway),
432+
fixups.addr_to_dbus(gateway,family),
394433
socket.htonl(metric)
395434
]
396435

examples/connection_detail.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
if conn.Devices:
2121
devices = " (on %s)" % ", ".join([x.Interface for x in conn.Devices])
2222
print("Active connection: %s%s" % (settings['connection']['id'], devices))
23-
size = max([max([len(y) for y in x.keys()]) for x in settings.values()])
23+
size = max([max([len(y) for y in x.keys() + ['']]) for x in settings.values()])
2424
format = " %%-%ds %%s" % (size + 5)
2525
for key, val in sorted(settings.items()):
2626
print(" %s" % key)

0 commit comments

Comments
 (0)