++ [email protected] On Fri, Apr 17, 2020 at 10:38 PM Yangchao Zhou <[email protected]> wrote:
> Hi Vladimir, > > Thanks, you are right. I saw that the next hop is also in lpm table > entries. > On the basis of the same route, skiping the table entries update only if > the next hop is also the same. > > On Fri, Apr 17, 2020 at 10:04 PM Medvedkin, Vladimir < > [email protected]> wrote: > >> Hi Zhou, >> >> NACK. >> This patch makes lpm inconsistent. >> From the programmers guide >> "If a rule with the same prefix is already present in the table, the next >> hop of the rule is updated." >> So, here in case of presence of a route, next hop will be updated only in >> rules_table which is helper data struct, but won't be updated in lpm data >> plane struct. >> >> -----Original Message----- >> From: Yangchao Zhou <[email protected]> >> Sent: Friday, April 17, 2020 2:49 PM >> To: [email protected] >> Cc: Richardson, Bruce <[email protected]>; Medvedkin, Vladimir < >> [email protected]> >> Subject: [PATCH] lpm: skip table entries update if rules found >> >> Table entries do not need to be updated if the same rules can be found. >> >> Signed-off-by: Yangchao Zhou <[email protected]> >> --- >> lib/librte_lpm/rte_lpm.c | 6 +++++- >> 1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/lib/librte_lpm/rte_lpm.c b/lib/librte_lpm/rte_lpm.c index >> 268756419..ee44fc4e5 100644 >> --- a/lib/librte_lpm/rte_lpm.c >> +++ b/lib/librte_lpm/rte_lpm.c >> @@ -287,7 +287,7 @@ rule_add(struct rte_lpm *lpm, uint32_t ip_masked, >> uint8_t depth, >> if (lpm->rules_tbl[rule_index].ip == ip_masked) { >> lpm->rules_tbl[rule_index].next_hop = >> next_hop; >> >> - return rule_index; >> + return -EEXIST; >> } >> } >> >> @@ -674,6 +674,10 @@ rte_lpm_add(struct rte_lpm *lpm, uint32_t ip, >> uint8_t depth, >> /* Add the rule to the rule table. */ >> rule_index = rule_add(lpm, ip_masked, depth, next_hop); >> >> + /* Skip table entries update if rule is found in rule table */ >> + if (rule_index == -EEXIST) >> + return 0; >> + >> /* If the is no space available for new rule return error. */ >> if (rule_index < 0) { >> return rule_index; >> -- >> 2.17.1 >> >>

