From 223b23e2c428aff6c1e61f49d8e2edde77801a12 Mon Sep 17 00:00:00 2001 From: James Falcon Date: Wed, 26 Jan 2022 19:40:06 -0600 Subject: Add json parsing of ip addr show (SC-723) (#1210) When obtaining information from "ip addr", default to using "ip --json addr" rather than using regex to parse "ip addr show" as json is machine readable as less prone to error. Deprecate but leave fallback to use "ip addr" for older iproute2 tooling which does not support --json param. Fix regex parsing of "ip addr" to support peer addresses and metrics. --- tests/data/netinfo/sample-ipaddrshow-json | 91 ++++++++++++++++++++++++++ tests/data/netinfo/sample-ipaddrshow-json-down | 57 ++++++++++++++++ tests/data/netinfo/sample-ipaddrshow-output | 3 +- 3 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 tests/data/netinfo/sample-ipaddrshow-json create mode 100644 tests/data/netinfo/sample-ipaddrshow-json-down (limited to 'tests/data') diff --git a/tests/data/netinfo/sample-ipaddrshow-json b/tests/data/netinfo/sample-ipaddrshow-json new file mode 100644 index 00000000..8f6a430c --- /dev/null +++ b/tests/data/netinfo/sample-ipaddrshow-json @@ -0,0 +1,91 @@ +[ + { + "ifindex": 1, + "ifname": "lo", + "flags": [ + "LOOPBACK", + "UP", + "LOWER_UP" + ], + "mtu": 65536, + "qdisc": "noqueue", + "operstate": "UNKNOWN", + "group": "default", + "txqlen": 1000, + "link_type": "loopback", + "address": "00:00:00:00:00:00", + "broadcast": "00:00:00:00:00:00", + "addr_info": [ + { + "family": "inet", + "local": "127.0.0.1", + "prefixlen": 8, + "scope": "host", + "label": "lo", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + }, + { + "family": "inet6", + "local": "::1", + "prefixlen": 128, + "scope": "host", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + } + ] + }, + { + "ifindex": 23, + "link_index": 24, + "ifname": "enp0s25", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "noqueue", + "operstate": "UP", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "50:7b:9d:2c:af:91", + "broadcast": "ff:ff:ff:ff:ff:ff", + "link_netnsid": 0, + "addr_info": [ + { + "family": "inet", + "local": "192.168.2.18", + "prefixlen": 24, + "metric": 100, + "broadcast": "192.168.2.255", + "scope": "global", + "dynamic": true, + "label": "enp0s25", + "valid_life_time": 2339, + "preferred_life_time": 2339 + }, + { + "family": "inet6", + "local": "fe80::7777:2222:1111:eeee", + "prefixlen": 64, + "scope": "global", + "dynamic": true, + "mngtmpaddr": true, + "noprefixroute": true, + "valid_life_time": 6823, + "preferred_life_time": 3223 + }, + { + "family": "inet6", + "local": "fe80::8107:2b92:867e:f8a6", + "prefixlen": 64, + "scope": "link", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + } + ] + } +] diff --git a/tests/data/netinfo/sample-ipaddrshow-json-down b/tests/data/netinfo/sample-ipaddrshow-json-down new file mode 100644 index 00000000..7ad5dde0 --- /dev/null +++ b/tests/data/netinfo/sample-ipaddrshow-json-down @@ -0,0 +1,57 @@ +[ + { + "ifindex": 1, + "ifname": "lo", + "flags": [ + "LOOPBACK", + "UP", + "LOWER_UP" + ], + "mtu": 65536, + "qdisc": "noqueue", + "operstate": "UNKNOWN", + "group": "default", + "txqlen": 1000, + "link_type": "loopback", + "address": "00:00:00:00:00:00", + "broadcast": "00:00:00:00:00:00", + "addr_info": [ + { + "family": "inet", + "local": "127.0.0.1", + "prefixlen": 8, + "scope": "host", + "label": "lo", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + }, + { + "family": "inet6", + "local": "::1", + "prefixlen": 128, + "scope": "host", + "valid_life_time": 4294967295, + "preferred_life_time": 4294967295 + } + ] + }, + { + "ifindex": 23, + "link_index": 24, + "ifname": "eth0", + "flags": [ + "BROADCAST", + "MULTICAST" + ], + "mtu": 1500, + "qdisc": "noqueue", + "operstate": "DOWN", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "00:16:3e:de:51:a6", + "broadcast": "ff:ff:ff:ff:ff:ff", + "link_netnsid": 0, + "addr_info": [] + } +] diff --git a/tests/data/netinfo/sample-ipaddrshow-output b/tests/data/netinfo/sample-ipaddrshow-output index b2fa2672..2aa3f90c 100644 --- a/tests/data/netinfo/sample-ipaddrshow-output +++ b/tests/data/netinfo/sample-ipaddrshow-output @@ -4,10 +4,9 @@ inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever 2: enp0s25: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 50:7b:9d:2c:af:91 brd ff:ff:ff:ff:ff:ff - inet 192.168.2.18/24 brd 192.168.2.255 scope global dynamic enp0s25 + inet 192.168.2.18/24 metric 100 brd 192.168.2.255 scope global dynamic enp0s25 valid_lft 84174sec preferred_lft 84174sec inet6 fe80::7777:2222:1111:eeee/64 scope global valid_lft forever preferred_lft forever inet6 fe80::8107:2b92:867e:f8a6/64 scope link valid_lft forever preferred_lft forever - -- cgit v1.2.3