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>
diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c
index 9f4aaa4..5722425 100644
--- a/bgpd/bgp_ecommunity.c
+++ b/bgpd/bgp_ecommunity.c
@@ -233,15 +233,22 @@
 ecommunity_hash_make (void *arg)
 {
   const struct ecommunity *ecom = arg;
+  int size = ecom->size * ECOMMUNITY_SIZE;
+  u_int8_t *pnt = ecom->val;
+  unsigned int key = 0;
   int c;
-  unsigned int key;
-  u_int8_t *pnt;
 
-  key = 0;
-  pnt = ecom->val;
-  
-  for (c = 0; c < ecom->size * ECOMMUNITY_SIZE; c++)
-    key += pnt[c];
+  for (c = 0; c < size; c += ECOMMUNITY_SIZE)
+    {
+      key += pnt[c];
+      key += pnt[c + 1];
+      key += pnt[c + 2];
+      key += pnt[c + 3];
+      key += pnt[c + 4];
+      key += pnt[c + 5];
+      key += pnt[c + 6];
+      key += pnt[c + 7];
+    }
 
   return key;
 }