From 374f12f955bd9710310888ce51a1fb640d326762 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timo=20Ter=C3=A4s?= Date: Tue, 20 May 2014 09:04:49 +0300 Subject: [PATCH] bgpd: route-map: share aspath object compilation code where possible MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Timo Teräs (cherry picked from commit b304dcb8abc4e5b93f86a4024990980746e730be) --- bgpd/bgp_routemap.c | 72 +++++++++++++++------------------------------ 1 file changed, 24 insertions(+), 48 deletions(-) diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index fc3d9b271b..d8e2612175 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -108,6 +108,26 @@ o Local extensions */ + /* generic as path object to be shared in multiple rules */ + +static void * +route_aspath_compile (const char *arg) +{ + struct aspath *aspath; + + aspath = aspath_str2aspath (arg); + if (! aspath) + return NULL; + return aspath; +} + +static void +route_aspath_free (void *rule) +{ + struct aspath *aspath = rule; + aspath_free (aspath); +} + /* 'match peer (A.B.C.D|X:X::X:X)' */ /* Compares the peer specified in the 'match peer' clause with the peer @@ -1430,33 +1450,13 @@ route_set_aspath_prepend (void *rule, struct prefix *prefix, route_map_object_t return RMAP_OKAY; } -/* Compile function for as-path prepend. */ -static void * -route_set_aspath_prepend_compile (const char *arg) -{ - struct aspath *aspath; - - aspath = aspath_str2aspath (arg); - if (! aspath) - return NULL; - return aspath; -} - -/* Compile function for as-path prepend. */ -static void -route_set_aspath_prepend_free (void *rule) -{ - struct aspath *aspath = rule; - aspath_free (aspath); -} - /* Set as-path prepend rule structure. */ struct route_map_rule_cmd route_set_aspath_prepend_cmd = { "as-path prepend", route_set_aspath_prepend, - route_set_aspath_prepend_compile, - route_set_aspath_prepend_free, + route_aspath_compile, + route_aspath_free, }; /* `set as-path exclude ASn' */ @@ -1484,37 +1484,13 @@ route_set_aspath_exclude (void *rule, struct prefix *dummy, route_map_object_t t return RMAP_OKAY; } -/* FIXME: consider using route_set_aspath_prepend_compile() and - * route_set_aspath_prepend_free(), which two below function are - * exact clones of. - */ - -/* Compile function for as-path exclude. */ -static void * -route_set_aspath_exclude_compile (const char *arg) -{ - struct aspath *aspath; - - aspath = aspath_str2aspath (arg); - if (! aspath) - return NULL; - return aspath; -} - -static void -route_set_aspath_exclude_free (void *rule) -{ - struct aspath *aspath = rule; - aspath_free (aspath); -} - /* Set ASn exlude rule structure. */ struct route_map_rule_cmd route_set_aspath_exclude_cmd = { "as-path exclude", route_set_aspath_exclude, - route_set_aspath_exclude_compile, - route_set_aspath_exclude_free, + route_aspath_compile, + route_aspath_free, }; /* `set community COMMUNITY' */ -- 2.39.5