bgpd: "Intern" communities in route maps

* bgp_community.[ch]: (community_lookup) New helper function to look
  up a community list in the hash table.

* bgp_routemap.c: A new community structure was being allocated for
  every BGP update which matched a route map which set a community.
  This behavior led to rapid growth in the memory consumed by bgpd.
  Adding the communities to the hash table addresses the memory
  growth, but may introduce a problem in modifying or deleting the
  'set community' statement in the route map.
3 files changed