summaryrefslogtreecommitdiffstats
path: root/src/vpp-api/vom/interface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vpp-api/vom/interface.cpp')
-rw-r--r--src/vpp-api/vom/interface.cpp55
1 files changed, 52 insertions, 3 deletions
diff --git a/src/vpp-api/vom/interface.cpp b/src/vpp-api/vom/interface.cpp
index 9fa96af2d97..f943bf4a616 100644
--- a/src/vpp-api/vom/interface.cpp
+++ b/src/vpp-api/vom/interface.cpp
@@ -38,7 +38,8 @@ interface::event_handler interface::m_evh;
*/
interface::interface(const std::string& name,
interface::type_t itf_type,
- interface::admin_state_t itf_state)
+ interface::admin_state_t itf_state,
+ const std::string& tag)
: m_hdl(handle_t::INVALID)
, m_name(name)
, m_type(itf_type)
@@ -46,13 +47,15 @@ interface::interface(const std::string& name,
, m_table_id(route::DEFAULT_TABLE)
, m_l2_address(l2_address_t::ZERO, rc_t::UNSET)
, m_oper(oper_state_t::DOWN)
+ , m_tag(tag)
{
}
interface::interface(const std::string& name,
interface::type_t itf_type,
interface::admin_state_t itf_state,
- const route_domain& rd)
+ const route_domain& rd,
+ const std::string& tag)
: m_hdl(handle_t::INVALID)
, m_name(name)
, m_type(itf_type)
@@ -61,6 +64,7 @@ interface::interface(const std::string& name,
, m_table_id(m_rd->table_id())
, m_l2_address(l2_address_t::ZERO, rc_t::UNSET)
, m_oper(oper_state_t::DOWN)
+ , m_tag(tag)
{
}
@@ -73,6 +77,7 @@ interface::interface(const interface& o)
, m_table_id(o.m_table_id)
, m_l2_address(o.m_l2_address)
, m_oper(o.m_oper)
+ , m_tag(o.m_tag)
{
}
@@ -221,7 +226,13 @@ interface::to_string() const
}
s << " admin-state:" << m_state.to_string()
- << " oper-state:" << m_oper.to_string() << "]";
+ << " oper-state:" << m_oper.to_string();
+
+ if (!m_tag.empty()) {
+ s << " tag:[" << m_tag << "]";
+ }
+
+ s << "]";
return (s.str());
}
@@ -246,10 +257,20 @@ interface::mk_create_cmd(std::queue<cmd*>& q)
} else if (type_t::BVI == m_type) {
q.push(new interface_cmds::loopback_create_cmd(m_hdl, m_name));
q.push(new interface_cmds::set_tag(m_hdl, m_name));
+ /*
+ * set the m_tag for pretty-print
+ */
+ m_tag = m_name;
} else if (type_t::AFPACKET == m_type) {
q.push(new interface_cmds::af_packet_create_cmd(m_hdl, m_name));
+ if (!m_tag.empty())
+ q.push(new interface_cmds::set_tag(m_hdl, m_tag));
} else if (type_t::TAP == m_type) {
q.push(new interface_cmds::tap_create_cmd(m_hdl, m_name));
+ if (!m_tag.empty())
+ q.push(new interface_cmds::set_tag(m_hdl, m_tag));
+ } else if (type_t::VHOST == m_type) {
+ q.push(new interface_cmds::vhost_create_cmd(m_hdl, m_name, m_tag));
} else {
m_hdl.set(rc_t::OK);
}
@@ -266,6 +287,8 @@ interface::mk_delete_cmd(std::queue<cmd*>& q)
q.push(new interface_cmds::af_packet_delete_cmd(m_hdl, m_name));
} else if (type_t::TAP == m_type) {
q.push(new interface_cmds::tap_delete_cmd(m_hdl));
+ } else if (type_t::VHOST == m_type) {
+ q.push(new interface_cmds::vhost_delete_cmd(m_hdl, m_name));
}
return (q);
@@ -345,6 +368,12 @@ interface::update(const interface& desired)
}
void
+interface::set(const admin_state_t& state)
+{
+ m_state = state;
+}
+
+void
interface::set(const l2_address_t& addr)
{
assert(rc_t::UNSET == m_l2_address.rc());
@@ -365,6 +394,12 @@ interface::set(const oper_state_t& state)
}
void
+interface::set(const std::string& tag)
+{
+ m_tag = tag;
+}
+
+void
interface::enable_stats_i(interface::stat_listener& el)
{
if (!m_stats) {
@@ -429,6 +464,20 @@ interface::dump(std::ostream& os)
void
interface::event_handler::handle_populate(const client_db::key_t& key)
{
+ std::shared_ptr<interface_cmds::vhost_dump_cmd> vcmd =
+ std::make_shared<interface_cmds::vhost_dump_cmd>();
+
+ HW::enqueue(vcmd);
+ HW::write();
+
+ for (auto& vhost_itf_record : *vcmd) {
+ std::shared_ptr<interface> vitf =
+ interface_factory::new_vhost_user_interface(
+ vhost_itf_record.get_payload());
+ VOM_LOG(log_level_t::DEBUG) << "dump: " << vitf->to_string();
+ OM::commit(key, *vitf);
+ }
+
/*
* dump VPP current states
*/