forked from tfgrid/zosbuilder
- Change from colon to space separation to avoid URL parsing issues - Update sources.conf format: TYPE NAME URL VERSION BUILD_FUNCTION [EXTRA] - Implement awk-based parsing for reliable field extraction - Fix firmware package list (remove unavailable linux-firmware-marvell)
63 lines
1.6 KiB
Python
Executable File
63 lines
1.6 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# This is simple script to process JSON output from ip route
|
|
# command and format it. Based on earlier shell script version.
|
|
"""Script to parse ip route output into more readable text."""
|
|
|
|
import sys
|
|
import json
|
|
import getopt
|
|
import subprocess
|
|
|
|
|
|
def usage():
|
|
'''Print usage and exit'''
|
|
print("Usage: {} [tablenr [raw ip args...]]".format(sys.argv[0]))
|
|
sys.exit(64)
|
|
|
|
|
|
def main():
|
|
'''Process the arguments'''
|
|
family = 'inet'
|
|
try:
|
|
opts, args = getopt.getopt(sys.argv[1:], "h46f:", ["help", "family="])
|
|
except getopt.GetoptError as err:
|
|
print(err)
|
|
usage()
|
|
|
|
for opt, arg in opts:
|
|
if opt in ["-h", "--help"]:
|
|
usage()
|
|
elif opt == '-6':
|
|
family = 'inet6'
|
|
elif opt == "-4":
|
|
family = 'inet'
|
|
elif opt in ["-f", "--family"]:
|
|
family = arg
|
|
else:
|
|
assert False, "unhandled option"
|
|
|
|
if not args:
|
|
args = ['0']
|
|
|
|
cmd = ['ip', '-f', family, '-j', 'route', 'list', 'table'] + args
|
|
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
|
tbl = json.load(process.stdout)
|
|
if family == 'inet':
|
|
fmt = '{:15} {:15} {:15} {:8} {:8}{:<16} {}'
|
|
else:
|
|
fmt = '{:32} {:32} {:32} {:8} {:8}{:<16} {}'
|
|
|
|
# ip route json keys
|
|
keys = ['dst', 'gateway', 'prefsrc', 'protocol', 'scope', 'dev', 'table']
|
|
print(fmt.format(*map(lambda x: x.capitalize(), keys)))
|
|
|
|
for record in tbl:
|
|
fields = [record[k] if k in record else '' for k in keys]
|
|
print(fmt.format(*fields))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|