mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 20:07:46 +00:00
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:
parent
1bf9f0270c
commit
e80e7cced3
6
lib/if.c
6
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);
|
||||
|
||||
|
4
lib/if.h
4
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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 *);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user