]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/if_rmap.c
mpls: add support for LDP LSPs
[mirror_frr.git] / lib / if_rmap.c
index 7d049b87207d3e05e48370e6c0d3f3da045fcfc7..736f2e237d4803b6f3cea7bff35aad4705099229 100644 (file)
 #include "if.h"
 #include "if_rmap.h"
 
+DEFINE_MTYPE_STATIC(LIB, IF_RMAP,      "Interface route map")
+DEFINE_MTYPE_STATIC(LIB, IF_RMAP_NAME, "I.f. route map name")
+
 struct hash *ifrmaphash;
 
 /* Hook functions. */
 static void (*if_rmap_add_hook) (struct if_rmap *) = NULL;
 static void (*if_rmap_delete_hook) (struct if_rmap *) = NULL;
-\f
+
 static struct if_rmap *
 if_rmap_new (void)
 {
@@ -64,10 +67,13 @@ if_rmap_lookup (const char *ifname)
   struct if_rmap *if_rmap;
 
   /* temporary copy */
-  key.ifname = (char *)ifname;
+  key.ifname = (ifname) ? XSTRDUP (MTYPE_IF_RMAP_NAME, ifname) : NULL;
 
   if_rmap = hash_lookup (ifrmaphash, &key);
   
+  if (key.ifname)
+    XFREE(MTYPE_IF_RMAP_NAME, key.ifname);
+
   return if_rmap;
 }
 
@@ -86,7 +92,7 @@ if_rmap_hook_delete (void (*func) (struct if_rmap *))
 static void *
 if_rmap_hash_alloc (void *arg)
 {
-  struct if_rmap *ifarg = arg;
+  struct if_rmap *ifarg = (struct if_rmap *)arg;
   struct if_rmap *if_rmap;
 
   if_rmap = if_rmap_new ();
@@ -99,11 +105,17 @@ static struct if_rmap *
 if_rmap_get (const char *ifname)
 {
   struct if_rmap key;
+  struct if_rmap *ret;
 
   /* temporary copy */
-  key.ifname = (char *)ifname;
+  key.ifname = (ifname) ? XSTRDUP (MTYPE_IF_RMAP_NAME, ifname) : NULL;
+
+  ret = hash_get (ifrmaphash, &key, if_rmap_hash_alloc);
 
-  return (struct if_rmap *) hash_get (ifrmaphash, &key, if_rmap_hash_alloc);
+  if (key.ifname)
+    XFREE(MTYPE_IF_RMAP_NAME, key.ifname);
+
+  return ret;
 }
 
 static unsigned int
@@ -122,7 +134,7 @@ if_rmap_hash_cmp (const void *arg1, const void* arg2)
 
   return strcmp (if_rmap1->ifname, if_rmap2->ifname) == 0;
 }
-\f
+
 static struct if_rmap *
 if_rmap_set (const char *ifname, enum if_rmap_type type, 
              const char *routemap_name)
@@ -273,7 +285,7 @@ ALIAS (no_if_rmap,
        "Route map for input filtering\n"
        "Route map for output filtering\n"
        "Route map interface name\n")
-\f
+
 /* Configuration write function. */
 int
 config_write_if_rmap (struct vty *vty)