lib, zebra: add ip_proto to the filter data structure

Add ip_proto to the filter data structure and also account
for it in the hash when stored.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2021-06-04 14:18:56 -04:00
parent 8ccbc778cf
commit b94683f0db
2 changed files with 8 additions and 4 deletions

View File

@ -68,6 +68,9 @@ struct pbr_filter {
/* Filter with fwmark */
uint32_t fwmark;
/* Filter with the ip protocol */
uint8_t ip_proto;
};
/*

View File

@ -166,10 +166,8 @@ uint32_t zebra_pbr_rules_hash_key(const void *arg)
rule->rule.action.table,
prefix_hash_key(&rule->rule.filter.src_ip));
if (rule->rule.filter.fwmark)
key = jhash_2words(rule->rule.filter.fwmark, rule->vrf_id, key);
else
key = jhash_1word(rule->vrf_id, key);
key = jhash_3words(rule->rule.filter.fwmark, rule->vrf_id,
rule->rule.filter.ip_proto, key);
key = jhash(rule->ifname, strlen(rule->ifname), key);
@ -207,6 +205,9 @@ bool zebra_pbr_rules_hash_equal(const void *arg1, const void *arg2)
if (r1->rule.filter.fwmark != r2->rule.filter.fwmark)
return false;
if (r1->rule.filter.ip_proto != r2->rule.filter.ip_proto)
return false;
if (!prefix_same(&r1->rule.filter.src_ip, &r2->rule.filter.src_ip))
return false;