diff --git a/src/statd/python/yanger/yanger.py b/src/statd/python/yanger/yanger.py index 170e176d..53bffca5 100755 --- a/src/statd/python/yanger/yanger.py +++ b/src/statd/python/yanger/yanger.py @@ -674,6 +674,30 @@ def netns_ifindex_to_ifname(ifindex): return None +def add_bridge_port_common(ifname, iface_in, iface_out): + li = iface_in.get("linkinfo", {}) + if not (li.get("info_slave_kind") == "bridge" or \ + li.get("info_kind") == "bridge"): + return + + pvid = get_bridge_port_pvid(ifname) + if pvid is not None: + insert(iface_out, "infix-interfaces:bridge-port", "pvid", pvid) + +def add_bridge_port_lower(ifname, iface_in, iface_out): + li = iface_in.get("linkinfo", {}) + if not li.get("info_slave_kind") == "bridge": + return + + insert(iface_out, "infix-interfaces:bridge-port", "bridge", iface_in['master']) + + stp_state = get_bridge_port_stp_state(ifname) + if stp_state is not None: + insert(iface_out, "infix-interfaces:bridge-port", "stp-state", stp_state) + + multicast = get_brport_multicast(ifname) + insert(iface_out, "infix-interfaces:bridge-port", "multicast", multicast) + def add_ip_link(ifname, iface_in, iface_out): if 'ifname' in iface_in: iface_out['name'] = ifname @@ -687,19 +711,9 @@ def add_ip_link(ifname, iface_in, iface_out): if 'address' in iface_in: iface_out['phys-address'] = iface_in['address'] - if 'master' in iface_in: - insert(iface_out, "infix-interfaces:bridge-port", "bridge", iface_in['master']) + add_bridge_port_common(ifname, iface_in, iface_out) + add_bridge_port_lower(ifname, iface_in, iface_out) - pvid = get_bridge_port_pvid(ifname) - if pvid is not None: - insert(iface_out, "infix-interfaces:bridge-port", "pvid", pvid) - - stp_state = get_bridge_port_stp_state(ifname) - if stp_state is not None: - insert(iface_out, "infix-interfaces:bridge-port", "stp-state", stp_state) - - multicast = get_brport_multicast(ifname) - insert(iface_out, "infix-interfaces:bridge-port", "multicast", multicast) if not iface_is_dsa(iface_in): if 'link' in iface_in: insert(iface_out, "infix-interfaces:vlan", "lower-layer-if", iface_in['link']) diff --git a/test/case/cli/cli-output/show-interfaces.txt b/test/case/cli/cli-output/show-interfaces.txt index 8d6e3282..718dd630 100644 --- a/test/case/cli/cli-output/show-interfaces.txt +++ b/test/case/cli/cli-output/show-interfaces.txt @@ -1,5 +1,5 @@ INTERFACE PROTOCOL STATE DATA  -br0 bridge  vlan:40u,50t +br0 bridge  vlan:40u,50t pvid:1 │ ethernet UP 02:00:00:00:00:00 ├ e0 bridge DISABLED vlan:10u,20t pvid:10 └ e1 bridge BLOCKING vlan:10t,20u pvid:20 diff --git a/test/case/cli/system-output/bridge-vlan-show-dev-br0.json b/test/case/cli/system-output/bridge-vlan-show-dev-br0.json new file mode 100644 index 00000000..84db79d6 --- /dev/null +++ b/test/case/cli/system-output/bridge-vlan-show-dev-br0.json @@ -0,0 +1 @@ +[{"ifname":"br0","vlans":[{"vlan":1,"flags":["PVID","Egress Untagged"]},{"vlan":33}]}] diff --git a/test/case/cli/system-output/bridge-vlan-show-dev-br1.json b/test/case/cli/system-output/bridge-vlan-show-dev-br1.json new file mode 100644 index 00000000..750c425c --- /dev/null +++ b/test/case/cli/system-output/bridge-vlan-show-dev-br1.json @@ -0,0 +1 @@ +[{"ifname":"br1","vlans":[]}]