summaryrefslogtreecommitdiff
path: root/bgpd/bgp_community.c
diff options
context:
space:
mode:
authorMichael Lambert <lambert@psc.edu>2010-07-24 12:44:07 -0400
committerPaul Jakma <paul@quagga.net>2011-03-21 17:30:52 +0000
commit2c9fd7e07283b8904ef20030c9dadb032e999b12 (patch)
treee134706cdc5c91daf0002ef3e2d22d12b09cb758 /bgpd/bgp_community.c
parent95cbbd2ace2f88019a7a54e67b4b12aaeda177f7 (diff)
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.
Diffstat (limited to 'bgpd/bgp_community.c')
-rw-r--r--bgpd/bgp_community.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/bgpd/bgp_community.c b/bgpd/bgp_community.c
index ae1d7a15..68383adf 100644
--- a/bgpd/bgp_community.c
+++ b/bgpd/bgp_community.c
@@ -292,6 +292,13 @@ community_com2str (struct community *com)
return str;
}
+/* Find an 'intern'ed community structure */
+struct community *
+community_lookup (struct community *com)
+{
+ return (struct community *) hash_lookup (comhash, com);
+}
+
/* Intern communities attribute. */
struct community *
community_intern (struct community *com)