X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fvom%2Froute.cpp;h=ec56c44a0d7758132cf8b0c02604f66d4d12654a;hb=25b0494;hp=78ea8cebfadbecc0c32b8bb1f536c54efeeec3ee;hpb=f068c3ed296c49dfbfe17677fc1ad2428fb4e3e4;p=vpp.git diff --git a/src/vpp-api/vom/route.cpp b/src/vpp-api/vom/route.cpp index 78ea8cebfad..ec56c44a0d7 100644 --- a/src/vpp-api/vom/route.cpp +++ b/src/vpp-api/vom/route.cpp @@ -15,7 +15,7 @@ #include "vom/route.hpp" #include "vom/route_cmds.hpp" -#include "vom/singular_db.hpp" +#include "vom/singular_db_funcs.hpp" namespace VOM { namespace route { @@ -367,7 +367,7 @@ ip_route::singular() const void ip_route::dump(std::ostream& os) { - m_db.dump(os); + db_dump(m_db, os); } ip_route::event_handler::event_handler() @@ -403,7 +403,7 @@ ip_route::event_handler::handle_populate(const client_db::key_t& key) * populating the route domain here */ route_domain rd_temp(payload.table_id); - std::shared_ptr rd = route_domain::find(rd_temp); + std::shared_ptr rd = route_domain::find(payload.table_id); if (!rd) { OM::commit(key, rd_temp); } @@ -424,10 +424,21 @@ ip_route::event_handler::handle_populate(const client_db::key_t& key) path path_v4(path::special_t::PROHIBIT); ip_r.add(path_v4); } else { - std::shared_ptr itf = interface::find(p.sw_if_index); boost::asio::ip::address address = from_bytes(0, p.next_hop); - path path_v4(address, *itf, p.weight, p.preference); - ip_r.add(path_v4); + std::shared_ptr itf = interface::find(p.sw_if_index); + if (itf) { + if (p.is_dvr) { + path path_v4(*itf, nh_proto_t::IPV4, route::path::flags_t::DVR, + p.weight, p.preference); + ip_r.add(path_v4); + } else { + path path_v4(address, *itf, p.weight, p.preference); + ip_r.add(path_v4); + } + } else { + path path_v4(rd_temp, address, p.weight, p.preference); + ip_r.add(path_v4); + } } } VOM_LOG(log_level_t::DEBUG) << "ip-route-dump: " << ip_r.to_string(); @@ -445,7 +456,7 @@ ip_route::event_handler::handle_populate(const client_db::key_t& key) prefix_t pfx(1, payload.address, payload.address_length); route_domain rd_temp(payload.table_id); - std::shared_ptr rd = route_domain::find(rd_temp); + std::shared_ptr rd = route_domain::find(payload.table_id); if (!rd) { OM::commit(key, rd_temp); } @@ -468,8 +479,19 @@ ip_route::event_handler::handle_populate(const client_db::key_t& key) } else { std::shared_ptr itf = interface::find(p.sw_if_index); boost::asio::ip::address address = from_bytes(1, p.next_hop); - path path_v6(address, *itf, p.weight, p.preference); - ip_r.add(path_v6); + if (itf) { + if (p.is_dvr) { + path path_v6(*itf, nh_proto_t::IPV6, route::path::flags_t::DVR, + p.weight, p.preference); + ip_r.add(path_v6); + } else { + path path_v6(address, *itf, p.weight, p.preference); + ip_r.add(path_v6); + } + } else { + path path_v6(rd_temp, address, p.weight, p.preference); + ip_r.add(path_v6); + } } } VOM_LOG(log_level_t::DEBUG) << "ip-route-dump: " << ip_r.to_string(); @@ -486,13 +508,13 @@ ip_route::event_handler::handle_populate(const client_db::key_t& key) dependency_t ip_route::event_handler::order() const { - return (dependency_t::BINDING); + return (dependency_t::TABLE); } void ip_route::event_handler::show(std::ostream& os) { - m_db.dump(os); + db_dump(m_db, os); } std::ostream&