Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 15 additions & 10 deletions src/bridge.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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"]),
Expand All @@ -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


Expand Down
47 changes: 26 additions & 21 deletions src/ip.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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


Expand Down Expand Up @@ -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
):
Expand Down Expand Up @@ -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)
Expand All @@ -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):
Expand Down Expand Up @@ -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)
Expand All @@ -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):
Expand Down Expand Up @@ -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")

Expand Down Expand Up @@ -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("-"):
Expand All @@ -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)
Expand All @@ -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)
Expand Down