Netmask requestorNM(remote, remote.sin4.sin_family == AF_INET ? maskV4 : maskV6);
const ComboAddress& requestor = requestorNM.getMaskedNetwork();
RecProtoBufMessage message(DNSProtoBufMessage::Query, uniqueId, &requestor, &local, qname, qtype, qclass, id, tcp, len);
- message.setEDNSSubnet(ednssubnet);
+ message.setEDNSSubnet(ednssubnet, ednssubnet.isIpv4() ? maskV4 : maskV6);
if (!appliedPolicy.empty()) {
message.setAppliedPolicy(appliedPolicy);
Netmask requestorNM(dc->d_remote, dc->d_remote.sin4.sin_family == AF_INET ? luaconfsLocal->protobufMaskV4 : luaconfsLocal->protobufMaskV6);
const ComboAddress& requestor = requestorNM.getMaskedNetwork();
pbMessage.update(dc->d_uuid, &requestor, &dc->d_local, dc->d_tcp, dc->d_mdp.d_header.id);
- pbMessage.setEDNSSubnet(dc->d_ednssubnet);
+ pbMessage.setEDNSSubnet(dc->d_ednssubnet, dc->d_ednssubnet.isIpv4() ? luaconfsLocal->protobufMaskV4 : luaconfsLocal->protobufMaskV6);
pbMessage.setQuestion(dc->d_mdp.d_qname, dc->d_mdp.d_qtype, dc->d_mdp.d_qclass);
}
#endif /* HAVE_PROTOBUF */
Netmask requestorNM(fromaddr, fromaddr.sin4.sin_family == AF_INET ? luaconfsLocal->protobufMaskV4 : luaconfsLocal->protobufMaskV6);
const ComboAddress& requestor = requestorNM.getMaskedNetwork();
pbMessage.update(uniqueId, &requestor, &destaddr, false, dh->id);
- pbMessage.setEDNSSubnet(ednssubnet);
+ pbMessage.setEDNSSubnet(ednssubnet, ednssubnet.isIpv4() ? luaconfsLocal->protobufMaskV4 : luaconfsLocal->protobufMaskV6);
pbMessage.setQueryTime(g_now.tv_sec, g_now.tv_usec);
protobufLogResponse(luaconfsLocal->protobufServer, pbMessage);
}
#endif /* HAVE_PROTOBUF */
}
-void DNSProtoBufMessage::setEDNSSubnet(const Netmask& subnet)
+void DNSProtoBufMessage::setEDNSSubnet(const Netmask& subnet, uint8_t mask)
{
#ifdef HAVE_PROTOBUF
if (!subnet.empty()) {
- const ComboAddress ca = subnet.getNetwork();
+ ComboAddress ca(subnet.getNetwork());
+ ca.truncate(mask);
if (ca.sin4.sin_family == AF_INET) {
d_message.set_originalrequestorsubnet(&ca.sin4.sin_addr.s_addr, sizeof(ca.sin4.sin_addr.s_addr));
}
}
void setQuestion(const DNSName& qname, uint16_t qtype, uint16_t qclass);
- void setEDNSSubnet(const Netmask& subnet);
+ void setEDNSSubnet(const Netmask& subnet, uint8_t mask=128);
void setBytes(size_t bytes);
void setTime(time_t sec, uint32_t usec);
void setQueryTime(time_t sec, uint32_t usec);