if(qstate->edns_server_out.subnet_addr_fam != qstate->edns_server_in.subnet_addr_fam ||
qstate->edns_server_out.subnet_source_mask != qstate->edns_server_in.subnet_source_mask ||
memcmp(qstate->edns_server_out.subnet_addr, qstate->edns_server_in.subnet_addr, sn_octs) != 0 ||
- //YBS should this just be equal?
- (qstate->edns_server_out.subnet_addr[sn_octs]^qstate->edns_server_in.subnet_addr[sn_octs])>>remainder) {
+ qstate->edns_server_out.subnet_addr[sn_octs] != qstate->edns_server_in.subnet_addr[sn_octs]) {
/* we can not, restart query without option */
verbose(VERB_QUERY, "subnet: forged data");
qstate->edns_server_out.subnet_validdata = 0;
}
/* TODO PUT IT IN OUR SPECIAL CACHE */
+ /* NOTE: do not cache responses with sourcemask larger than
+ * EDNSSUBNET_MAX_SUBNET_IP4/6, unless */
if (qstate->edns_client_in.subnet_downstream) {
/* Client wants to see the answer, echo option back
void* minfo[MAX_MODULE];
#ifdef CLIENT_SUBNET
/** edns_data for client communication */
- struct edns_data* edns_from_client;
- struct edns_data* edns_to_client;
+ struct edns_data edns_client_in;
+ struct edns_data edns_client_out;
/** edns data for server communication */
- struct edns_data edns_in;
- struct edns_data edns_out;
+ struct edns_data edns_server_in;
+ struct edns_data edns_server_out;
#endif
/** environment for this query */
struct module_env* env;