mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 22:29:23 +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( LIB, CONNECTED_LABEL, "Connected interface label")
|
||||||
DEFINE_MTYPE_STATIC(LIB, IF_LINK_PARAMS, "Informational Link Parameters")
|
DEFINE_MTYPE_STATIC(LIB, IF_LINK_PARAMS, "Informational Link Parameters")
|
||||||
|
|
||||||
|
DEFINE_QOBJ_TYPE(interface)
|
||||||
|
|
||||||
/* List of interfaces in only the default VRF */
|
/* List of interfaces in only the default VRF */
|
||||||
int ptm_enable = 0;
|
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 */
|
/* Enable Link-detection by default */
|
||||||
SET_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION);
|
SET_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION);
|
||||||
|
|
||||||
|
QOBJ_REG (ifp, interface);
|
||||||
|
|
||||||
if (if_master.if_new_hook)
|
if (if_master.if_new_hook)
|
||||||
(*if_master.if_new_hook) (ifp);
|
(*if_master.if_new_hook) (ifp);
|
||||||
|
|
||||||
@ -193,6 +197,8 @@ if_delete_retain (struct interface *ifp)
|
|||||||
if (if_master.if_delete_hook)
|
if (if_master.if_delete_hook)
|
||||||
(*if_master.if_delete_hook) (ifp);
|
(*if_master.if_delete_hook) (ifp);
|
||||||
|
|
||||||
|
QOBJ_UNREG (ifp);
|
||||||
|
|
||||||
/* Free connected address list */
|
/* Free connected address list */
|
||||||
list_delete_all_node (ifp->connected);
|
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 "zebra.h"
|
||||||
#include "linklist.h"
|
#include "linklist.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "qobj.h"
|
||||||
|
|
||||||
DECLARE_MTYPE(IF)
|
DECLARE_MTYPE(IF)
|
||||||
DECLARE_MTYPE(CONNECTED_LABEL)
|
DECLARE_MTYPE(CONNECTED_LABEL)
|
||||||
@ -267,7 +268,10 @@ struct interface
|
|||||||
|
|
||||||
struct route_node *node;
|
struct route_node *node;
|
||||||
vrf_id_t vrf_id;
|
vrf_id_t vrf_id;
|
||||||
|
|
||||||
|
QOBJ_FIELDS
|
||||||
};
|
};
|
||||||
|
DECLARE_QOBJ_TYPE(interface)
|
||||||
|
|
||||||
/* Connected address structure. */
|
/* Connected address structure. */
|
||||||
struct connected
|
struct connected
|
||||||
|
@ -28,30 +28,40 @@ Boston, MA 02111-1307, USA. */
|
|||||||
DEFINE_MTYPE_STATIC(LIB, KEY, "Key")
|
DEFINE_MTYPE_STATIC(LIB, KEY, "Key")
|
||||||
DEFINE_MTYPE_STATIC(LIB, KEYCHAIN, "Key chain")
|
DEFINE_MTYPE_STATIC(LIB, KEYCHAIN, "Key chain")
|
||||||
|
|
||||||
|
DEFINE_QOBJ_TYPE(keychain)
|
||||||
|
DEFINE_QOBJ_TYPE(key)
|
||||||
|
|
||||||
/* Master list of key chain. */
|
/* Master list of key chain. */
|
||||||
struct list *keychain_list;
|
struct list *keychain_list;
|
||||||
|
|
||||||
static struct keychain *
|
static struct keychain *
|
||||||
keychain_new (void)
|
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
|
static void
|
||||||
keychain_free (struct keychain *keychain)
|
keychain_free (struct keychain *keychain)
|
||||||
{
|
{
|
||||||
|
QOBJ_UNREG (keychain);
|
||||||
XFREE (MTYPE_KEYCHAIN, keychain);
|
XFREE (MTYPE_KEYCHAIN, keychain);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct key *
|
static struct key *
|
||||||
key_new (void)
|
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
|
static void
|
||||||
key_free (struct key *key)
|
key_free (struct key *key)
|
||||||
{
|
{
|
||||||
|
QOBJ_UNREG (key);
|
||||||
XFREE (MTYPE_KEY, key);
|
XFREE (MTYPE_KEY, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,12 +22,17 @@
|
|||||||
#ifndef _ZEBRA_KEYCHAIN_H
|
#ifndef _ZEBRA_KEYCHAIN_H
|
||||||
#define _ZEBRA_KEYCHAIN_H
|
#define _ZEBRA_KEYCHAIN_H
|
||||||
|
|
||||||
|
#include "qobj.h"
|
||||||
|
|
||||||
struct keychain
|
struct keychain
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
struct list *key;
|
struct list *key;
|
||||||
|
|
||||||
|
QOBJ_FIELDS
|
||||||
};
|
};
|
||||||
|
DECLARE_QOBJ_TYPE(keychain)
|
||||||
|
|
||||||
struct key_range
|
struct key_range
|
||||||
{
|
{
|
||||||
@ -45,7 +50,10 @@ struct key
|
|||||||
|
|
||||||
struct key_range send;
|
struct key_range send;
|
||||||
struct key_range accept;
|
struct key_range accept;
|
||||||
|
|
||||||
|
QOBJ_FIELDS
|
||||||
};
|
};
|
||||||
|
DECLARE_QOBJ_TYPE(key)
|
||||||
|
|
||||||
extern void keychain_init (void);
|
extern void keychain_init (void);
|
||||||
extern struct keychain *keychain_lookup (const char *);
|
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( LIB, ROUTE_MAP_COMPILED, "Route map compiled")
|
||||||
DEFINE_MTYPE_STATIC(LIB, ROUTE_MAP_DEP, "Route map dependency")
|
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. */
|
/* Vector for route match rules. */
|
||||||
static vector route_match_vec;
|
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 = XCALLOC (MTYPE_ROUTE_MAP, sizeof (struct route_map));
|
||||||
new->name = XSTRDUP (MTYPE_ROUTE_MAP_NAME, name);
|
new->name = XSTRDUP (MTYPE_ROUTE_MAP_NAME, name);
|
||||||
|
QOBJ_REG (new, route_map);
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,6 +219,8 @@ route_map_free_map (struct route_map *map)
|
|||||||
|
|
||||||
if (map != NULL)
|
if (map != NULL)
|
||||||
{
|
{
|
||||||
|
QOBJ_UNREG (map);
|
||||||
|
|
||||||
if (map->next)
|
if (map->next)
|
||||||
map->next->prev = map->prev;
|
map->next->prev = map->prev;
|
||||||
else
|
else
|
||||||
@ -482,6 +488,7 @@ route_map_index_new (void)
|
|||||||
|
|
||||||
new = XCALLOC (MTYPE_ROUTE_MAP_INDEX, sizeof (struct route_map_index));
|
new = XCALLOC (MTYPE_ROUTE_MAP_INDEX, sizeof (struct route_map_index));
|
||||||
new->exitpolicy = RMAP_EXIT; /* Default to Cisco-style */
|
new->exitpolicy = RMAP_EXIT; /* Default to Cisco-style */
|
||||||
|
QOBJ_REG (new, route_map_index);
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,6 +498,8 @@ route_map_index_delete (struct route_map_index *index, int notify)
|
|||||||
{
|
{
|
||||||
struct route_map_rule *rule;
|
struct route_map_rule *rule;
|
||||||
|
|
||||||
|
QOBJ_UNREG (index);
|
||||||
|
|
||||||
/* Free route match. */
|
/* Free route match. */
|
||||||
while ((rule = index->match_list.head) != NULL)
|
while ((rule = index->match_list.head) != NULL)
|
||||||
route_map_rule_delete (&index->match_list, rule);
|
route_map_rule_delete (&index->match_list, rule);
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "qobj.h"
|
||||||
DECLARE_MTYPE(ROUTE_MAP_NAME)
|
DECLARE_MTYPE(ROUTE_MAP_NAME)
|
||||||
DECLARE_MTYPE(ROUTE_MAP_RULE)
|
DECLARE_MTYPE(ROUTE_MAP_RULE)
|
||||||
DECLARE_MTYPE(ROUTE_MAP_COMPILED)
|
DECLARE_MTYPE(ROUTE_MAP_COMPILED)
|
||||||
@ -152,7 +153,10 @@ struct route_map_index
|
|||||||
/* Make linked list. */
|
/* Make linked list. */
|
||||||
struct route_map_index *next;
|
struct route_map_index *next;
|
||||||
struct route_map_index *prev;
|
struct route_map_index *prev;
|
||||||
|
|
||||||
|
QOBJ_FIELDS
|
||||||
};
|
};
|
||||||
|
DECLARE_QOBJ_TYPE(route_map_index)
|
||||||
|
|
||||||
/* Route map list structure. */
|
/* Route map list structure. */
|
||||||
struct route_map
|
struct route_map
|
||||||
@ -171,7 +175,10 @@ struct route_map
|
|||||||
/* Maintain update info */
|
/* Maintain update info */
|
||||||
int to_be_processed; /* True if modification isn't acted on yet */
|
int to_be_processed; /* True if modification isn't acted on yet */
|
||||||
int deleted; /* If 1, then this node will be deleted */
|
int deleted; /* If 1, then this node will be deleted */
|
||||||
|
|
||||||
|
QOBJ_FIELDS
|
||||||
};
|
};
|
||||||
|
DECLARE_QOBJ_TYPE(route_map)
|
||||||
|
|
||||||
/* Prototypes. */
|
/* Prototypes. */
|
||||||
extern void route_map_init (void);
|
extern void route_map_init (void);
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
DEFINE_MTYPE_STATIC(LIB, VRF, "VRF")
|
DEFINE_MTYPE_STATIC(LIB, VRF, "VRF")
|
||||||
DEFINE_MTYPE_STATIC(LIB, VRF_BITMAP, "VRF bit-map")
|
DEFINE_MTYPE_STATIC(LIB, VRF_BITMAP, "VRF bit-map")
|
||||||
|
|
||||||
|
DEFINE_QOBJ_TYPE(vrf)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Turn on/off debug code
|
* Turn on/off debug code
|
||||||
* for vrf.
|
* for vrf.
|
||||||
@ -124,6 +126,7 @@ vrf_get (vrf_id_t vrf_id, const char *name)
|
|||||||
strcpy (vrf->name, name);
|
strcpy (vrf->name, name);
|
||||||
listnode_add_sort (vrf_list, vrf);
|
listnode_add_sort (vrf_list, vrf);
|
||||||
if_init (&vrf->iflist);
|
if_init (&vrf->iflist);
|
||||||
|
QOBJ_REG (vrf, vrf);
|
||||||
if (vrf_master.vrf_new_hook)
|
if (vrf_master.vrf_new_hook)
|
||||||
{
|
{
|
||||||
(*vrf_master.vrf_new_hook) (vrf_id, name, &vrf->info);
|
(*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);
|
strcpy (vrf->name, name);
|
||||||
listnode_add_sort (vrf_list, vrf);
|
listnode_add_sort (vrf_list, vrf);
|
||||||
if_init (&vrf->iflist);
|
if_init (&vrf->iflist);
|
||||||
|
QOBJ_REG (vrf, vrf);
|
||||||
if (vrf_master.vrf_new_hook)
|
if (vrf_master.vrf_new_hook)
|
||||||
{
|
{
|
||||||
(*vrf_master.vrf_new_hook) (vrf_id, name, &vrf->info);
|
(*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->node = rn;
|
||||||
vrf->vrf_id = vrf_id;
|
vrf->vrf_id = vrf_id;
|
||||||
if_init (&vrf->iflist);
|
if_init (&vrf->iflist);
|
||||||
|
QOBJ_REG (vrf, vrf);
|
||||||
if (debug_vrf)
|
if (debug_vrf)
|
||||||
zlog_debug("Vrf Created: %p", vrf);
|
zlog_debug("Vrf Created: %p", vrf);
|
||||||
return vrf;
|
return vrf;
|
||||||
@ -275,6 +280,7 @@ vrf_delete (struct vrf *vrf)
|
|||||||
if (vrf_master.vrf_delete_hook)
|
if (vrf_master.vrf_delete_hook)
|
||||||
(*vrf_master.vrf_delete_hook) (vrf->vrf_id, vrf->name, &vrf->info);
|
(*vrf_master.vrf_delete_hook) (vrf->vrf_id, vrf->name, &vrf->info);
|
||||||
|
|
||||||
|
QOBJ_UNREG (vrf);
|
||||||
if_terminate (&vrf->iflist);
|
if_terminate (&vrf->iflist);
|
||||||
|
|
||||||
if (vrf->node)
|
if (vrf->node)
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#define _ZEBRA_VRF_H
|
#define _ZEBRA_VRF_H
|
||||||
|
|
||||||
#include "linklist.h"
|
#include "linklist.h"
|
||||||
|
#include "qobj.h"
|
||||||
|
|
||||||
/* The default NS ID */
|
/* The default NS ID */
|
||||||
#define NS_DEFAULT 0
|
#define NS_DEFAULT 0
|
||||||
@ -85,7 +86,10 @@ struct vrf
|
|||||||
|
|
||||||
/* User data */
|
/* User data */
|
||||||
void *info;
|
void *info;
|
||||||
|
|
||||||
|
QOBJ_FIELDS
|
||||||
};
|
};
|
||||||
|
DECLARE_QOBJ_TYPE(vrf)
|
||||||
|
|
||||||
|
|
||||||
extern struct list *vrf_list;
|
extern struct list *vrf_list;
|
||||||
|
Loading…
Reference in New Issue
Block a user