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.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/vpp-api/vom/interface.cpp b/src/vpp-api/vom/interface.cpp
index 1c90a31bb32..8f1023d2273 100644
--- a/src/vpp-api/vom/interface.cpp
+++ b/src/vpp-api/vom/interface.cpp
@@ -54,10 +54,10 @@ interface::interface(const handle_t& handle,
const std::string& name,
interface::type_t type,
interface::admin_state_t state)
- : m_hdl(handle)
+ : m_hdl(handle, rc_t::OK)
, m_name(name)
, m_type(type)
- , m_state(state)
+ , m_state(state, rc_t::OK)
, m_table_id(route::DEFAULT_TABLE)
, m_l2_address(l2_address)
, m_oper(oper_state_t::DOWN)
@@ -278,9 +278,19 @@ interface::update(const interface& desired)
if (rc_t::OK != m_hdl.rc()) {
std::queue<cmd*> cmds;
HW::enqueue(mk_create_cmd(cmds));
+ /*
+ * interface create now, so we can barf early if it fails
+ */
+ HW::write();
}
/*
+ * If the interface is not created do other commands should be issued
+ */
+ if (rc_t::OK != m_hdl.rc())
+ return;
+
+ /*
* change the interface state to that which is deisred
*/
if (m_state.update(desired.m_state)) {