25 singular_db<l2_xconnect::key_t, l2_xconnect> l2_xconnect::m_db;
33 : m_east_itf(east_itf.singular())
34 , m_west_itf(west_itf.singular())
37 , m_vtr_op(l2_vtr::option_t::DISABLED,
rc_t::
UNSET)
43 : m_east_itf(o.m_east_itf)
44 , m_west_itf(o.m_west_itf)
45 , m_xconnect_east(o.m_xconnect_east)
46 , m_xconnect_west(o.m_xconnect_west)
47 , m_vtr_op(o.m_vtr_op)
48 , m_vtr_op_tag(o.m_vtr_op_tag)
55 if (m_east_itf->name() < m_west_itf->name())
56 return (std::make_pair(m_east_itf->key(), m_west_itf->key()));
57 return (std::make_pair(m_west_itf->key(), m_east_itf->key()));
63 return ((*m_east_itf == *l.m_east_itf) && (*m_west_itf == *l.m_west_itf));
66 std::shared_ptr<l2_xconnect>
69 return (m_db.find(
key));
75 if (m_xconnect_east && m_xconnect_west &&
79 m_xconnect_east, m_east_itf->handle(), m_west_itf->handle()));
81 m_xconnect_west, m_west_itf->handle(), m_east_itf->handle()));
90 if (m_xconnect_east && m_xconnect_west &&
94 m_xconnect_east, m_east_itf->handle(), m_west_itf->handle()));
96 m_xconnect_west, m_west_itf->handle(), m_east_itf->handle()));
101 new l2_vtr_cmds::set_cmd(m_vtr_op, m_east_itf->handle(), m_vtr_op_tag));
110 m_db.release(
key(),
this);
116 std::ostringstream s;
117 s <<
"L2-xconnect:[" << m_east_itf->to_string() <<
" "
118 << m_west_itf->to_string() <<
" " << m_xconnect_east.
to_string() <<
" "
141 m_xconnect_east, m_east_itf->handle(), m_west_itf->handle()));
143 m_xconnect_west, m_west_itf->handle(), m_east_itf->handle()));
149 if (m_vtr_op.
update(desired.m_vtr_op)) {
151 new l2_vtr_cmds::set_cmd(m_vtr_op, m_east_itf->handle(), m_vtr_op_tag));
155 std::shared_ptr<l2_xconnect>
156 l2_xconnect::find_or_add(
const l2_xconnect& temp)
158 return (m_db.find_or_add(temp.key(), temp));
161 std::shared_ptr<l2_xconnect>
164 return find_or_add(*
this);
180 l2_xconnect::event_handler::handle_replay()
191 std::shared_ptr<l2_xconnect_cmds::dump_cmd> cmd =
192 std::make_shared<l2_xconnect_cmds::dump_cmd>();
197 for (
auto& x_record : *cmd) {
198 auto& payload = x_record.get_payload();
201 <<
" east-itf: " << payload.rx_sw_if_index
202 <<
" west-itf: " << payload.tx_sw_if_index;
204 std::shared_ptr<interface> east_itf =
206 std::shared_ptr<interface> west_itf =
209 if (east_itf && west_itf) {
210 if (east_itf->name() > west_itf->name())
212 l2_xconnect l2_xc(*east_itf, *west_itf);
219 l2_xconnect::event_handler::order()
const