diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2025-02-12 09:30:11 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-12 09:30:11 -0500 |
| commit | 6d933fcbc31d13e8547086975c5d6671b9399d8d (patch) | |
| tree | 412664dfdbf8eebc230e4e279e2237a39ac0d110 /lib/zclient.c | |
| parent | 8edcdf014938ef5edd42f620d7efe2928d6a7572 (diff) | |
| parent | a04474c061c99db9284744389b95a2ac858ecf7e (diff) | |
Merge pull request #18083 from FRRouting/mergify/bp/dev/10.3/pr-17901
lib: actually hash all 16 bytes of IPv6 addresses, not just 4 (backport #17901)
Diffstat (limited to 'lib/zclient.c')
| -rw-r--r-- | lib/zclient.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/zclient.c b/lib/zclient.c index d8c75c9029..5deea8f0cf 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -2300,7 +2300,27 @@ struct nexthop *nexthop_from_zapi_nexthop(const struct zapi_nexthop *znh) n->type = znh->type; n->vrf_id = znh->vrf_id; n->ifindex = znh->ifindex; - n->gate = znh->gate; + + /* only copy values that have meaning - make sure "spare bytes" are + * left zeroed for hashing (look at _nexthop_hash_bytes) + */ + switch (znh->type) { + case NEXTHOP_TYPE_BLACKHOLE: + n->bh_type = znh->bh_type; + break; + case NEXTHOP_TYPE_IPV4: + case NEXTHOP_TYPE_IPV4_IFINDEX: + n->gate.ipv4 = znh->gate.ipv4; + break; + case NEXTHOP_TYPE_IPV6: + case NEXTHOP_TYPE_IPV6_IFINDEX: + n->gate.ipv6 = znh->gate.ipv6; + break; + case NEXTHOP_TYPE_IFINDEX: + /* nothing, ifindex is always copied */ + break; + } + n->srte_color = znh->srte_color; n->weight = znh->weight; |
