[PATCH 1/5 rhel7-branch] Network spoke: fix refresh of device IP configuration (#1005681)
Radek Vykydal
rvykydal at redhat.com
Tue Sep 10 09:37:37 UTC 2013
master commit 612d6b94116b477a3c48a5a161a1164cc4a2e176
Register signal instead of silly polling which even doesn't work in some cases
(eg change ipv6 congig of a device to manual and switch it off and on -> only
ipv6 config is showed)
---
pyanaconda/ui/gui/spokes/network.py | 49 ++++++++++++++++---------------------
1 file changed, 21 insertions(+), 28 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/network.py b/pyanaconda/ui/gui/spokes/network.py
index 051310e..a05e1a2 100644
--- a/pyanaconda/ui/gui/spokes/network.py
+++ b/pyanaconda/ui/gui/spokes/network.py
@@ -338,6 +338,8 @@ class NetworkControlBox(object):
def initialize(self):
for device in self.client.get_devices():
+ device.connect("notify::ip4-config", self.on_device_config_changed)
+ device.connect("notify::ip6-config", self.on_device_config_changed)
self.add_device_to_list(device)
treeview = self.builder.get_object("treeview_devices")
@@ -393,9 +395,12 @@ class NetworkControlBox(object):
if new_state == NetworkManager.DeviceState.SECONDARIES:
return
self._refresh_carrier_info()
- read_config_values = (new_state == NetworkManager.DeviceState.ACTIVATED)
if device == self.selected_device():
- self.refresh_ui(device, read_config_values, new_state)
+ self.refresh_ui(device, new_state)
+
+ def on_device_config_changed(self, device, *args):
+ if device == self.selected_device():
+ self.refresh_ui(device)
def on_wireless_ap_changed_cb(self, combobox, *args):
if self._updating_device:
@@ -690,7 +695,7 @@ class NetworkControlBox(object):
for row in rows_to_remove:
del(row)
- def refresh_ui(self, device, read_config_values=True, state=None):
+ def refresh_ui(self, device, state=None):
if not device:
notebook = self.builder.get_object("notebook_types")
@@ -703,27 +708,12 @@ class NetworkControlBox(object):
self._refresh_parent_vlanid(device)
self._refresh_speed_hwaddr(device, state)
self._refresh_ap(device, state)
- if read_config_values:
- num_of_tries = 3
- else:
- num_of_tries = 0
- self._refresh_device_cfg((device, num_of_tries), state)
+ self._refresh_device_cfg(device, state)
- def _refresh_device_cfg(self, dev_tries, state):
- device, num_of_tries = dev_tries
- ipv4cfg = None
- ipv6cfg = None
+ def _refresh_device_cfg(self, device, state):
- # We might need to wait for config objects to become available
- if num_of_tries > 0:
- ipv4cfg = device.get_ip4_config()
- ipv6cfg = device.get_ip6_config()
- if not ipv4cfg and not ipv6cfg:
- GLib.timeout_add(300,
- self._refresh_device_cfg,
- (device, num_of_tries-1),
- state)
- return False
+ if state is None:
+ state = device.get_state()
dev_type = device.get_device_type()
if dev_type == NetworkManager.DeviceType.ETHERNET:
@@ -735,10 +725,14 @@ class NetworkControlBox(object):
elif dev_type == NetworkManager.DeviceType.VLAN:
dt = "wired"
- if state is None:
- state = device.get_state()
- if (ipv4cfg
- and state == NetworkManager.DeviceState.ACTIVATED):
+ if state == NetworkManager.DeviceState.ACTIVATED:
+ ipv4cfg = device.get_ip4_config()
+ ipv6cfg = device.get_ip6_config()
+ else:
+ ipv4cfg = None
+ ipv6cfg = None
+
+ if ipv4cfg:
addr = socket.inet_ntoa(struct.pack('=L',
ipv4cfg.get_addresses()[0].get_address()))
self._set_device_info_value(dt, "ipv4", addr)
@@ -764,8 +758,7 @@ class NetworkControlBox(object):
# TODO NM_GI_BUGS - segfaults on get_addres(), get_prefix()
ipv6_addr = None
- if (ipv6cfg
- and state == NetworkManager.DeviceState.ACTIVATED):
+ if ipv6cfg:
config = dbus.SystemBus().get_object(NM_SERVICE, ipv6cfg.get_path())
addr, prefix, gw = getNMObjProperty(config, ".IP6Config",
"Addresses")[0]
--
1.7.11.7
More information about the anaconda-patches
mailing list