On 2025-08-01 10:43 PM, Ilya Maximets wrote: > External email: Use caution opening links or attachments > > > On 7/23/25 3:12 PM, Dima Chumak via dev wrote: >> Introduce support for route lookup across several routing tables >> following a priority from highest to lowest. >> >> To properly prioritize route lookup order, the single router table in >> OVS is now split into three tables: local, main and default. >> Corresponding routing rules are created by default, where local table >> has the highest priority and main and default tables have two lowest >> priorities respectively. All non-standard tables can be added with a >> priority in between local and main. >> >> Non-standard routing tables are created by reading the Routing Policy > > Why only the non-standard tables? > >> Database (RPDB) from the kernel, on systems that support it, and >> importing only those tables which are referenced in the RPDB rules with >> a table lookup action. The table IDs and rule priority are copied from >> the kernel RPDB as is. >> >> Current implementation only supports RPDB rules with a source address >> selector, in form of '[not] from IP' match. >> >> Signed-off-by: Dima Chumak <dchu...@nvidia.com> >> --- >> lib/ovs-router.c | 231 +++++++++++++++++++++++++++++------ >> lib/ovs-router.h | 7 ++ >> lib/packets.c | 20 +++ >> lib/packets.h | 2 + >> lib/route-table-bsd.c | 4 +- >> lib/route-table-stub.c | 4 +- >> lib/route-table.c | 225 ++++++++++++++++++++++++++++++++-- >> lib/route-table.h | 18 ++- >> tests/test-lib-route-table.c | 5 +- >> 9 files changed, 465 insertions(+), 51 deletions(-)
<snip> >> +bool >> +ovs_router_is_referenced(uint32_t table) >> +{ >> + struct router_rule *rule; >> + >> + if (route_table_is_standard_id(table)) { >> + return true; >> + } >> + >> + PVECTOR_FOR_EACH (rule, &rules) { >> + if (rule->lookup_table == table) { >> + return true; >> + } >> + } > > A lookup in the hash map may be better here instead of iteration. > If I understand it right, this would require a dedicated hash table to store table IDs from the rule list. And the value stored would probably be refcounted because one table can appear multiple times in the rule list. I can add it as a follow up optimization change, what do you think? Alternatively, if we try to consult the clsmap hash to check if table already exists it will prevent the logic in route_table_change() to work correctly - a new table could never be synchronized from the kernel because it would be considered as un-referenced. Thanks, Dima <snip> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev