pmlag

Poor man's link aggregation
git clone git://git.finwo.net/app/pmlag
Log | Files | Refs | README | LICENSE

commit cc37c74a40656cee0ac25368f8909f51842ade7a
parent 49c1ddb8e9302a5f2ffb40a6fc4241cfd545fd15
Author: Yersa Nordman <yersa@finwo.nl>
Date:   Wed, 22 Mar 2023 20:11:47 +0100

Save a memcmp call in rt_compare

Diffstat:
Msrc/util/routing-table.c | 11+++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/util/routing-table.c b/src/util/routing-table.c @@ -10,11 +10,18 @@ static int rt_compare(const void *a, const void *b, void *udata) { struct pmlag_rt_entry *ta = (struct pmlag_rt_entry *)a; struct pmlag_rt_entry *tb = (struct pmlag_rt_entry *)b; + int result; - // Attempt without memcmp (faster) + // Same pointer = match if (a == b) return 0; - return memcmp(ta->mac, tb->mac, ETH_ALEN); + // Check for ETH_ALEN, unrolled memcmp + if (( result = ((int)ta->mac[0] - (int)tb->mac[0]) )) return result; + if (( result = ((int)ta->mac[1] - (int)tb->mac[1]) )) return result; + if (( result = ((int)ta->mac[2] - (int)tb->mac[2]) )) return result; + if (( result = ((int)ta->mac[3] - (int)tb->mac[3]) )) return result; + if (( result = ((int)ta->mac[4] - (int)tb->mac[4]) )) return result; + return (int)ta->mac[5] - (int)tb->mac[5]; } static void rt_purge(const void *item, void *udata) {