Lines Matching defs:rpzs

371 /* Caller must hold rpzs->maint_lock */
373 fix_qname_skip_recurse(dns_rpz_zones_t *rpzs) {
404 * zbits_req = (rpzs->have.ipv4 | rpzs->have.ipv6 |
405 * rpzs->have.nsdname |
406 * rpzs->have.nsipv4 | rpzs->have.nsipv6);
446 rpzs->have.client_ip = rpzs->have.client_ipv4 | rpzs->have.client_ipv6;
447 rpzs->have.ip = rpzs->have.ipv4 | rpzs->have.ipv6;
448 rpzs->have.nsip = rpzs->have.nsipv4 | rpzs->have.nsipv6;
450 if (rpzs->p.qname_wait_recurse) {
463 zbits_req = (rpzs->have.ipv4 | rpzs->have.ipv6 |
464 rpzs->have.nsdname |
465 rpzs->have.nsipv4 | rpzs->have.nsipv6);
466 zbits_notreq = (rpzs->have.client_ip | rpzs->have.qname);
539 rpzs->have.qname_skip_recurse = mask;
543 adj_trigger_cnt(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
555 cnt = &rpzs->triggers[rpz_num].client_ipv4;
556 have = &rpzs->have.client_ipv4;
558 cnt = &rpzs->triggers[rpz_num].client_ipv6;
559 have = &rpzs->have.client_ipv6;
563 cnt = &rpzs->triggers[rpz_num].qname;
564 have = &rpzs->have.qname;
569 cnt = &rpzs->triggers[rpz_num].ipv4;
570 have = &rpzs->have.ipv4;
572 cnt = &rpzs->triggers[rpz_num].ipv6;
573 have = &rpzs->have.ipv6;
577 cnt = &rpzs->triggers[rpz_num].nsdname;
578 have = &rpzs->have.nsdname;
583 cnt = &rpzs->triggers[rpz_num].nsipv4;
584 have = &rpzs->have.nsipv4;
586 cnt = &rpzs->triggers[rpz_num].nsipv6;
587 have = &rpzs->have.nsipv6;
597 fix_qname_skip_recurse(rpzs);
603 fix_qname_skip_recurse(rpzs);
609 new_node(dns_rpz_zones_t *rpzs,
616 node = isc_mem_get(rpzs->mctx, sizeof(*node));
776 const dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
795 REQUIRE(rpzs != NULL && rpz_num < rpzs->p.num_zones);
796 rpz = rpzs->zones[rpz_num];
953 name2data(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
962 REQUIRE(rpzs != NULL && rpz_num < rpzs->p.num_zones);
963 rpz = rpzs->zones[rpz_num];
1088 search(dns_rpz_zones_t *rpzs,
1102 cur = rpzs->cidr;
1114 child = new_node(rpzs, tgt_ip, tgt_prefix, NULL);
1118 rpzs->cidr = child;
1190 new_parent = new_node(rpzs, tgt_ip, tgt_prefix, cur);
1195 rpzs->cidr = new_parent;
1242 sibling = new_node(rpzs, tgt_ip, tgt_prefix, NULL);
1245 new_parent = new_node(rpzs, tgt_ip, dbit, cur);
1247 isc_mem_put(rpzs->mctx, sibling, sizeof(*sibling));
1252 rpzs->cidr = new_parent;
1271 add_cidr(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
1280 result = name2ipkey(DNS_RPZ_ERROR_LEVEL, rpzs, rpz_num, rpz_type,
1288 result = search(rpzs, &tgt_ip, tgt_prefix, &set, ISC_TRUE, &found);
1310 adj_trigger_cnt(rpzs, rpz_num, rpz_type, &tgt_ip, tgt_prefix, ISC_TRUE);
1315 add_nm(dns_rpz_zones_t *rpzs, dns_name_t *trig_name,
1323 result = dns_rbt_addnode(rpzs->rbt, trig_name, &nmnode);
1329 nm_data = isc_mem_get(rpzs->mctx, sizeof(*nm_data));
1358 add_name(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
1373 name2data(rpzs, rpz_num, rpz_type, src_name, trig_name, &new_data);
1375 result = add_nm(rpzs, trig_name, &new_data);
1384 adj_trigger_cnt(rpzs, rpz_num, rpz_type, NULL, 0, ISC_TRUE);
1454 cidr_free(dns_rpz_zones_t *rpzs) {
1457 cur = rpzs->cidr;
1474 rpzs->cidr = NULL;
1477 isc_mem_put(rpzs->mctx, cur, sizeof(*cur));
1487 rpz_detach(dns_rpz_zone_t **rpzp, dns_rpz_zones_t *rpzs) {
1499 dns_name_free(&rpz->origin, rpzs->mctx);
1501 dns_name_free(&rpz->client_ip, rpzs->mctx);
1503 dns_name_free(&rpz->ip, rpzs->mctx);
1505 dns_name_free(&rpz->nsdname, rpzs->mctx);
1507 dns_name_free(&rpz->nsip, rpzs->mctx);
1509 dns_name_free(&rpz->passthru, rpzs->mctx);
1511 dns_name_free(&rpz->drop, rpzs->mctx);
1513 dns_name_free(&rpz->tcp_only, rpzs->mctx);
1515 dns_name_free(&rpz->cname, rpzs->mctx);
1517 isc_mem_put(rpzs->mctx, rpz, sizeof(*rpz));
1521 dns_rpz_attach_rpzs(dns_rpz_zones_t *rpzs, dns_rpz_zones_t **rpzsp) {
1523 isc_refcount_increment(&rpzs->refs, NULL);
1524 *rpzsp = rpzs;
1532 dns_rpz_zones_t *rpzs;
1538 rpzs = *rpzsp;
1539 REQUIRE(rpzs != NULL);
1542 isc_refcount_decrement(&rpzs->refs, &refs);
1551 rpz = rpzs->zones[rpz_num];
1552 rpzs->zones[rpz_num] = NULL;
1554 rpz_detach(&rpz, rpzs);
1557 cidr_free(rpzs);
1558 dns_rbt_destroy(&rpzs->rbt);
1559 DESTROYLOCK(&rpzs->maint_lock);
1560 isc_rwlock_destroy(&rpzs->search_lock);
1561 isc_refcount_destroy(&rpzs->refs);
1562 isc_mem_putanddetach(&rpzs->mctx, rpzs, sizeof(*rpzs));
1571 dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num)
1578 REQUIRE(rpz_num < rpzs->p.num_zones);
1579 rpz = rpzs->zones[rpz_num];
1603 LOCK(&rpzs->maint_lock);
1604 RWLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1605 if ((rpzs->load_begun & tgt) == 0) {
1609 rpzs->load_begun |= tgt;
1610 dns_rpz_attach_rpzs(rpzs, load_rpzsp);
1615 result = dns_rpz_new_zones(load_rpzsp, rpzs->mctx);
1622 load_rpzs->p.num_zones = rpzs->p.num_zones;
1628 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1629 UNLOCK(&rpzs->maint_lock);
1636 * mask. It must be called when holding a write lock on rpzs->search_lock.
1639 fix_triggers(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num) {
1646 * rpzs->total_triggers is only used to log a message below.
1649 memmove(&old_totals, &rpzs->total_triggers, sizeof(old_totals));
1650 memset(&rpzs->total_triggers, 0, sizeof(rpzs->total_triggers));
1653 if (rpzs->triggers[n].type == 0U) { \
1654 rpzs->have.type &= ~zbit; \
1656 rpzs->total_triggers.type += rpzs->triggers[n].type; \
1657 rpzs->have.type |= zbit; \
1660 for (n = 0; n < rpzs->p.num_zones; ++n) {
1674 fix_qname_skip_recurse(rpzs);
1676 dns_name_format(&rpzs->zones[rpz_num]->origin,
1686 (unsigned long) rpzs->total_triggers.qname,
1688 (unsigned long) rpzs->total_triggers.nsdname,
1690 (unsigned long) (rpzs->total_triggers.ipv4 +
1691 rpzs->total_triggers.ipv6),
1693 (unsigned long) (rpzs->total_triggers.nsipv4 +
1694 rpzs->total_triggers.nsipv6),
1697 (unsigned long) (rpzs->total_triggers.client_ipv4 +
1698 rpzs->total_triggers.client_ipv6));
1706 * Here, rpzs is a pointer to the view's common rpzs
1707 * structure. *load_rpzsp is a rpzs structure that is local to the
1715 * rpzs is used during this time for queries.
1719 * common rpzs struct have to be merged into the summary databases of
1720 * *load_rpzsp, as the summary databases of the view's common rpzs
1724 * the maint_lock of the view's common rpzs struct so that it is not
1728 * current state of the rpzs structure, i.e., the summary trees contain
1743 dns_rpz_ready(dns_rpz_zones_t *rpzs,
1759 INSIST(rpzs != NULL);
1760 LOCK(&rpzs->maint_lock);
1764 if (load_rpzs == rpzs) {
1769 RWLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1770 fix_triggers(rpzs, rpz_num);
1771 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1772 UNLOCK(&rpzs->maint_lock);
1784 if (rpzs->p.num_zones > 1) {
1790 for (cnode = rpzs->cidr; cnode != NULL; cnode = next_cnode) {
1837 result = dns_rbtnodechain_first(&chain, rpzs->rbt, NULL, NULL);
1877 RWLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1879 rpzs->triggers[rpz_num] = load_rpzs->triggers[rpz_num];
1880 fix_triggers(rpzs, rpz_num);
1882 found = rpzs->cidr;
1883 rpzs->cidr = load_rpzs->cidr;
1886 rbt = rpzs->rbt;
1887 rpzs->rbt = load_rpzs->rbt;
1890 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1895 UNLOCK(&rpzs->maint_lock);
1906 dns_rpz_add(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num, dns_name_t *src_name)
1912 REQUIRE(rpzs != NULL && rpz_num < rpzs->p.num_zones);
1913 rpz = rpzs->zones[rpz_num];
1918 LOCK(&rpzs->maint_lock);
1919 RWLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1924 result = add_name(rpzs, rpz_num, rpz_type, src_name);
1929 result = add_cidr(rpzs, rpz_num, rpz_type, src_name);
1935 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_write);
1936 UNLOCK(&rpzs->maint_lock);
1944 del_cidr(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
1958 result = name2ipkey(DNS_RPZ_DEBUG_QUIET, rpzs, rpz_num, rpz_type,
1963 result = search(rpzs, &tgt_ip, tgt_prefix, &tgt_set, ISC_FALSE, &tgt);
1988 adj_trigger_cnt(rpzs, rpz_num, rpz_type, &tgt_ip, tgt_prefix, ISC_FALSE);
2015 rpzs->cidr = child;
2024 isc_mem_put(rpzs->mctx, tgt, sizeof(*tgt));
2031 del_name(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
2049 name2data(rpzs, rpz_num, rpz_type, src_name, trig_name, &del_data);
2052 result = dns_rbt_findnode(rpzs->rbt, trig_name, NULL, &nmnode, NULL, 0,
2094 result = dns_rbt_deletenode(rpzs->rbt, nmnode, ISC_FALSE);
2108 adj_trigger_cnt(rpzs, rpz_num, rpz_type, NULL, 0, ISC_FALSE);
2115 dns_rpz_delete(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
2120 REQUIRE(rpzs != NULL && rpz_num < rpzs->p.num_zones);
2121 rpz = rpzs->zones[rpz_num];
2126 LOCK(&rpzs->maint_lock);
2127 RWLOCK(&rpzs->search_lock, isc_rwlocktype_write);
2132 del_name(rpzs, rpz_num, rpz_type, src_name);
2137 del_cidr(rpzs, rpz_num, rpz_type, src_name);
2143 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_write);
2144 UNLOCK(&rpzs->maint_lock);
2156 dns_rpz_find_ip(dns_rpz_zones_t *rpzs, dns_rpz_type_t rpz_type,
2168 LOCK(&rpzs->maint_lock);
2169 have = rpzs->have;
2170 UNLOCK(&rpzs->maint_lock);
2228 RWLOCK(&rpzs->search_lock, isc_rwlocktype_read);
2229 result = search(rpzs, &tgt_ip, 128, &tgt_set, ISC_FALSE, &found);
2234 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_read);
2258 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_read);
2277 dns_rpz_find_name(dns_rpz_zones_t *rpzs, dns_rpz_type_t rpz_type,
2291 RWLOCK(&rpzs->search_lock, isc_rwlocktype_read);
2294 result = dns_rbt_findnode(rpzs->rbt, trig_name, NULL, &nmnode, NULL,
2335 RWUNLOCK(&rpzs->search_lock, isc_rwlocktype_read);