76 Dbg info(Dbg::Port, Dbg::Info);
84 info.printf(
"%s %-20s -> ", !p ?
"learned " :
"replaced",
91 auto status = _mac_table.emplace(src, &_entries[_rr_index]);
94 if (_entries[_rr_index].port)
97 _mac_table.erase(_entries[_rr_index].addr);
100 _entries[_rr_index].port = port;
101 _entries[_rr_index].addr = src;
102 _rr_index = (_rr_index + 1U) % Size;
107 status.first->second->port = port;
124 typedef std::pair<const Mac_addr, Entry*> TableEntry;
126 auto iter = _mac_table.begin();
127 while ((iter = std::find_if(iter, _mac_table.end(),
128 [port](TableEntry
const &p)
129 { return p.second->port == port; }))
132 iter->second->port =
nullptr;
133 iter->second->addr = Mac_addr::Addr_unknown;
134 iter = _mac_table.erase(iter);
137 assert(std::find_if(_mac_table.begin(), _mac_table.end(),
138 [port](TableEntry
const &p)
139 { return p.second->port == port; }) == _mac_table.end());