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

Reply via email to