char *lastaddr; /* the address string provided by the server-state file */
struct resolv_options resolv_opts;
int hostname_dn_len; /* string length of the server hostname in Domain Name format */
- char *hostname_dn; /* server hostname in Domain Name format (name is lower cased) */
+ char *hostname_dn; /* server hostname in Domain Name format (name is lower cased), key to host_dn below */
+
char *hostname; /* server hostname */
struct sockaddr_storage init_addr; /* plain IP address specified on the init-addr line */
unsigned int init_addr_methods; /* initial address setting, 3-bit per method, ends at 0, enough to store 10 entries */
struct resolv_srvrq *srvrq; /* Pointer representing the DNS SRV requeest, if any */
struct list srv_rec_item; /* to attach server to a srv record item */
struct list ip_rec_item; /* to attach server to a A or AAAA record item */
- struct ebpt_node host_dn; /* hostdn store for srvrq and state file matching*/
+ struct ceb_node host_dn; /* hostdn store for srvrq and state file matching (uses hostname_dn above) */
struct list pp_tlvs; /* to send out PROXY protocol v2 TLVs */
struct task *srvrq_check; /* Task testing SRV record expiration date for this server */
struct {
#include <sys/types.h>
-#include <import/ebistree.h>
+#include <import/cebis_tree.h>
#include <haproxy/action.h>
#include <haproxy/api.h>
goto err;
}
LIST_INIT(&srvrq->attached_servers);
- srvrq->named_servers = EB_ROOT;
+ srvrq->named_servers = NULL;
LIST_APPEND(&resolv_srvrq_list, &srvrq->list);
return srvrq;
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
srvrq_set_srv_down(srv);
- ebpt_delete(&srv->host_dn);
- srv->host_dn.key = NULL;
+ cebis_item_delete(&srv->srvrq->named_servers, host_dn, hostname_dn, srv);
ha_free(&srv->hostname);
ha_free(&srv->hostname_dn);
/* Now process SRV records */
list_for_each_entry(req, &res->requesters, list) {
- struct ebpt_node *node;
char target[DNS_MAX_NAME_SIZE+1];
int i;
/* If not empty we try to match a server
* in server state file tree with the same hostname
*/
- if (!eb_is_empty(&srvrq->named_servers)) {
+ if (!srvrq->named_servers) {
srv = NULL;
/* convert the key to lookup in lower case */
target[i] = tolower((unsigned char)item->data.target[i]);
target[i] = 0;
- node = ebis_lookup(&srvrq->named_servers, target);
- if (node) {
- srv = ebpt_entry(node, struct server, host_dn);
+ srv = cebis_item_lookup(&srvrq->named_servers, host_dn, hostname_dn, target, struct server);
+ if (srv) {
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
/* an entry was found with the same hostname
while (1) {
if (srv->svc_port == item->port) {
/* server found, we remove it from tree */
- ebpt_delete(node);
- srv->host_dn.key = NULL;
+ cebis_item_delete(&srvrq->named_servers, host_dn, hostname_dn, srv);
goto srv_found;
}
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
- node = ebpt_next(node);
- if (!node)
+ srv = cebis_item_next(&srvrq->named_servers, host_dn, hostname_dn, srv);
+ if (!srv)
break;
- srv = ebpt_entry(node, struct server, host_dn);
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
if ((item->data_len != srv->hostname_dn_len)
#include <errno.h>
#include <import/eb64tree.h>
-#include <import/ebistree.h>
+#include <import/cebis_tree.h>
#include <haproxy/api.h>
#include <haproxy/backend.h>
* since this server has an hostname
*/
LIST_DEL_INIT(&srv->srv_rec_item);
- srv->host_dn.key = srv->hostname_dn;
/* insert in tree and set the srvrq expiration date */
- ebis_insert(&srv->srvrq->named_servers, &srv->host_dn);
+ cebis_item_insert(&srv->srvrq->named_servers, host_dn, hostname_dn, srv);
task_schedule(srv->srvrq_check, tick_add(now_ms, srv->srvrq->resolvers->timeout.resolve +
srv->srvrq->resolvers->resolve_retries *
srv->srvrq->resolvers->timeout.retry));