vector configvec;
-PREDECL_RBTREE_UNIQ(config_master);
+PREDECL_LIST(config_master);
struct config {
/* Configuration node name. */
return config;
}
-static int config_cmp(const struct config *c1, const struct config *c2)
-{
- return strcmp(c1->name, c2->name);
-}
-
static void config_del(struct config *config)
{
list_delete(&config->line);
XFREE(MTYPE_VTYSH_CONFIG, config);
}
-DECLARE_RBTREE_UNIQ(config_master, struct config, rbt_item, config_cmp)
+DECLARE_LIST(config_master, struct config, rbt_item)
static struct config *config_get(int index, const char *line)
{
- struct config *config;
+ struct config *config, *config_loop;
struct config_master_head *master;
+ config = config_loop = NULL;
+
master = vector_lookup_ensure(configvec, index);
if (!master) {
vector_set_index(configvec, index, master);
}
- const struct config config_ref = { .name = (char *)line };
- config = config_master_find(master, &config_ref);
+ frr_each (config_master, master, config_loop) {
+ if (strcmp(config_loop->name, line) == 0)
+ config = config_loop;
+ }
if (!config) {
config = config_new();
config->line->cmp = (int (*)(void *, void *))line_cmp;
config->name = XSTRDUP(MTYPE_VTYSH_CONFIG_LINE, line);
config->index = index;
- config_master_add(master, config);
+ config_master_add_tail(master, config);
}
return config;
}