summaryrefslogtreecommitdiff
path: root/packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'packet.c')
-rw-r--r--packet.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/packet.c b/packet.c
index 059cc09b0f97..cc38f7d4863f 100644
--- a/packet.c
+++ b/packet.c
@@ -26,7 +26,10 @@
*/
#define LDNS_EDNS_MASK_DO_BIT 0x8000
-#define LDNS_EDNS_MASK_UNASSIGNED (0xFFFF & ~LDNS_EDNS_MASK_DO_BIT)
+#define LDNS_EDNS_MASK_CO_BIT 0x4000
+#define LDNS_EDNS_MASK_UNASSIGNED (0xFFFF & ~( LDNS_EDNS_MASK_DO_BIT \
+ | LDNS_EDNS_MASK_CO_BIT ))
+
/* TODO defines for 3600 */
/* convert to and from numerical flag values */
@@ -243,6 +246,22 @@ ldns_pkt_set_edns_do(ldns_pkt *packet, bool value)
}
}
+bool
+ldns_pkt_edns_co(const ldns_pkt *packet)
+{
+ return (packet->_edns_z & LDNS_EDNS_MASK_CO_BIT);
+}
+
+void
+ldns_pkt_set_edns_co(ldns_pkt *packet, bool value)
+{
+ if (value) {
+ packet->_edns_z = packet->_edns_z | LDNS_EDNS_MASK_CO_BIT;
+ } else {
+ packet->_edns_z = packet->_edns_z & ~LDNS_EDNS_MASK_CO_BIT;
+ }
+}
+
uint16_t
ldns_pkt_edns_unassigned(const ldns_pkt *packet)
{
@@ -753,6 +772,7 @@ ldns_pkt_edns(const ldns_pkt *pkt)
ldns_pkt_edns_extended_rcode(pkt) > 0 ||
ldns_pkt_edns_data(pkt) ||
ldns_pkt_edns_do(pkt) ||
+ ldns_pkt_edns_co(pkt) ||
pkt->_edns_list ||
pkt->_edns_present
);
@@ -1254,6 +1274,7 @@ ldns_pkt_clone(const ldns_pkt *pkt)
ldns_pkt_set_edns_data(new_pkt,
ldns_rdf_clone(ldns_pkt_edns_data(pkt)));
ldns_pkt_set_edns_do(new_pkt, ldns_pkt_edns_do(pkt));
+ ldns_pkt_set_edns_co(new_pkt, ldns_pkt_edns_co(pkt));
if (pkt->_edns_list)
ldns_pkt_set_edns_option_list(new_pkt,
ldns_edns_option_list_clone(pkt->_edns_list));