/* An ordinary bridge port has 1 interface.
* A bridge port for bonding has at least 2 interfaces. */
struct list ifaces; /* List of "struct iface"s. */
/* An ordinary bridge port has 1 interface.
* A bridge port for bonding has at least 2 interfaces. */
struct list ifaces; /* List of "struct iface"s. */
LIST_FOR_EACH (iface, port_elem, &port->ifaces) {
shash_add_once(ifaces, iface->name, iface);
}
LIST_FOR_EACH (iface, port_elem, &port->ifaces) {
shash_add_once(ifaces, iface->name, iface);
}
if (is_gratuitous_arp(flow)) {
/* We don't want to learn from gratuitous ARP packets that are
* reflected back over bond slaves so we lock the learning table. */
if (is_gratuitous_arp(flow)) {
/* We don't want to learn from gratuitous ARP packets that are
* reflected back over bond slaves so we lock the learning table. */
vlan = *cfg->tag;
if (vlan >= 0 && vlan <= 4095) {
VLOG_DBG("port %s: assigning VLAN tag %d", port->name, vlan);
vlan = *cfg->tag;
if (vlan >= 0 && vlan <= 4095) {
VLOG_DBG("port %s: assigning VLAN tag %d", port->name, vlan);
shash_add_assert(&br->iface_by_name, iface->name, iface);
list_push_back(&port->ifaces, &iface->port_elem);
shash_add_assert(&br->iface_by_name, iface->name, iface);
list_push_back(&port->ifaces, &iface->port_elem);