.name = "CHCK",
};
-/* Global list to share all tcp-checks */
-struct list tcpchecks_list = LIST_HEAD_INIT(tcpchecks_list);
+/* Global tree to share all tcp-checks */
+struct eb_root shared_tcpchecks = EB_ROOT;
DECLARE_STATIC_POOL(pool_head_email_alert, "email_alert", sizeof(struct email_alert));
static struct tcpcheck_ruleset *find_tcpcheck_ruleset(const char *name)
{
struct tcpcheck_ruleset *rs;
+ struct ebpt_node *node;
- list_for_each_entry(rs, &tcpchecks_list, list) {
- if (strcmp(rs->name, name) == 0)
- return rs;
+ node = ebis_lookup_len(&shared_tcpchecks, name, strlen(name));
+ if (node) {
+ rs = container_of(node, typeof(*rs), node);
+ return rs;
}
return NULL;
}
if (rs == NULL)
return NULL;
- rs->name = strdup(name);
- if (rs->name == NULL) {
+ rs->node.key = strdup(name);
+ if (rs->node.key == NULL) {
free(rs);
return NULL;
}
- LIST_INIT(&rs->list);
LIST_INIT(&rs->rules);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
return rs;
}
if (!rs)
return;
- LIST_DEL(&rs->list);
+ ebpt_delete(&rs->node);
+ free(rs->node.key);
list_for_each_entry_safe(r, rb, &rs->rules, list) {
LIST_DEL(&r->list);
free_tcpcheck(r, 0);
}
- free(rs->name);
free(rs);
}
static void deinit_tcpchecks()
{
- struct tcpcheck_ruleset *rs, *rsb;
+ struct tcpcheck_ruleset *rs;
struct tcpcheck_rule *r, *rb;
-
- list_for_each_entry_safe(rs, rsb, &tcpchecks_list, list) {
- LIST_DEL(&rs->list);
+ struct ebpt_node *node, *next;
+
+ node = ebpt_first(&shared_tcpchecks);
+ while (node) {
+ next = ebpt_next(node);
+ ebpt_delete(node);
+ free(node->key);
+ rs = container_of(node, typeof(*rs), node);
list_for_each_entry_safe(r, rb, &rs->rules, list) {
LIST_DEL(&r->list);
free_tcpcheck(r, 0);
}
- free(rs->name);
free(rs);
+ node = next;
}
}
chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;
chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;
chk->index = 4;
LIST_ADDQ(&rs->rules, &chk->list);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;
chk->index = 3;
LIST_ADDQ(&rs->rules, &chk->list);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;
LIST_ADDQ(&rs->rules, &chk->list);
}
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;
chk->index = 2;
LIST_ADDQ(&rs->rules, &chk->list);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;
chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;
chk->index = 1;
LIST_ADDQ(&rs->rules, &chk->list);
- LIST_ADDQ(&tcpchecks_list, &rs->list);
+ ebis_insert(&shared_tcpchecks, &rs->node);
ruleset_found:
rules->list = &rs->rules;