]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: qobj: register ifaces, routemaps & keychains
authorDavid Lamparter <equinox@opensourcerouting.org>
Tue, 27 Sep 2016 12:51:08 +0000 (14:51 +0200)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 7 Oct 2016 13:09:51 +0000 (09:09 -0400)
This places the appropriate calls so library objects can be used with
qobj "pointers", especially in the CLI.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/if.c
lib/if.h
lib/keychain.c
lib/keychain.h
lib/routemap.c
lib/routemap.h
lib/vrf.c
lib/vrf.h

index bd6079c0fd24827f83e30d120330403f9781b2cc..2add03d67c1ce7db24bdcfbea040592ece061406 100644 (file)
--- a/lib/if.c
+++ b/lib/if.c
@@ -43,6 +43,8 @@ DEFINE_MTYPE_STATIC(LIB, NBR_CONNECTED,   "Neighbor Connected")
 DEFINE_MTYPE(       LIB, CONNECTED_LABEL, "Connected interface label")
 DEFINE_MTYPE_STATIC(LIB, IF_LINK_PARAMS,  "Informational Link Parameters")
 
+DEFINE_QOBJ_TYPE(interface)
+
 /* List of interfaces in only the default VRF */
 int ptm_enable = 0;
 
@@ -149,6 +151,8 @@ if_create_vrf (const char *name, int namelen, vrf_id_t vrf_id)
   /* Enable Link-detection by default */
   SET_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION);
 
+  QOBJ_REG (ifp, interface);
+
   if (if_master.if_new_hook)
     (*if_master.if_new_hook) (ifp);
 
@@ -193,6 +197,8 @@ if_delete_retain (struct interface *ifp)
   if (if_master.if_delete_hook)
     (*if_master.if_delete_hook) (ifp);
 
+  QOBJ_UNREG (ifp);
+
   /* Free connected address list */
   list_delete_all_node (ifp->connected);
 
index d1875e695ae56b079cfe2b792f2c194f736c9d57..57062cd3fc3e842251e445f3a5d80b792a49abba 100644 (file)
--- a/lib/if.h
+++ b/lib/if.h
@@ -24,6 +24,7 @@ Boston, MA 02111-1307, USA.  */
 #include "zebra.h"
 #include "linklist.h"
 #include "memory.h"
+#include "qobj.h"
 
 DECLARE_MTYPE(IF)
 DECLARE_MTYPE(CONNECTED_LABEL)
@@ -267,7 +268,10 @@ struct interface
 
   struct route_node *node;
   vrf_id_t vrf_id;
+
+  QOBJ_FIELDS
 };
+DECLARE_QOBJ_TYPE(interface)
 
 /* Connected address structure. */
 struct connected
index ac2083cf4bc74bc500eb4452c9689f41ec72bc32..85af482e1d68c3b46f3bff4c659adf41ea2ef81d 100644 (file)
@@ -28,30 +28,40 @@ Boston, MA 02111-1307, USA.  */
 DEFINE_MTYPE_STATIC(LIB, KEY,      "Key")
 DEFINE_MTYPE_STATIC(LIB, KEYCHAIN, "Key chain")
 
+DEFINE_QOBJ_TYPE(keychain)
+DEFINE_QOBJ_TYPE(key)
+
 /* Master list of key chain. */
 struct list *keychain_list;
 
 static struct keychain *
 keychain_new (void)
 {
-  return XCALLOC (MTYPE_KEYCHAIN, sizeof (struct keychain));
+  struct keychain *keychain;
+  keychain = XCALLOC (MTYPE_KEYCHAIN, sizeof (struct keychain));
+  QOBJ_REG (keychain, keychain);
+  return keychain;
 }
 
 static void
 keychain_free (struct keychain *keychain)
 {
+  QOBJ_UNREG (keychain);
   XFREE (MTYPE_KEYCHAIN, keychain);
 }
 
 static struct key *
 key_new (void)
 {
-  return XCALLOC (MTYPE_KEY, sizeof (struct key));
+  struct key *key = XCALLOC (MTYPE_KEY, sizeof (struct key));
+  QOBJ_REG (key, key);
+  return key;
 }
 
 static void
 key_free (struct key *key)
 {
+  QOBJ_UNREG (key);
   XFREE (MTYPE_KEY, key);
 }
 
index f962864c5b4844eee74c448af9482c18f1954925..d3f9168a0f87be9f4ce03a2b9d77dea5062ea4c1 100644 (file)
 #ifndef _ZEBRA_KEYCHAIN_H
 #define _ZEBRA_KEYCHAIN_H
 
+#include "qobj.h"
+
 struct keychain
 {
   char *name;
 
   struct list *key;
+
+  QOBJ_FIELDS
 };
+DECLARE_QOBJ_TYPE(keychain)
 
 struct key_range
 {
@@ -45,7 +50,10 @@ struct key
 
   struct key_range send;
   struct key_range accept;
+
+  QOBJ_FIELDS
 };
+DECLARE_QOBJ_TYPE(key)
 
 extern void keychain_init (void);
 extern struct keychain *keychain_lookup (const char *);
index 09afc31bc0ca331c4cc411c4fe90e5570b2d962b..d1fa14fc3db57f8bbb3ed2823f68745aa7eb9a7a 100644 (file)
@@ -38,6 +38,9 @@ DEFINE_MTYPE_STATIC(LIB, ROUTE_MAP_RULE_STR, "Route map rule str")
 DEFINE_MTYPE(       LIB, ROUTE_MAP_COMPILED, "Route map compiled")
 DEFINE_MTYPE_STATIC(LIB, ROUTE_MAP_DEP,      "Route map dependency")
 
