aboutsummaryrefslogtreecommitdiff
path: root/netinfo.py.patch
blob: 37dc90d69c2ba54e318404385a9c7f0762c53649 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
--- /usr/lib/python3/dist-packages/cloudinit/netinfo.py	2021-01-15 12:33:05.000000000 -0500
+++ netinfo.py	2022-08-23 14:58:06.000000000 -0400
@@ -195,6 +195,38 @@
     return devs
 
 
+def _netdev_info_inetutils_ifconfig(ifconfig_data):
+    # fields that need to be returned in devs for each dev
+    devs = {}
+    for line in ifconfig_data.splitlines():
+        if len(line) == 0:
+            continue
+        if line[0] not in ("\t", " "):
+            curdev = line.split()[0]
+            # current ifconfig pops a ':' on the end of the device
+            if curdev.endswith(":"):
+                curdev = curdev[:-1]
+            if curdev not in devs:
+                devs[curdev] = deepcopy(DEFAULT_NETDEV_INFO)
+        toks = line.lower().strip().split()
+
+        for i in range(len(toks)):
+            if i == 0 and toks[i] == "inet" and toks[i+1] == "address":  # Create new ipv4 addr entry
+                devs[curdev]["ipv4"].append(
+                    {"ip": toks[i + 2]}
+                )
+            elif i == 0 and toks[i] == "broadcast":
+                devs[curdev]["ipv4"][-1]["bcast"] = toks[i + 1]
+            elif i == 0 and toks[i] == "netmask":
+                devs[curdev]["ipv4"][-1]["mask"] = toks[i + 1]
+            elif i == 0 and toks[i] == "hardware" and toks[i+1] == "addr":
+                devs[curdev]["hwaddr"] = toks[i + 2]
+            elif i == 0 and toks[i] == "flags" and toks[i+1] == "up":
+                devs[curdev]["up"] = True
+
+    return devs
+
+
 def netdev_info(empty=""):
     devs = {}
     if util.is_NetBSD():
@@ -208,6 +240,10 @@
         # Fall back to net-tools if iproute2 is not present
         (ifcfg_out, _err) = subp.subp(["ifconfig", "-a"], rcs=[0, 1])
         devs = _netdev_info_ifconfig(ifcfg_out)
+    elif subp.which('inetutils-ifconfig'):
+        # Fall back to net-tools if iproute2 is not present
+        (ifcfg_out, _err) = subp.subp(["inetutils-ifconfig", "-a"], rcs=[0, 1])
+        devs = _netdev_info_inetutils_ifconfig(ifcfg_out)        
     else:
         LOG.warning(
             "Could not print networks: missing 'ip' and 'ifconfig' commands")