Refactor cli-pretty for show bridge mdb

This commit is contained in:
Mattias Walström
2024-04-09 20:22:26 +02:00
committed by Joachim Wiberg
parent 50359b0808
commit cc8221a22a
3 changed files with 61 additions and 32 deletions
+30 -23
View File
@@ -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"):
+7 -8
View File
@@ -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
+24 -1
View File
@@ -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" ]
}
]
}