diff options
author | Jorge Boncompte [DTI2] <jorge@dti2.net> | 2012-05-07 16:52:55 +0000 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2012-05-22 20:25:44 +0200 |
commit | c76275ee960c708408646d8a680b201b27cb9c1a (patch) | |
tree | 59daf9a650950d35aa5350270118cd94e4a1fde3 /bgpd/bgp_community.c | |
parent | 6d85b15bbb2fd3c263d5d4b402c88ff348af877b (diff) |
bgpd: optimize loops on [e]community_hash_make()
This change reduces loop count. Less jumps.
* bgp_community.c: One loop per community.
* bgp_ecommunity.c: One loop per ecommunity.
Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'bgpd/bgp_community.c')
-rw-r--r-- | bgpd/bgp_community.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/bgpd/bgp_community.c b/bgpd/bgp_community.c index 2ba45f6e..fc1bef88 100644 --- a/bgpd/bgp_community.c +++ b/bgpd/bgp_community.c @@ -394,16 +394,19 @@ community_str (struct community *com) unsigned int community_hash_make (struct community *com) { + unsigned char *pnt = (unsigned char *)com->val; + int size = com->size * 4; + unsigned int key = 0; int c; - unsigned int key; - unsigned char *pnt; - key = 0; - pnt = (unsigned char *)com->val; - - for(c = 0; c < com->size * 4; c++) - key += pnt[c]; - + for (c = 0; c < size; c += 4) + { + key += pnt[c]; + key += pnt[c + 1]; + key += pnt[c + 2]; + key += pnt[c + 3]; + } + return key; } |