@@ -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
158167NetworkManager = 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
226241class 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
284299class 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+
287311class 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
309333class 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
0 commit comments