[Ovirt-devel] [PATCH] display ipv6 address in networking details page, also fix ipv6 netmask configurations.
Joey Boggs
jboggs at redhat.com
Wed Aug 3 18:38:20 UTC 2011
rhbz#698650
Signed-off-by: Joey Boggs <jboggs at redhat.com>
---
scripts/network.py | 3 +-
scripts/ovirt-config-setup.py | 46 +++++++++++++++++++++++++++++++++-------
scripts/ovirtfunctions.py | 22 +++++++++++--------
3 files changed, 53 insertions(+), 18 deletions(-)
diff --git a/scripts/network.py b/scripts/network.py
index ccc4bd8..f51ee7c 100644
--- a/scripts/network.py
+++ b/scripts/network.py
@@ -85,9 +85,10 @@ class Network:
self.BR_CONFIG += "set %s/DHCPV6C yes\n" % BR_ROOT
elif OVIRT_VARS["OVIRT_IPV6"] == "static":
self.BR_CONFIG += "set %s/IPV6INIT yes\n" % BR_ROOT
- self.BR_CONFIG += "set %s/IPV6ADDR %s\n" % (BR_ROOT, OVIRT_VARS["OVIRT_IPV6_ADDRESS"])
+ self.BR_CONFIG += "set %s/IPV6ADDR %s/%s\n" % (BR_ROOT, OVIRT_VARS["OVIRT_IPV6_ADDRESS"], OVIRT_VARS["OVIRT_IPV6_NETMASK"])
self.BR_CONFIG += "set %s/IPV6_AUTOCONF no\n" % BR_ROOT
self.BR_CONFIG += "set %s/IPV6FORWARDING no\n" % BR_ROOT
+ self.BR_CONFIG += "set %s/IPV6_DEFAULTGW %s\n" % (BR_ROOT, OVIRT_VARS["OVIRT_IPV6_GATEWAY"])
else:
self.BR_CONFIG += "set %s/IPV6INIT no\n" % BR_ROOT
self.BR_CONFIG += "set %s/IPV6_AUTOCONF no\n" % BR_ROOT
diff --git a/scripts/ovirt-config-setup.py b/scripts/ovirt-config-setup.py
index 0de6c2e..8c6c8af 100755
--- a/scripts/ovirt-config-setup.py
+++ b/scripts/ovirt-config-setup.py
@@ -399,12 +399,15 @@ class NodeConfigScreen():
def ipv6_netmask_callback(self):
warn = 0
if not self.ipv6_netdevmask.value() is None and not self.ipv6_netdevmask.value() == "":
- if not is_valid_ipv6(self.ipv6_netdevmask.value()):
- warn = 1
+ try:
+ if not int(self.ipv6_netdevmask.value()) in range(1,128):
+ warn = 1
+ except:
+ warn = 1
if warn == 1:
self.screen.setColor("BUTTON", "black", "red")
self.screen.setColor("ACTBUTTON", "blue", "white")
- ButtonChoiceWindow(self.screen, "Network", "Invalid IP Address", buttons = ['Ok'])
+ ButtonChoiceWindow(self.screen, "Network", "Invalid IPv6 Netmask", buttons = ['Ok'])
self.ipv6_netdevmask.set("")
self.reset_screen_colors()
return
@@ -566,9 +569,9 @@ class NodeConfigScreen():
if not interface == "lo":
if has_ip_address(interface) or get_ipv6_address(interface):
ipv4_address = get_ip_address(interface)
- if get_ipv6_address(interface):
- ipv6_address = get_ipv6_address(interface)
- else:
+ try:
+ ipv6_address, netmask = get_ipv6_address(interface)
+ except:
ipv6_address = ""
self.network_status[interface] = (ipv4_address,ipv6_address)
except:
@@ -577,7 +580,8 @@ class NodeConfigScreen():
for key in sorted(self.network_status.iterkeys()):
if key.startswith("br"):
parent_dev = key[+2:]
- del self.network_status[parent_dev]
+ if self.network_status.has_key(parent_dev):
+ del self.network_status[parent_dev]
for key in sorted(self.network_status.iterkeys()):
ipv4_addr, ipv6_addr = self.network_status[key]
cmd = "/files/etc/sysconfig/network-scripts/ifcfg-%s/BOOTPROTO" % str(key)
@@ -600,7 +604,7 @@ class NodeConfigScreen():
if ipv6_addr != "":
status_text += "%1s: %5s %14s \nIPv6: %1s\n\n" % (key.strip(),dev_bootproto.strip(),ipv4_addr.strip(),ipv6_addr.strip())
else:
- status_text += "%1s: %5s %14s \n\n" % (key.strip(),dev_bootproto.strip(),ipv4_addr.strip(),ipv6_addr.strip())
+ status_text += "%1s: %5s %14s \n\n" % (key.strip(),dev_bootproto.strip(),ipv4_addr.strip())
status_text.strip()
networking = TextboxReflowed(32, status_text, maxHeight=10)
networking.setText(status_text)
@@ -975,6 +979,32 @@ class NodeConfigScreen():
self.ipv6_netdevmask.setCallback(self.ipv6_netmask_callback)
self.ipv6_netdevgateway = Entry(39, "", scroll = 0)
self.ipv6_netdevgateway.setCallback(self.ipv6_gateway_callback)
+ if "OVIRT_IPV6_ADDRESS" in OVIRT_VARS:
+ self.ipv6_netdevip.set(OVIRT_VARS["OVIRT_IPV6_ADDRESS"])
+ else:
+ try:
+ current_ip, current_netmask = get_ipv6_address(self.nic_lb.current())
+ except:
+ current_ip = ""
+ current_netmask = ""
+ if current_ip == "":
+ try:
+ current_ip, current_netmask = get_ipv6_address("br" + self.nic_lb.current())
+ except:
+ pass
+ if current_ip != "":
+ self.ipv6_netdevip.set(current_ip)
+ if "OVIRT_IPV6_NETMASK" in OVIRT_VARS:
+ self.ipv6_netdevmask.set(OVIRT_VARS["OVIRT_IPV6_NETMASK"])
+ else:
+ if current_ip != "":
+ self.ipv6_netdevmask.set(current_netmask)
+ if "OVIRT_IPV6_GATEWAY" in OVIRT_VARS:
+ self.ipv6_netdevgateway.set(OVIRT_VARS["OVIRT_IPV6_GATEWAY"])
+ else:
+ current_gateway = get_ipv6_gateway(self.nic_lb.current())
+ if current_gateway == "":
+ current_gateway = get_gateway("br" + self.nic_lb.current())
ipv6_grid = Grid (5,4)
ipv6_grid.setField(Label("IP Address: "), 0, 1, anchorLeft = 1)
ipv6_grid.setField(Label("Netmask: "), 0, 2, anchorLeft = 1)
diff --git a/scripts/ovirtfunctions.py b/scripts/ovirtfunctions.py
index 271b16b..6ef27d3 100644
--- a/scripts/ovirtfunctions.py
+++ b/scripts/ovirtfunctions.py
@@ -854,18 +854,22 @@ def get_gateway(ifname):
return result
def get_ipv6_address(interface):
- inet6_lookup_cmd = 'ifconfig ' + interface + ' |grep inet6|grep -v Global|awk {\'print $3\'}'
+ inet6_lookup_cmd = "ip addr show dev %s | awk '$1==\"inet6\" && $4==\"global\" { print $2 }'" % interface
inet6_lookup = subprocess.Popen(inet6_lookup_cmd, shell=True, stdout=PIPE, stderr=STDOUT)
- ipv6_addr = inet6_lookup.stdout.read()
-
- if "/" in ipv6_addr:
- while not ipv6_addr.endswith("/"):
- ipv6_addr = ipv6_addr[:-1]
- ipv6_addr = ipv6_addr.strip("/")
- return ipv6_addr
-
+ ipv6_addr = inet6_lookup.stdout.read().strip()
+ try:
+ ip, netmask = ipv6_addr.split("/")
+ return (ip,netmask)
+ except:
+ log("unable to determine ip/netmask from: " + ipv6_addr)
return False
+def get_ipv6_gateway(ifname):
+ cmd = "ip route list dev "+ ifname + " | awk ' /^default/ {print $3}'"
+ result = subprocess.Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
+ result = result.stdout.read().strip()
+ return result
+
def has_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
--
1.7.5.4
More information about the ovirt-devel
mailing list