Lines Matching refs:infra

2  * services/cache/infra.c - infrastructure cache, server rtt and capabilities
46 #include "services/cache/infra.h"
158 struct infra_cache* infra, char* name)
174 d = (struct domain_limit_data*)name_tree_find(&infra->domain_limits,
194 if(!name_tree_insert(&infra->domain_limits, &d->node, nm, nmlen,
205 static int infra_ratelimit_cfg_insert(struct infra_cache* infra,
211 d = domain_limit_findcreate(infra, p->str);
217 d = domain_limit_findcreate(infra, p->str);
227 setup_domain_limits(struct infra_cache* infra, struct config_file* cfg)
229 name_tree_init(&infra->domain_limits);
230 if(!infra_ratelimit_cfg_insert(infra, cfg)) {
233 name_tree_init_parents(&infra->domain_limits);
239 wait_limit_netblock_findcreate(struct infra_cache* infra, char* str,
255 tree = &infra->wait_limits_cookie_netblock;
257 tree = &infra->wait_limits_netblock;
279 infra_wait_limit_netblock_insert(struct infra_cache* infra,
285 d = wait_limit_netblock_findcreate(infra, p->str, 0);
291 d = wait_limit_netblock_findcreate(infra, p->str, 1);
301 setup_wait_limits(struct infra_cache* infra, struct config_file* cfg)
303 addr_tree_init(&infra->wait_limits_netblock);
304 addr_tree_init(&infra->wait_limits_cookie_netblock);
305 if(!infra_wait_limit_netblock_insert(infra, cfg))
307 addr_tree_init_parents(&infra->wait_limits_netblock);
308 addr_tree_init_parents(&infra->wait_limits_cookie_netblock);
315 struct infra_cache* infra = (struct infra_cache*)calloc(1,
319 if(!infra) {
322 infra->hosts = slabhash_create(cfg->infra_cache_slabs,
325 if(!infra->hosts) {
326 free(infra);
329 infra->host_ttl = cfg->host_ttl;
330 infra->infra_keep_probing = cfg->infra_keep_probing;
332 infra->domain_rates = slabhash_create(cfg->ratelimit_slabs,
336 if(!infra->domain_rates) {
337 infra_delete(infra);
341 if(!setup_domain_limits(infra, cfg)) {
342 infra_delete(infra);
345 if(!setup_wait_limits(infra, cfg)) {
346 infra_delete(infra);
350 infra->client_ip_rates = slabhash_create(cfg->ip_ratelimit_slabs,
353 if(!infra->client_ip_rates) {
354 infra_delete(infra);
357 return infra;
376 infra_delete(struct infra_cache* infra)
378 if(!infra)
380 slabhash_delete(infra->hosts);
381 slabhash_delete(infra->domain_rates);
382 traverse_postorder(&infra->domain_limits, domain_limit_free, NULL);
383 slabhash_delete(infra->client_ip_rates);
384 traverse_postorder(&infra->wait_limits_netblock,
386 traverse_postorder(&infra->wait_limits_cookie_netblock,
388 free(infra);
392 infra_adjust(struct infra_cache* infra, struct config_file* cfg)
395 if(!infra)
397 infra->host_ttl = cfg->host_ttl;
398 infra->infra_keep_probing = cfg->infra_keep_probing;
406 if(!slabhash_is_size(infra->hosts, maxmem, cfg->infra_cache_slabs) ||
407 !slabhash_is_size(infra->domain_rates, cfg->ratelimit_size,
409 !slabhash_is_size(infra->client_ip_rates, cfg->ip_ratelimit_size,
411 infra_delete(infra);
412 infra = infra_create(cfg);
415 traverse_postorder(&infra->domain_limits, domain_limit_free,
417 if(!setup_domain_limits(infra, cfg)) {
418 infra_delete(infra);
422 return infra;
452 /** calculate infra hash for a key */
461 infra_lookup_nottl(struct infra_cache* infra, struct sockaddr_storage* addr,
472 return slabhash_lookup(infra->hosts, k.entry.hash, &k, wr);
477 data_entry_init(struct infra_cache* infra, struct lruhash_entry* e,
481 data->ttl = timenow + infra->host_ttl;
497 * @param infra: infra structure with config parameters.
506 new_entry(struct infra_cache* infra, struct sockaddr_storage* addr,
531 data_entry_init(infra, &key->entry, tm);
536 infra_host(struct infra_cache* infra, struct sockaddr_storage* addr,
540 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
552 e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1);
557 data_entry_init(infra, e, timenow);
572 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow)))
578 slabhash_insert(infra->hosts, e->hash, e, data, NULL);
586 if(*to >= PROBE_MAXRTO && (infra->infra_keep_probing ||
591 e = infra_lookup_nottl(infra, addr,addrlen,nm,nmlen, 1);
608 infra_set_lame(struct infra_cache* infra, struct sockaddr_storage* addr,
615 e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1);
618 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow))) {
625 data_entry_init(infra, e, timenow);
640 slabhash_insert(infra->hosts, e->hash, e, e->data, NULL);
646 infra_update_tcp_works(struct infra_cache* infra,
650 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
664 infra_rtt_update(struct infra_cache* infra, struct sockaddr_storage* addr,
668 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
675 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow)))
680 data_entry_init(infra, e, timenow);
721 slabhash_insert(infra->hosts, e->hash, e, e->data, NULL);
726 long long infra_get_host_rto(struct infra_cache* infra,
731 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
752 infra_edns_update(struct infra_cache* infra, struct sockaddr_storage* addr,
756 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
761 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow)))
765 data_entry_init(infra, e, timenow);
777 slabhash_insert(infra->hosts, e->hash, e, e->data, NULL);
783 infra_get_lame_rtt(struct infra_cache* infra,
789 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
796 && infra->infra_keep_probing) {
869 int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name,
874 name_tree_lookup(&infra->domain_limits, name, namelen, labs,
917 static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra,
926 return slabhash_lookup(infra->domain_rates, h, &key, wr);
930 static struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra,
939 return slabhash_lookup(infra->client_ip_rates, h, &key, wr);
943 static void infra_create_ratedata(struct infra_cache* infra,
967 slabhash_insert(infra->domain_rates, h, &k->entry, d, NULL);
971 static void infra_ip_create_ratedata(struct infra_cache* infra,
992 slabhash_insert(infra->client_ip_rates, h, &k->entry, d, NULL);
1050 int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name,
1061 lim = infra_find_ratelimit(infra, name, namelen);
1066 entry = infra_find_ratedata(infra, name, namelen, 1);
1093 infra_create_ratedata(infra, name, namelen, timenow);
1097 void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name,
1104 entry = infra_find_ratedata(infra, name, namelen, 1);
1117 int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name,
1126 lim = infra_find_ratelimit(infra, name, namelen);
1131 entry = infra_find_ratedata(infra, name, namelen, 0);
1141 infra_get_mem(struct infra_cache* infra)
1143 size_t s = sizeof(*infra) + slabhash_get_mem(infra->hosts);
1144 if(infra->domain_rates) s += slabhash_get_mem(infra->domain_rates);
1145 if(infra->client_ip_rates) s += slabhash_get_mem(infra->client_ip_rates);
1191 int infra_ip_ratelimit_inc(struct infra_cache* infra,
1203 entry = infra_find_ip_ratedata(infra, addr, addrlen, 1);
1215 infra_ip_create_ratedata(infra, addr, addrlen, timenow, 0);
1219 int infra_wait_limit_allowed(struct infra_cache* infra, struct comm_reply* rep,
1226 entry = infra_find_ip_ratedata(infra, &rep->client_addr,
1237 tree = &infra->wait_limits_cookie_netblock;
1238 else tree = &infra->wait_limits_netblock;
1255 void infra_wait_limit_inc(struct infra_cache* infra, struct comm_reply* rep,
1263 entry = infra_find_ip_ratedata(infra, &rep->client_addr,
1273 infra_ip_create_ratedata(infra, &rep->client_addr,
1277 void infra_wait_limit_dec(struct infra_cache* infra, struct comm_reply* rep,
1284 entry = infra_find_ip_ratedata(infra, &rep->client_addr,