summaryrefslogtreecommitdiff
path: root/cloudinit/netinfo.py
diff options
context:
space:
mode:
authorShraddha Pandhe <shraddha.pandhe@yahoo.com>2014-11-21 18:32:30 +0000
committerShraddha Pandhe <shraddha.pandhe@yahoo.com>2014-11-21 18:32:30 +0000
commitbfbe8099b98bb97cfd96385fe31c023548734cbf (patch)
tree64763abe1f4ac33d58365f3d6b2bc68d2861c290 /cloudinit/netinfo.py
parent3efc7142a6ca72bfb40e63c49ed64e2e04837c51 (diff)
downloadcloud-init-git-bfbe8099b98bb97cfd96385fe31c023548734cbf.tar.gz
Add IPv6 Support for Rhel.
This patch does the following: 1. Adds support to process network config with IPv6 2. Adds support to display 'ifconfig -a' information for IPv6 3. Adds support to display routing information for IPv6
Diffstat (limited to 'cloudinit/netinfo.py')
-rw-r--r--cloudinit/netinfo.py60
1 files changed, 51 insertions, 9 deletions
diff --git a/cloudinit/netinfo.py b/cloudinit/netinfo.py
index 8d4df342..d891315b 100644
--- a/cloudinit/netinfo.py
+++ b/cloudinit/netinfo.py
@@ -72,6 +72,7 @@ def netdev_info(empty=""):
"bcast:": "bcast", "broadcast": "bcast",
"mask:": "mask", "netmask": "mask",
"hwaddr": "hwaddr", "ether": "hwaddr",
+ "scope": "scope",
}
for origfield, field in ifconfigfields.items():
target = "%s%s" % (field, fieldpost)
@@ -96,7 +97,12 @@ def netdev_info(empty=""):
def route_info():
(route_out, _err) = util.subp(["netstat", "-rn"])
- routes = []
+ (route_out6, _err6) = util.subp(["netstat", "-A inet6", "-n"])
+
+ routes = {}
+ routes['ipv4'] = []
+ routes['ipv6'] = []
+
entries = route_out.splitlines()[1:]
for line in entries:
if not line:
@@ -132,7 +138,26 @@ def route_info():
'iface': toks[7],
}
- routes.append(entry)
+ routes['ipv4'].append(entry)
+
+ entries6 = route_out6.splitlines()[1:]
+ for line in entries6:
+ if not line:
+ continue
+ toks = line.split()
+
+ if (len(toks) < 6 or toks[0] == "Kernel" or
+ toks[0] == "Proto" or toks[0] == "Active"):
+ continue
+ entry = {
+ 'proto': toks[0],
+ 'recv-q': toks[1],
+ 'send-q': toks[2],
+ 'local address': toks[3],
+ 'foreign address': toks[4],
+ 'state': toks[5],
+ }
+ routes['ipv6'].append(entry)
return routes
@@ -156,10 +181,12 @@ def netdev_pformat():
lines.append(util.center("Net device info failed", '!', 80))
netdev = None
if netdev is not None:
- fields = ['Device', 'Up', 'Address', 'Mask', 'Hw-Address']
+ fields = ['Device', 'Up', 'Address', 'Mask', 'Scope', 'Hw-Address']
tbl = PrettyTable(fields)
for (dev, d) in netdev.iteritems():
- tbl.add_row([dev, d["up"], d["addr"], d["mask"], d["hwaddr"]])
+ tbl.add_row([dev, d["up"], d["addr"], d["mask"], ".", d["hwaddr"]])
+ if d["addr6"]:
+ tbl.add_row([dev, d["up"], d["addr6"], ".", d["scope6"], d["hwaddr"]])
netdev_s = tbl.get_string()
max_len = len(max(netdev_s.splitlines(), key=len))
header = util.center("Net device info", "+", max_len)
@@ -176,15 +203,30 @@ def route_pformat():
util.logexc(LOG, "Route info failed: %s" % e)
routes = None
if routes is not None:
- fields = ['Route', 'Destination', 'Gateway',
+ fields_v4 = ['Route', 'Destination', 'Gateway',
'Genmask', 'Interface', 'Flags']
- tbl = PrettyTable(fields)
- for (n, r) in enumerate(routes):
+
+ if routes.get('ipv6') is not None:
+ fields_v6 = ['Route', 'Proto', 'Recv-Q', 'Send-Q', 'Local Address',
+ 'Foreign Address', 'State']
+
+ tbl_v4 = PrettyTable(fields_v4)
+ for (n, r) in enumerate(routes.get('ipv4')):
route_id = str(n)
- tbl.add_row([route_id, r['destination'],
+ tbl_v4.add_row([route_id, r['destination'],
r['gateway'], r['genmask'],
r['iface'], r['flags']])
- route_s = tbl.get_string()
+ route_s = tbl_v4.get_string()
+ if fields_v6:
+ tbl_v6 = PrettyTable(fields_v6)
+ for (n, r) in enumerate(routes.get('ipv6')):
+ route_id = str(n)
+ tbl_v6.add_row([route_id, r['proto'],
+ r['recv-q'], r['send-q'],
+ r['local address'], r['foreign address'],
+ r['state']])
+ route_s = route_s + tbl_v6.get_string()
+
max_len = len(max(route_s.splitlines(), key=len))
header = util.center("Route info", "+", max_len)
lines.extend([header, route_s])