]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: route-map: share aspath object compilation code where possible
authorTimo Teräs <timo.teras@iki.fi>
Tue, 20 May 2014 06:04:49 +0000 (09:04 +0300)
committerDaniel Walton <dwalton@cumulusnetworks.com>
Thu, 26 May 2016 01:06:16 +0000 (01:06 +0000)
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
(cherry picked from commit b304dcb8abc4e5b93f86a4024990980746e730be)

bgpd/bgp_routemap.c

index fc3d9b271b713b270d6bd1d23710306b72f88dcd..d8e26121757b5e97d47398537d4bb3daf234467f 100644 (file)
@@ -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' */