#include "ripd/ripd.h"
-static struct list *rip_offset_list_master;
-
#define OFFSET_LIST_IN_NAME(O) ((O)->direct[RIP_OFFSET_LIST_IN].alist_name)
#define OFFSET_LIST_IN_METRIC(O) ((O)->direct[RIP_OFFSET_LIST_IN].metric)
offset = XCALLOC(MTYPE_RIP_OFFSET_LIST, sizeof(struct rip_offset_list));
offset->ifname = strdup(ifname);
- listnode_add_sort(rip_offset_list_master, offset);
+ listnode_add_sort(rip->offset_list_master, offset);
return offset;
}
void offset_list_del(struct rip_offset_list *offset)
{
- listnode_delete(rip_offset_list_master, offset);
+ listnode_delete(rip->offset_list_master, offset);
if (OFFSET_LIST_IN_NAME(offset))
free(OFFSET_LIST_IN_NAME(offset));
if (OFFSET_LIST_OUT_NAME(offset))
struct rip_offset_list *offset;
struct listnode *node, *nnode;
- for (ALL_LIST_ELEMENTS(rip_offset_list_master, node, nnode, offset)) {
+ for (ALL_LIST_ELEMENTS(rip->offset_list_master, node, nnode, offset)) {
if (strcmp(offset->ifname, ifname) == 0)
return offset;
}
return 0;
}
-static int offset_list_cmp(struct rip_offset_list *o1,
- struct rip_offset_list *o2)
+int offset_list_cmp(struct rip_offset_list *o1, struct rip_offset_list *o2)
{
return strcmp(o1->ifname, o2->ifname);
}
-
-void rip_offset_init()
-{
- rip_offset_list_master = list_new();
- rip_offset_list_master->cmp = (int (*)(void *, void *))offset_list_cmp;
- rip_offset_list_master->del = (void (*)(void *))offset_list_del;
-}
-
-void rip_offset_clean()
-{
- list_delete(&rip_offset_list_master);
-
- rip_offset_list_master = list_new();
- rip_offset_list_master->cmp = (int (*)(void *, void *))offset_list_cmp;
- rip_offset_list_master->del = (void (*)(void *))offset_list_del;
-}
rip->enable_interface = vector_init(1);
rip->enable_network = route_table_init();
rip->passive_nondefault = vector_init(1);
+ rip->offset_list_master = list_new();
+ rip->offset_list_master->cmp = (int (*)(void *, void *))offset_list_cmp;
+ rip->offset_list_master->del = (void (*)(void *))offset_list_del;
/* Distribute list install. */
rip->distribute_ctx =
vector_free(rip->enable_interface);
route_table_finish(rip->enable_network);
vector_free(rip->passive_nondefault);
- rip_offset_clean();
+ list_delete(&rip->offset_list_master);
rip_interfaces_clean();
rip_distance_reset();
rip_redistribute_clean();
/* Route-map */
rip_route_map_init();
- rip_offset_init();
route_map_add_hook(rip_routemap_update);
route_map_delete_hook(rip_routemap_update);
/* Vector to store passive-interface name. */
vector passive_nondefault;
+ /* RIP offset-lists. */
+ struct list *offset_list_master;
+
/* For redistribute route map. */
struct {
char *name;
uint32_t *);
extern int rip_offset_list_apply_out(struct prefix_ipv4 *, struct interface *,
uint32_t *);
-extern void rip_offset_init(void);
-extern void rip_offset_clean(void);
+extern int offset_list_cmp(struct rip_offset_list *o1,
+ struct rip_offset_list *o2);
/* YANG notifications */
extern void ripd_notif_send_auth_type_failure(const char *ifname);