diff --git a/src/bridge.py b/src/bridge.py index 1aa66bb..63259e8 100755 --- a/src/bridge.py +++ b/src/bridge.py @@ -94,10 +94,10 @@ def parse_ifconfig(res): # Help -def do_help(argv=None, json_print=None, pretty_json=None, color=None): +def do_help(argv=None, json_print=None, pretty_json=None, color=None, oneline=None): perror("Usage: bridge [ OPTIONS ] OBJECT { COMMAND | help }") perror("where OBJECT := { link }") - perror(" OPTIONS := { -V[ersion] | -j[son] | -p[retty] | -c[olor] }") + perror(" OPTIONS := { -V[ersion] | -j[son] | -p[retty] | -c[olor] | -o[neline] }") perror(HELP_ADDENDUM) exit(255) @@ -109,13 +109,13 @@ def do_help_link(): # Link module @help_msg(do_help_link) -def do_link(argv, json_print, pretty_json, color): +def do_link(argv, json_print, pretty_json, color, oneline): if not argv: argv.append("show") if any_startswith(["show", "lst", "list"], argv[0]): argv.pop(0) - return do_link_show(argv, json_print, pretty_json, color) + return do_link_show(argv, json_print, pretty_json, color, oneline) elif "set".startswith(argv[0]): argv.pop(0) return do_link_set(argv) @@ -124,7 +124,7 @@ def do_link(argv, json_print, pretty_json, color): return True -def do_link_show(argv, json_print, pretty_json, color): +def do_link_show(argv, json_print, pretty_json, color, oneline): if len(argv) > 1: if argv[0] != "dev": return False @@ -166,9 +166,8 @@ def do_link_show(argv, json_print, pretty_json, color): if json_print: return json_dump(bridges, pretty_json) - - for b in bridges: - print("%d: %s: <%s> mtu %d master %s state %s priority %d cost %d" % ( + infos = [ + "%d: %s: <%s> mtu %d master %s state %s priority %d cost %d" % ( b["ifindex"], colorize_ifname(color, b["ifname"]), ",".join(b["flags"]), @@ -177,8 +176,14 @@ def do_link_show(argv, json_print, pretty_json, color): b["state"], b["priority"], b["cost"] - )) - + ) + for b in bridges + ] + if oneline: + print("\\".join(infos)) + else: + for info in infos: + print(info) return True diff --git a/src/ip.py b/src/ip.py index fabdf37..0d18523 100755 --- a/src/ip.py +++ b/src/ip.py @@ -70,9 +70,9 @@ def parse_ifconfig(res, af, address): (local, peer, prefixlen) = re.findall( r"inet6 ([\da-f:]*:[\da-f:]+)%*\w*(?: --> ([\da-f:]*:[\da-f:]+)%*\w*)? prefixlen (\d+)", r)[0] addr = { - "family": "inet6", - "local": local, - "prefixlen": int(prefixlen) + "family": "inet6", + "local": local, + "prefixlen": int(prefixlen), } if peer: addr["address"] = peer @@ -90,7 +90,7 @@ def parse_ifconfig(res, af, address): return links -def link_addr_show(argv, af, json_print, pretty_json, color, address): +def link_addr_show(argv, af, json_print, pretty_json, color, address, oneline=False): if len(argv) > 0 and argv[0] == "dev": argv.pop(0) if len(argv) > 0: @@ -112,28 +112,29 @@ def link_addr_show(argv, af, json_print, pretty_json, color, address): if json_print: return json_dump(links, pretty_json) - + sep = "\\" if oneline else "\n" for l in links: - print("%d: %s: <%s> mtu %d status %s" % ( + mtu_status = "%d: %s: <%s> mtu %d status %s" % ( l["ifindex"], colorize_ifname(color, l["ifname"]), ",".join(l["flags"]), l["mtu"], colorize_op_state(color, l["operstate"]) - )) - print( + ) + link_info = ( " link/" + l["link_type"] + ((" " + colorize_mac(color, l["address"])) if "address" in l else "") + ((" brd " + colorize_mac(color, l["broadcast"])) if "broadcast" in l else "") ) + items = [mtu_status, link_info] for a in l.get("addr_info", []): - print( + items.append( " %s %s" % (a["family"], colorize_inet(color, a["family"], a["local"])) + ((" peer %s" % colorize_inet(color, a["family"], a["address"])) if "address" in a else "") + "/%d" % (a["prefixlen"]) + ((" brd " + colorize_inet(color, a["family"], a["broadcast"])) if "broadcast" in a else "") ) - + print(sep.join(items)) return True @@ -184,7 +185,7 @@ def do_help_neigh(): # Route Module @help_msg(do_help_route) -def do_route(argv, af, json_print, pretty_json, color): +def do_route(argv, af, json_print, pretty_json, color, oneline=False): if not argv or ( any_startswith(["show", "lst", "list"], argv[0]) and len(argv) == 1 ): @@ -409,13 +410,13 @@ def do_route_get(argv, af, json_print, pretty_json, color): # Addr Module @help_msg(do_help_addr) -def do_addr(argv, af, json_print, pretty_json, color): +def do_addr(argv, af, json_print, pretty_json, color, oneline=False): if not argv: argv.append("show") if any_startswith(["show", "lst", "list"], argv[0]): argv.pop(0) - return do_addr_show(argv, af, json_print, pretty_json, color) + return do_addr_show(argv, af, json_print, pretty_json, color, oneline=oneline) elif "add".startswith(argv[0]) and len(argv) >= 3: argv.pop(0) return do_addr_add(argv, af) @@ -427,8 +428,8 @@ def do_addr(argv, af, json_print, pretty_json, color): return True -def do_addr_show(argv, af, json_print, pretty_json, color): - return link_addr_show(argv, af, json_print, pretty_json, color, True) +def do_addr_show(argv, af, json_print, pretty_json, color, oneline=False): + return link_addr_show(argv, af, json_print, pretty_json, color, True, oneline) def do_addr_add(argv, af): @@ -481,13 +482,13 @@ def do_addr_del(argv, af): # Link module @help_msg(do_help_link) -def do_link(argv, af, json_print, pretty_json, color): +def do_link(argv, af, json_print, pretty_json, color, oneline=False): if not argv: argv.append("show") if any_startswith(["show", "lst", "list"], argv[0]): argv.pop(0) - return do_link_show(argv, af, json_print, pretty_json, color) + return do_link_show(argv, af, json_print, pretty_json, color, oneline) elif "set".startswith(argv[0]): argv.pop(0) return do_link_set(argv, af) @@ -496,8 +497,8 @@ def do_link(argv, af, json_print, pretty_json, color): return True -def do_link_show(argv, af, json_print, pretty_json, color): - return link_addr_show(argv, af, json_print, pretty_json, color, False) +def do_link_show(argv, af, json_print, pretty_json, color, oneline=False): + return link_addr_show(argv, af, json_print, pretty_json, color, False, oneline) def do_link_set(argv, af): @@ -550,7 +551,7 @@ def do_link_set(argv, af): # Neigh module @help_msg(do_help_neigh) -def do_neigh(argv, af, json_print, pretty_json, color): +def do_neigh(argv, af, json_print, pretty_json, color, oneline=False): if not argv: argv.append("show") @@ -694,6 +695,7 @@ def main(argv): af = -1 # default / both json_print = False pretty_json = False + oneline = False color_mode = "never" while argv and argv[0].startswith("-"): @@ -719,6 +721,9 @@ def main(argv): elif "-pretty".startswith(argv[0]): pretty_json = True argv.pop(0) + elif "-oneline".startswith(argv[0]): + oneline = True + argv.pop(0) elif "-Version".startswith(argv[0]): print("iproute2mac, v" + VERSION) exit(0) @@ -738,7 +743,7 @@ def main(argv): argv.pop(0) # Functions return true or terminate with exit(255) # See help_msg and do_help* - return cmd_func(argv, af, json_print, pretty_json, color_scheme) + return cmd_func(argv, af, json_print, pretty_json, color_scheme, oneline=oneline) perror('Object "{}" is unknown, try "ip help".'.format(argv[0])) exit(1)