lib: qobj: register ifaces, routemaps & keychains

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>
This commit is contained in:
David Lamparter 2016-09-27 14:51:08 +02:00 committed by Donald Sharp
parent 1bf9f0270c
commit e80e7cced3
8 changed files with 56 additions and 2 deletions

View File

@ -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);

View File

@ -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

View 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);
}

View File

@ -22,12 +22,17 @@
#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 *);

View 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);

View 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);

View File

@ -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)

View File

@ -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;