bugfix: bridgedomain sync
When a bridge-domain has a BVI, it will not sync/add the interfaces to the bridge. As an example: bridgedomains: bd1001: bvi: loop1001 interfaces: [ tap1001 ] mtu: 9000 taps: tap1001: host: bridge: br0 mac: 02:fe:83:97:f4:7f mtu: 9000 name: vpp-bd1001 Before this change, the 'tap1001' would get created, but if the BVI 'loop1001' was correctly set up on the bridge, the code would continue and skip over enumerating config_bridge_iface. After this change, both the BVI will be checked (and added if not present), AND all interfaces will be enumerated (and added if not present).
This commit is contained in:
@ -1092,31 +1092,31 @@ class Reconciler:
|
|||||||
|
|
||||||
if "bvi" in config_bridge_iface:
|
if "bvi" in config_bridge_iface:
|
||||||
bviname = config_bridge_iface["bvi"]
|
bviname = config_bridge_iface["bvi"]
|
||||||
if (
|
if not (
|
||||||
bviname in self.vpp.cache["interface_names"]
|
bviname in self.vpp.cache["interface_names"]
|
||||||
and self.vpp.cache["interface_names"][bviname].sw_if_index
|
and self.vpp.cache["interface_names"][bviname].sw_if_index
|
||||||
== bvi_sw_if_index
|
== bvi_sw_if_index
|
||||||
):
|
):
|
||||||
continue
|
cli = f"set interface l2 bridge {bviname} {int(instance)} bvi"
|
||||||
cli = f"set interface l2 bridge {bviname} {int(instance)} bvi"
|
self.cli["sync"].append(cli)
|
||||||
self.cli["sync"].append(cli)
|
|
||||||
|
|
||||||
if not "interfaces" in config_bridge_iface:
|
if "interfaces" in config_bridge_iface:
|
||||||
continue
|
for member_ifname in config_bridge_iface["interfaces"]:
|
||||||
for member_ifname in config_bridge_iface["interfaces"]:
|
member_ifname, _member_iface = interface.get_by_name(
|
||||||
member_ifname, _member_iface = interface.get_by_name(
|
self.cfg, member_ifname
|
||||||
self.cfg, member_ifname
|
)
|
||||||
)
|
if not member_ifname in bridge_members:
|
||||||
if not member_ifname in bridge_members:
|
cli = f"set interface l2 bridge {member_ifname} {int(instance)}"
|
||||||
cli = f"set interface l2 bridge {member_ifname} {int(instance)}"
|
self.cli["sync"].append(cli)
|
||||||
self.cli["sync"].append(cli)
|
operation = "disable"
|
||||||
operation = "disable"
|
if interface.is_qinx(self.cfg, member_ifname):
|
||||||
if interface.is_qinx(self.cfg, member_ifname):
|
operation = "pop 2"
|
||||||
operation = "pop 2"
|
elif interface.is_sub(self.cfg, member_ifname):
|
||||||
elif interface.is_sub(self.cfg, member_ifname):
|
operation = "pop 1"
|
||||||
operation = "pop 1"
|
cli = (
|
||||||
cli = f"set interface l2 tag-rewrite {member_ifname} {operation}"
|
f"set interface l2 tag-rewrite {member_ifname} {operation}"
|
||||||
self.cli["sync"].append(cli)
|
)
|
||||||
|
self.cli["sync"].append(cli)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def sync_l2xcs(self):
|
def sync_l2xcs(self):
|
||||||
|
Reference in New Issue
Block a user