Lines Matching defs:ecs
89 /** new query for ecs module */
104 /** Add ecs struct to edns list, after parsing it to wire format. */
106 subnet_ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list,
112 if(ecs->subnet_validdata) {
113 log_assert(ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4 ||
114 ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP6);
115 log_assert(ecs->subnet_addr_fam != EDNSSUBNET_ADDRFAM_IP4 ||
116 ecs->subnet_source_mask <= INET_SIZE*8);
117 log_assert(ecs->subnet_addr_fam != EDNSSUBNET_ADDRFAM_IP6 ||
118 ecs->subnet_source_mask <= INET6_SIZE*8);
120 sn_octs = ecs->subnet_source_mask / 8;
122 (size_t)((ecs->subnet_source_mask % 8)>0?1:0);
127 sldns_buffer_write_u16(buf, ecs->subnet_addr_fam);
128 sldns_buffer_write_u8(buf, ecs->subnet_source_mask);
129 sldns_buffer_write_u8(buf, ecs->subnet_scope_mask);
130 sldns_buffer_write(buf, ecs->subnet_addr, sn_octs);
132 sldns_buffer_write_u8(buf, ecs->subnet_addr[sn_octs] &
133 ~(0xFF >> (ecs->subnet_source_mask % 8)));
458 struct ecs_data *ecs = &sq->ecs_client_in;
472 tree = (ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4)?
478 node = addrtree_find(tree, (addrkey_t*)ecs->subnet_addr,
479 ecs->subnet_source_mask, *env->now);
497 sq->ecs_client_out.subnet_addr_fam = ecs->subnet_addr_fam;
498 sq->ecs_client_out.subnet_source_mask = ecs->subnet_source_mask;
499 memcpy(&sq->ecs_client_out.subnet_addr, &ecs->subnet_addr,
610 * because expired answers would otherwise resurface once the ecs data
611 * expires, giving once in a while global data responses for ecs
650 parse_subnet_option(struct edns_option* ecs_option, struct ecs_data* ecs)
652 memset(ecs, 0, sizeof(*ecs));
656 ecs->subnet_addr_fam = sldns_read_uint16(ecs_option->opt_data);
657 ecs->subnet_source_mask = ecs_option->opt_data[2];
658 ecs->subnet_scope_mask = ecs_option->opt_data[3];
663 if (ecs_option->opt_len != (size_t)((ecs->subnet_source_mask+7)/8 + 4))
667 if (ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) {
668 if (ecs->subnet_source_mask > 32 || ecs->subnet_scope_mask > 32)
670 } else if (ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP6) {
671 if (ecs->subnet_source_mask > 128 ||
672 ecs->subnet_scope_mask > 128)
678 if (copy_clear(ecs->subnet_addr, INET6_SIZE, ecs_option->opt_data + 4,
679 ecs_option->opt_len - 4, ecs->subnet_source_mask))
681 ecs->subnet_validdata = 1;
686 subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs,
693 ecs->subnet_source_mask = cfg->max_client_subnet_ipv4;
694 ecs->subnet_addr_fam = EDNSSUBNET_ADDRFAM_IP4;
696 if (!copy_clear( ecs->subnet_addr, INET6_SIZE,
698 ecs->subnet_source_mask)) {
699 ecs->subnet_validdata = 1;
704 ecs->subnet_source_mask = cfg->max_client_subnet_ipv6;
705 ecs->subnet_addr_fam = EDNSSUBNET_ADDRFAM_IP6;
707 if (!copy_clear( ecs->subnet_addr, INET6_SIZE,
709 ecs->subnet_source_mask)) {
710 ecs->subnet_validdata = 1;