+DEFINE_QOBJ_TYPE(route_map_index)
+DEFINE_QOBJ_TYPE(route_map)
+
 /* Vector for route match rules. */
 static vector route_match_vec;
 
@@ -155,6 +158,7 @@ route_map_new (const char *name)
 
   new =  XCALLOC (MTYPE_ROUTE_MAP, sizeof (struct route_map));
   new->name = XSTRDUP (MTYPE_ROUTE_MAP_NAME, name);
+  QOBJ_REG (new, route_map);
   return new;
 }
 
@@ -215,6 +219,8 @@ route_map_free_map (struct route_map *map)
 
   if (map != NULL)
     {
+      QOBJ_UNREG (map);
+
       if (map->next)
        map->next->prev = map->prev;
       else
@@ -482,6 +488,7 @@ route_map_index_new (void)
 
   new =  XCALLOC (MTYPE_ROUTE_MAP_INDEX, sizeof (struct route_map_index));
   new->exitpolicy = RMAP_EXIT; /* Default to Cisco-style */
+  QOBJ_REG (new, route_map_index);
   return new;
 }
 
@@ -491,6 +498,8 @@ route_map_index_delete (struct route_map_index *index, int notify)
 {
   struct route_map_rule *rule;
 
+  QOBJ_UNREG (index);
+
   /* Free route match. */
   while ((rule = index->match_list.head) != NULL)
     route_map_rule_delete (&index->match_list, rule);
index 7006e43f66233918b49dcd999f279e6ee1bce9a9..427a552e7f820de2e17c731004a9ff20169306e2 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "prefix.h"
 #include "memory.h"
+#include "qobj.h"
 DECLARE_MTYPE(ROUTE_MAP_NAME)
 DECLARE_MTYPE(ROUTE_MAP_RULE)
 DECLARE_MTYPE(ROUTE_MAP_COMPILED)
@@ -152,7 +153,10 @@ struct route_map_index
   /* Make linked list. */
   struct route_map_index *next;
   struct route_map_index *prev;
+
+  QOBJ_FIELDS
 };
+DECLARE_QOBJ_TYPE(route_map_index)
 
 /* Route map list structure. */
 struct route_map
@@ -171,7 +175,10 @@ struct route_map
   /* Maintain update info */
   int to_be_processed;  /* True if modification isn't acted on yet */
   int deleted;          /* If 1, then this node will be deleted */
+
+  QOBJ_FIELDS
 };
+DECLARE_QOBJ_TYPE(route_map)
 
 /* Prototypes. */
 extern void route_map_init (void);
index 7d79b3dc9af50fb0d7c2244c8cd8142eff62e20c..63adea4aec07bce19e38a948b345b736f6079cad 100644 (file)
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -33,6 +33,8 @@
 DEFINE_MTYPE_STATIC(LIB, VRF,        "VRF")
 DEFINE_MTYPE_STATIC(LIB, VRF_BITMAP, "VRF bit-map")
 
+DEFINE_QOBJ_TYPE(vrf)
+
 /*
  * Turn on/off debug code
  * for vrf.
@@ -124,6 +126,7 @@ vrf_get (vrf_id_t vrf_id, const char *name)
       strcpy (vrf->name, name);
       listnode_add_sort (vrf_list, vrf);
       if_init (&vrf->iflist);
+      QOBJ_REG (vrf, vrf);
       if (vrf_master.vrf_new_hook)
        {
          (*vrf_master.vrf_new_hook) (vrf_id, name, &vrf->info);
@@ -212,6 +215,7 @@ vrf_get (vrf_id_t vrf_id, const char *name)
              strcpy (vrf->name, name);
              listnode_add_sort (vrf_list, vrf);
              if_init (&vrf->iflist);
+             QOBJ_REG (vrf, vrf);
              if (vrf_master.vrf_new_hook)
                {
                  (*vrf_master.vrf_new_hook) (vrf_id, name, &vrf->info);
@@ -249,6 +253,7 @@ vrf_get (vrf_id_t vrf_id, const char *name)
          vrf->node = rn;
          vrf->vrf_id = vrf_id;
           if_init (&vrf->iflist);
+          QOBJ_REG (vrf, vrf);
          if (debug_vrf)
             zlog_debug("Vrf Created: %p", vrf);
          return vrf;
@@ -275,6 +280,7 @@ vrf_delete (struct vrf *vrf)
   if (vrf_master.vrf_delete_hook)
     (*vrf_master.vrf_delete_hook) (vrf->vrf_id, vrf->name, &vrf->info);
 
+  QOBJ_UNREG (vrf);
   if_terminate (&vrf->iflist);
 
   if (vrf->node)
index dcc115563d8072c4d239f95551b11c85b08b1131..127b7082e90cbb29fd0b5e2b0d673ce004667b89 100644 (file)
--- a/lib/vrf.h
+++ b/lib/vrf.h
@@ -24,6 +24,7 @@
 #define _ZEBRA_VRF_H
 
 #include "linklist.h"
+#include "qobj.h"
 
 /* The default NS ID */
 #define NS_DEFAULT 0
@@ -85,7 +86,10 @@ struct vrf
 
   /* User data */
   void *info;
+
+  QOBJ_FIELDS
 };
+DECLARE_QOBJ_TYPE(vrf)
 
 
 extern struct list *vrf_list;