diff --git a/src/statd/cli-pretty b/src/statd/cli-pretty index 5d03f06a..b73cecbc 100755 --- a/src/statd/cli-pretty +++ b/src/statd/cli-pretty @@ -11,6 +11,7 @@ class Pad: data = 41 class PadMdb: + bridge = 7 vlan = 6 group = 20 ports = 20 @@ -55,6 +56,10 @@ class Decore(): def yellow(txt): return Decore.decorate("33", txt, "39") + @staticmethod + def underline(txt): + return Decore.decorate("4", txt, "24") + def get_json_data(default, indata, *args): data = indata for arg in args: @@ -400,33 +405,29 @@ class Iface: key = remove_yang_prefix(key) print(f"eth-{key:<{25}}: {val}") - def pr_mdb(self): - header_printed=False + def pr_mdb(self, bridge): for group in self.br_mdb.get("multicast-filter", {}): - if header_printed == 0: - hdr = (f"{'GROUP':<{PadMdb.group+PadMdb.vlan}}" - f"{'PORTS':<{PadMdb.ports}}") - print(Decore.invert(hdr)) - header_printed=True - row = f"{group['group']:<{PadMdb.group+PadMdb.vlan}}" - ports= ", ".join(port_dict["port"] for port_dict in group["ports"]) + row = f"{bridge:<{PadMdb.bridge}}" + row += f"{'':<{PadMdb.vlan}}" + row += f"{group['group']:<{PadMdb.group}}" + if (group.get("ports")): + ports = ", ".join(port_dict["port"] for port_dict in group["ports"]) + else: + ports = "" row += f"{ports}" print(row) - def pr_vlans_mdb(self): + def pr_vlans_mdb(self, bridge): for vlan in self.br_vlans: - header_printed = False filters=vlan.get("multicast-filters", {}) for group in filters.get("multicast-filter", []): - if not header_printed: - hdr = (f"{'VID':<{PadMdb.vlan}}" - f"{'GROUP':<{PadMdb.group}}" - f"{'PORTS':<{PadMdb.ports}}") - print(Decore.invert(hdr)) - header_printed = False - row = f"{vlan['vid']:<{PadMdb.vlan}}" + row = f"{bridge:<{PadMdb.bridge}}" + row += f"{vlan['vid']:<{PadMdb.vlan}}" row += f"{group['group']:<{PadMdb.group}}" - ports= ", ".join(port_dict["port"] for port_dict in group["ports"]) + if (group.get("ports")): + ports = ", ".join(port_dict["port"] for port_dict in group["ports"]) + else: + ports = "" row += f"{ports}" print(row) @@ -493,7 +494,7 @@ def show_interfaces(json, name): pr_interface_list(json) def show_bridge_mdb(json): - bridges=[] + header_printed = False if not json.get("ietf-interfaces:interfaces"): print(f"Error, top level \"ietf-interfaces:interface\" missing") sys.exit(1) @@ -501,9 +502,15 @@ def show_bridge_mdb(json): for iface in [Iface(data) for data in ifaces]: if iface.type != "infix-if-type:bridge": continue - - iface.pr_mdb() - iface.pr_vlans_mdb() + if not header_printed: + hdr = (f"{'BRIDGE':<{PadMdb.bridge}}" + f"{'VID':<{PadMdb.vlan}}" + f"{'GROUP':<{PadMdb.group}}" + f"{'PORTS':<{PadMdb.ports}}") + print(Decore.invert(hdr)) + header_printed = True + iface.pr_mdb(iface.name) + iface.pr_vlans_mdb(iface.name) def show_routing_table(json, ip): if not json.get("ietf-routing:routing"): diff --git a/test/case/cli/cli-output/show-bridge-mdb.txt b/test/case/cli/cli-output/show-bridge-mdb.txt index 90830248..889850f6 100644 --- a/test/case/cli/cli-output/show-bridge-mdb.txt +++ b/test/case/cli/cli-output/show-bridge-mdb.txt @@ -1,8 +1,7 @@ -GROUP PORTS  -230.1.32.100 e2 -230.1.2.100 e1 -230.1.2.2 e0 -GROUP PORTS  -230.1.32.100 e2 -230.1.2.100 e1 -230.1.2.2 e0 +BRIDGE VID GROUP PORTS  +br0 230.1.32.100 e0 +br0 230.1.2.100 e1 +br0 01:01:01:01:01:01 e1 +br0 230.1.2.2 e0 +br1 30 ff02::6a e2 +br1 30 224.2.2.2 e2 diff --git a/test/case/cli/system-output/igmp-status.json b/test/case/cli/system-output/igmp-status.json index 2f986f05..5668736e 100644 --- a/test/case/cli/system-output/igmp-status.json +++ b/test/case/cli/system-output/igmp-status.json @@ -20,19 +20,42 @@ ], "multicast-groups": [ { + "bridge": "br0", "group": "230.1.32.100", "mac": "01:00:5e:01:20:64", - "ports": [ "e2" ] + "ports": [ "e0" ] }, { + "bridge": "br0", "group": "230.1.2.100", "mac": "01:00:5e:01:02:64", "ports": [ "e1" ] }, { + "bridge": "br0", + "group": "01:01:01:01:01:01", + "mac": "01:01:01:01:01:01", + "ports": [ "e1" ] + }, + { + "bridge": "br0", "group": "230.1.2.2", "mac": "01:00:5e:01:02:02", "ports": [ "e0" ] + }, + { + "bridge": "br1", + "vid": 30, + "group": "ff02::6a", + "mac": "33:33:00:00:00:6a", + "ports": [ "e2" ] + }, + { + "bridge": "br1", + "vid": 30, + "group": "224.2.2.2", + "mac": "33:33:00:00:00:6a", + "ports": [ "e2" ] } ] }