summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2014-05-20 09:04:49 +0300
committerDaniel Walton <dwalton@cumulusnetworks.com>2016-05-26 01:06:16 +0000
commit374f12f955bd9710310888ce51a1fb640d326762 (patch)
tree997093e32beb4d6521f3ad05399f954b48ebcd88
parent515e500c27b769a446e04de5d09a947b10ea691a (diff)
bgpd: route-map: share aspath object compilation code where possible
Signed-off-by: Timo Teräs <timo.teras@iki.fi> (cherry picked from commit b304dcb8abc4e5b93f86a4024990980746e730be)
-rw-r--r--bgpd/bgp_routemap.c72
1 files 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' */