From ca9ca7537065f2d1b627ed9111e44c2c227258a7 Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Fri, 19 Mar 2010 12:08:16 -0400 Subject: [PATCH] classifier: Check all rules of equal priority when inserting. When adding a new classifier rule we check if there is a rule of the same priority first and overwrite it before inserting a new rule. Previously we would stop looking if we found one rule in the correct bucket with the same priority, even if it didn't match. This keeps going until we either find a matching rule or we run out of equal priority rules. Reported-by: Tetsuo NAKAGAWA --- lib/classifier.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/classifier.c b/lib/classifier.c index 7bdc4931a..ae2070d28 100644 --- a/lib/classifier.c +++ b/lib/classifier.c @@ -626,14 +626,14 @@ bucket_insert(struct cls_bucket *bucket, struct cls_rule *rule) { struct cls_rule *pos; LIST_FOR_EACH (pos, struct cls_rule, node.list, &bucket->rules) { - if (pos->priority <= rule->priority) { - if (pos->priority == rule->priority - && pos->wc.wildcards == rule->wc.wildcards + if (pos->priority == rule->priority) { + if (pos->wc.wildcards == rule->wc.wildcards && rules_match_1wild(pos, rule, rule->table_idx)) { list_replace(&rule->node.list, &pos->node.list); return pos; } + } else if (pos->priority < rule->priority) { break; } } -- 2.43.0