+ def learn_hosts(self, bd_id, n_hosts_per_if):
+ """
+ Create L2 MAC packet stream with host MAC addresses per interface to
+ let the bridge domain learn these MAC addresses.
+
+ :param int bd_id: BD to teach
+ :param int n_hosts_per_if: number of hosts
+ """
+ self.vapi.bridge_flags(bd_id, 1, 1)
+ ifs = [self.pg_interfaces[i] for i in self.bd_ifs(bd_id)]
+ for pg_if in ifs:
+ swif = pg_if.sw_if_index
+ hosts = self.hosts[swif]
+ lhosts = self.learned_hosts[swif]
+ packets = []
+ for j in range(n_hosts_per_if):
+ host = hosts.pop()
+ lhosts.append(host)
+ packet = (Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac))
+ packets.append(packet)
+ pg_if.add_stream(packets)
+ self.logger.info("Sending broadcast eth frames for MAC learning")
+ self.pg_start()
+