X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fvom%2Fvom%2Finterface_cmds.cpp;h=8c47b9f4c454aaf525f4250e772647bb54694741;hb=053204ab039d34a990ff0e14c32ce3b294fcce0e;hp=3a7fb50f64b82f854f12d417446097586db3b6d5;hpb=51edc3ab01e0af58d457da97bf6ca9cc3ebc6b8d;p=vpp.git diff --git a/extras/vom/vom/interface_cmds.cpp b/extras/vom/vom/interface_cmds.cpp index 3a7fb50f64b..8c47b9f4c45 100644 --- a/extras/vom/vom/interface_cmds.cpp +++ b/extras/vom/vom/interface_cmds.cpp @@ -23,6 +23,41 @@ DEFINE_VAPI_MSG_IDS_VHOST_USER_API_JSON; namespace VOM { namespace interface_cmds { + +bvi_create_cmd::bvi_create_cmd(HW::item& item, + const std::string& name) + : create_cmd(item, name) +{ +} + +rc_t +bvi_create_cmd::issue(connection& con) +{ + msg_t req(con.ctx(), std::ref(*this)); + + auto& payload = req.get_request().get_payload(); + + payload.user_instance = ~0; + + VAPI_CALL(req.execute()); + + wait(); + + if (m_hw_item.rc() == rc_t::OK) { + insert_interface(); + } + + return rc_t::OK; +} +std::string +bvi_create_cmd::to_string() const +{ + std::ostringstream s; + s << "bvi-itf-create: " << m_hw_item.to_string() << " name:" << m_name; + + return (s.str()); +} + loopback_create_cmd::loopback_create_cmd(HW::item& item, const std::string& name) : create_cmd(item, name) @@ -138,6 +173,37 @@ vhost_create_cmd::to_string() const return (s.str()); } +bvi_delete_cmd::bvi_delete_cmd(HW::item& item) + : delete_cmd(item) +{ +} + +rc_t +bvi_delete_cmd::issue(connection& con) +{ + msg_t req(con.ctx(), std::ref(*this)); + + auto& payload = req.get_request().get_payload(); + payload.sw_if_index = m_hw_item.data().value(); + + VAPI_CALL(req.execute()); + + wait(); + m_hw_item.set(rc_t::NOOP); + + remove_interface(); + return rc_t::OK; +} + +std::string +bvi_delete_cmd::to_string() const +{ + std::ostringstream s; + s << "bvi-itf-delete: " << m_hw_item.to_string(); + + return (s.str()); +} + loopback_delete_cmd::loopback_delete_cmd(HW::item& item) : delete_cmd(item) { @@ -252,7 +318,7 @@ state_change_cmd::issue(connection& con) auto& payload = req.get_request().get_payload(); payload.sw_if_index = m_hdl.data().value(); - payload.admin_up_down = m_hw_item.data().value(); + payload.flags = (vapi_enum_if_status_flags)m_hw_item.data().value(); VAPI_CALL(req.execute()); @@ -450,8 +516,8 @@ events_cmd::notify() std::shared_ptr sp = interface::find(handle); if (sp) { - interface::oper_state_t oper_state = - interface::oper_state_t::from_int(payload.link_up_down); + interface::oper_state_t oper_state = interface::oper_state_t::from_int( + payload.flags & vapi_enum_if_status_flags::IF_STATUS_API_FLAG_LINK_UP); VOM_LOG(log_level_t::DEBUG) << "Interface Event: " << sp->to_string() << " state: " << oper_state.to_string(); @@ -569,8 +635,8 @@ set_tag::issue(connection& con) auto& payload = req.get_request().get_payload(); payload.is_add = 1; payload.sw_if_index = m_hw_item.data().value(); - memset(payload.tag, 0, sizeof(payload.tag)); - memcpy(payload.tag, m_name.c_str(), m_name.length()); + memset(payload.tag.buf, 0, payload.tag.length); + memcpy(payload.tag.buf, m_name.c_str(), m_name.length()); VAPI_CALL(req.execute());