X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fvom%2Finterface_factory.cpp;h=417f4775a7a3ddcd299e98bbba22ca20092f06dd;hb=ed76ee24dfe76fb9400470a4efb3871acd37cad9;hp=ef26c3293d3639f3b40276200dcf89996ffbd6a0;hpb=de91006803f823a149b04738dd2bbfe18bfe9791;p=vpp.git diff --git a/src/vpp-api/vom/interface_factory.cpp b/src/vpp-api/vom/interface_factory.cpp index ef26c3293d3..417f4775a7a 100644 --- a/src/vpp-api/vom/interface_factory.cpp +++ b/src/vpp-api/vom/interface_factory.cpp @@ -15,6 +15,8 @@ #include +#include "vom/bond_interface.hpp" +#include "vom/bond_member.hpp" #include "vom/interface_factory.hpp" #include "vom/sub_interface.hpp" #include "vom/tap_interface.hpp" @@ -83,7 +85,7 @@ interface_factory::new_interface(const vapi_payload_sw_interface_details& vd) */ } else if (interface::type_t::VHOST == type) { /* - * vhost interfaces already exist in db, look for it using + * vhost interface already exist in db, look for it using * sw_if_index */ sp = interface::find(hdl); @@ -93,6 +95,10 @@ interface_factory::new_interface(const vapi_payload_sw_interface_details& vd) if (!tag.empty()) sp->set(tag); } + } else if (interface::type_t::BOND == type) { + sp = bond_interface(name, state, l2_address, + bond_interface::mode_t::UNSPECIFIED) + .singular(); } else { sp = interface(name, type, state, tag).singular(); sp->set(l2_address); @@ -121,6 +127,40 @@ interface_factory::new_vhost_user_interface( sp->set(hdl); return (sp); } + +std::shared_ptr +interface_factory::new_bond_interface( + const vapi_payload_sw_interface_bond_details& vd) +{ + std::shared_ptr sp; + std::string name = reinterpret_cast(vd.interface_name); + handle_t hdl(vd.sw_if_index); + bond_interface::mode_t mode = + bond_interface::mode_t::from_numeric_val(vd.mode); + bond_interface::lb_t lb = bond_interface::lb_t::from_numeric_val(vd.lb); + sp = bond_interface::find(hdl); + if (sp) { + sp->set(mode); + sp->set(lb); + } + return (sp); +} + +bond_member +interface_factory::new_bond_member_interface( + const vapi_payload_sw_interface_slave_details& vd) +{ + std::shared_ptr sp; + std::string name = reinterpret_cast(vd.interface_name); + handle_t hdl(vd.sw_if_index); + bond_member::mode_t mode = + bond_member::mode_t::from_numeric_val(vd.is_passive); + bond_member::rate_t rate = + bond_member::rate_t::from_numeric_val(vd.is_long_timeout); + std::shared_ptr itf = interface::find(hdl); + bond_member bm(*itf, mode, rate); + return (bm); +} }; // namespace VOM /*