Lines Matching refs:infra

2  * services/cache/infra.c - infrastructure cache, server rtt and capabilities
46 #include "services/cache/infra.h"
153 struct infra_cache* infra, char* name)
169 d = (struct domain_limit_data*)name_tree_find(&infra->domain_limits,
189 if(!name_tree_insert(&infra->domain_limits, &d->node, nm, nmlen,
200 static int infra_ratelimit_cfg_insert(struct infra_cache* infra,
206 d = domain_limit_findcreate(infra, p->str);
212 d = domain_limit_findcreate(infra, p->str);
222 setup_domain_limits(struct infra_cache* infra, struct config_file* cfg)
224 name_tree_init(&infra->domain_limits);
225 if(!infra_ratelimit_cfg_insert(infra, cfg)) {
228 name_tree_init_parents(&infra->domain_limits);
235 struct infra_cache* infra = (struct infra_cache*)calloc(1,
239 infra->hosts = slabhash_create(cfg->infra_cache_slabs,
242 if(!infra->hosts) {
243 free(infra);
246 infra->host_ttl = cfg->host_ttl;
247 infra->infra_keep_probing = cfg->infra_keep_probing;
249 infra->domain_rates = slabhash_create(cfg->ratelimit_slabs,
253 if(!infra->domain_rates) {
254 infra_delete(infra);
258 if(!setup_domain_limits(infra, cfg)) {
259 infra_delete(infra);
263 infra->client_ip_rates = slabhash_create(cfg->ip_ratelimit_slabs,
266 if(!infra->client_ip_rates) {
267 infra_delete(infra);
270 return infra;
283 infra_delete(struct infra_cache* infra)
285 if(!infra)
287 slabhash_delete(infra->hosts);
288 slabhash_delete(infra->domain_rates);
289 traverse_postorder(&infra->domain_limits, domain_limit_free, NULL);
290 slabhash_delete(infra->client_ip_rates);
291 free(infra);
295 infra_adjust(struct infra_cache* infra, struct config_file* cfg)
298 if(!infra)
300 infra->host_ttl = cfg->host_ttl;
301 infra->infra_keep_probing = cfg->infra_keep_probing;
309 if(!slabhash_is_size(infra->hosts, maxmem, cfg->infra_cache_slabs) ||
310 !slabhash_is_size(infra->domain_rates, cfg->ratelimit_size,
312 !slabhash_is_size(infra->client_ip_rates, cfg->ip_ratelimit_size,
314 infra_delete(infra);
315 infra = infra_create(cfg);
318 traverse_postorder(&infra->domain_limits, domain_limit_free,
320 if(!setup_domain_limits(infra, cfg)) {
321 infra_delete(infra);
325 return infra;
355 /** calculate infra hash for a key */
364 infra_lookup_nottl(struct infra_cache* infra, struct sockaddr_storage* addr,
375 return slabhash_lookup(infra->hosts, k.entry.hash, &k, wr);
380 data_entry_init(struct infra_cache* infra, struct lruhash_entry* e,
384 data->ttl = timenow + infra->host_ttl;
400 * @param infra: infra structure with config parameters.
409 new_entry(struct infra_cache* infra, struct sockaddr_storage* addr,
434 data_entry_init(infra, &key->entry, tm);
439 infra_host(struct infra_cache* infra, struct sockaddr_storage* addr,
443 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
455 e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1);
460 data_entry_init(infra, e, timenow);
475 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow)))
481 slabhash_insert(infra->hosts, e->hash, e, data, NULL);
489 if(*to >= PROBE_MAXRTO && (infra->infra_keep_probing ||
494 e = infra_lookup_nottl(infra, addr,addrlen,nm,nmlen, 1);
511 infra_set_lame(struct infra_cache* infra, struct sockaddr_storage* addr,
518 e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1);
521 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow))) {
528 data_entry_init(infra, e, timenow);
543 slabhash_insert(infra->hosts, e->hash, e, e->data, NULL);
549 infra_update_tcp_works(struct infra_cache* infra,
553 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
567 infra_rtt_update(struct infra_cache* infra, struct sockaddr_storage* addr,
571 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
578 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow)))
583 data_entry_init(infra, e, timenow);
624 slabhash_insert(infra->hosts, e->hash, e, e->data, NULL);
629 long long infra_get_host_rto(struct infra_cache* infra,
634 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
655 infra_edns_update(struct infra_cache* infra, struct sockaddr_storage* addr,
659 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
664 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow)))
668 data_entry_init(infra, e, timenow);
680 slabhash_insert(infra->hosts, e->hash, e, e->data, NULL);
686 infra_get_lame_rtt(struct infra_cache* infra,
692 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
699 && infra->infra_keep_probing) {
727 infra->infra_keep_probing) {
772 int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name,
777 name_tree_lookup(&infra->domain_limits, name, namelen, labs,
820 static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra,
829 return slabhash_lookup(infra->domain_rates, h, &key, wr);
833 static struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra,
843 return slabhash_lookup(infra->client_ip_rates, h, &key, wr);
847 static void infra_create_ratedata(struct infra_cache* infra,
871 slabhash_insert(infra->domain_rates, h, &k->entry, d, NULL);
875 static void infra_ip_create_ratedata(struct infra_cache* infra,
895 slabhash_insert(infra->client_ip_rates, h, &k->entry, d, NULL);
931 int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name,
942 lim = infra_find_ratelimit(infra, name, namelen);
947 entry = infra_find_ratedata(infra, name, namelen, 1);
974 infra_create_ratedata(infra, name, namelen, timenow);
978 void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name,
985 entry = infra_find_ratedata(infra, name, namelen, 1);
993 int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name,
1002 lim = infra_find_ratelimit(infra, name, namelen);
1007 entry = infra_find_ratedata(infra, name, namelen, 0);
1017 infra_get_mem(struct infra_cache* infra)
1019 size_t s = sizeof(*infra) + slabhash_get_mem(infra->hosts);
1020 if(infra->domain_rates) s += slabhash_get_mem(infra->domain_rates);
1021 if(infra->client_ip_rates) s += slabhash_get_mem(infra->client_ip_rates);
1026 int infra_ip_ratelimit_inc(struct infra_cache* infra,
1037 entry = infra_find_ip_ratedata(infra, repinfo, 1);
1073 infra_ip_create_ratedata(infra, repinfo, timenow);