in ptf/saivlan.py [0:0]
def vlanFloodPruneTest(self):
"""
Verifies ingress port pruning on ports and LAG when flooding
"""
print("\nvlanFloodPruneTest()")
sai_thrift_set_vlan_attribute(
self.client, self.vlan10, learn_disable=True)
print("Mac Learning disabled on vlan 10")
self.port31_bp = sai_thrift_create_bridge_port(
self.client,
bridge_id=self.default_1q_bridge,
port_id=self.port31,
type=SAI_BRIDGE_PORT_TYPE_PORT,
admin_state=True)
lag = sai_thrift_create_lag(self.client)
lag_mbr1 = sai_thrift_create_lag_member(
self.client, lag_id=lag, port_id=self.port26)
lag_mbr2 = sai_thrift_create_lag_member(
self.client, lag_id=lag, port_id=self.port27)
lag_bp = sai_thrift_create_bridge_port(
self.client,
bridge_id=self.default_1q_bridge,
port_id=lag,
type=SAI_BRIDGE_PORT_TYPE_PORT,
admin_state=True)
vlan_member = sai_thrift_create_vlan_member(
self.client,
vlan_id=self.vlan10,
bridge_port_id=lag_bp,
vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_UNTAGGED)
sai_thrift_set_lag_attribute(self.client, lag, port_vlan_id=10)
pkt = simple_tcp_packet(eth_dst='00:66:66:66:66:66',
ip_dst='10.0.0.1',
ip_id=107,
ip_ttl=64,
pktlen=96)
exp_pkt = simple_tcp_packet(eth_dst='00:66:66:66:66:66',
ip_dst='10.0.0.1',
ip_id=107,
ip_ttl=64,
pktlen=96)
exp_pkt_tag = simple_tcp_packet(eth_dst='00:66:66:66:66:66',
ip_dst='10.0.0.1',
dl_vlan_enable=True,
vlan_vid=10,
ip_id=107,
ip_ttl=64,
pktlen=100)
try:
lag0_ports = [self.dev_port4, self.dev_port5, self.dev_port6]
lag1_ports = [self.dev_port26, self.dev_port27]
print("Sending packet from port30 -> "
"lag1, lag, port1, port24, port25")
send_packet(self, self.dev_port0, pkt)
verify_each_packet_on_multiple_port_lists(
self,
[exp_pkt] * 3 + [exp_pkt_tag] * 2,
[lag0_ports, lag1_ports, [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
print("Add a new lag with no memmbers to vlan 10. "
"Packet output will not change")
lag2 = sai_thrift_create_lag(self.client)
lag2_bp = sai_thrift_create_bridge_port(
self.client,
bridge_id=self.default_1q_bridge,
port_id=lag2,
type=SAI_BRIDGE_PORT_TYPE_PORT,
admin_state=True)
vlan_member2 = sai_thrift_create_vlan_member(
self.client,
vlan_id=self.vlan10,
bridge_port_id=lag2_bp,
vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_UNTAGGED)
sai_thrift_set_lag_attribute(self.client, lag2, port_vlan_id=10)
send_packet(self, self.dev_port0, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 3 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
print("Add port %d to the new lag" % (self.dev_port30))
lag_mbr3 = sai_thrift_create_lag_member(
self.client, lag_id=lag2, port_id=self.port30)
lag2_ports = [self.dev_port30]
print("Sending packet from port0 -> "
"lag1, lag, new lag, port1, port24, port25")
send_packet(self, self.dev_port0, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 4 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, lag2_ports, [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
print("Sending packet from port30 -> "
"lag1, lag, port1, port0, port24, port25")
send_packet(self, self.dev_port30, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 4 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, [self.dev_port0], [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
lag_mbr4 = sai_thrift_create_lag_member(
self.client, lag_id=lag2, port_id=self.port31)
lag2_ports = [self.dev_port30, self.dev_port31]
print("Sending packet from port0 -> "
"lag1, lag, new lag, port1, port24, port25")
send_packet(self, self.dev_port0, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 4 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, lag2_ports, [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
print("Sending packet from port31 -> "
"lag1, lag, port1, port0, port24, port25")
send_packet(self, self.dev_port31, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 4 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, [self.dev_port0], [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
print("Remove port %d from new lag" % (self.dev_port31))
sai_thrift_remove_lag_member(self.client, lag_mbr4)
lag2_ports = [self.dev_port30]
print("Sending packet from port0 -> "
"lag1, lag, new lag, port1, port24, port25")
send_packet(self, self.dev_port0, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 4 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, lag2_ports, [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
print("Add port %d to vlan 10. Verify if it is now part of flood "
"list" % (self.dev_port31))
vlan_member3 = sai_thrift_create_vlan_member(
self.client,
vlan_id=self.vlan10,
bridge_port_id=self.port31_bp,
vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_UNTAGGED)
sai_thrift_set_port_attribute(
self.client, self.port31, port_vlan_id=10)
print("Sending packet from port0 -> "
"lag1, lag, new lag, port1, port24, port25, port31")
send_packet(self, self.dev_port0, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 5 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, lag2_ports,
[self.dev_port24], [self.dev_port31],
[self.dev_port1], [self.dev_port25]])
print("Sending packet from port31 -> "
"lag1, lag, new lag, port1, port0, port24, port25")
send_packet(self, self.dev_port31, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 5 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, lag2_ports,
[self.dev_port0], [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
sai_thrift_set_port_attribute(
self.client, self.port31, port_vlan_id=1)
self.client.sai_thrift_remove_vlan_member(
vlan_member3) # Remove port 31 from vlan 10
sai_thrift_remove_lag_member(
self.client, lag_mbr3) # Remove port 30 from new lag
print("Remove port %d from new lag. "
"No more packets should be seen now" % (self.dev_port30))
print("Sending packet from port 0 -> "
"lag0, lag, port1, port24, port25")
send_packet(self, self.dev_port0, pkt)
verify_each_packet_on_multiple_port_lists(
self,
exp_pkt * 3 + exp_pkt_tag * 2,
[lag0_ports, lag1_ports, [self.dev_port24],
[self.dev_port1], [self.dev_port25]])
finally:
sai_thrift_set_lag_attribute(self.client, lag, port_vlan_id=1)
sai_thrift_set_lag_attribute(self.client, lag2, port_vlan_id=1)
self.client.sai_thrift_remove_vlan_member(vlan_member)
self.client.sai_thrift_remove_vlan_member(vlan_member2)
sai_thrift_remove_lag_member(self.client, lag_mbr1)
sai_thrift_remove_lag_member(self.client, lag_mbr2)
sai_thrift_remove_bridge_port(self.client, lag_bp)
sai_thrift_remove_bridge_port(self.client, lag2_bp)
sai_thrift_remove_lag(self.client, lag)
sai_thrift_remove_lag(self.client, lag2)
sai_thrift_set_vlan_attribute(
self.client, self.vlan10, learn_disable=False)
sai_thrift_remove_bridge_port(self.client, self.port31_bp)