From: Peter van Dijk Date: Thu, 6 Dec 2012 08:11:05 +0000 (+0000) Subject: turn blogpost about adding RR types into pdns internals doc section X-Git-Tag: auth-3.2-rc2~31 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c5f95ffda26cfaf7f44649f250a2a4265d0a7cbf;p=pdns turn blogpost about adding RR types into pdns internals doc section git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2970 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/docs/pdns.xml b/pdns/docs/pdns.xml index 6557ccee8..e168f173c 100644 --- a/pdns/docs/pdns.xml +++ b/pdns/docs/pdns.xml @@ -19246,6 +19246,76 @@ Reply: problems though. + Adding new DNS record types + + Here are the full descriptions on how we added the TLSA record type to all PowerDNS products, with links to the actual source code. + + + First, define the TLSARecordContent class in dnsrecords.hh: + + + +class TLSARecordContent : public DNSRecordContent +{ +public: + includeboilerplate(TLSA) + uint8_t d_certusage, d_selector, d_matchtype; + string d_cert; +}; + + + +The 'includeboilerplate(TLSA)' generates the four methods that do everything PowerDNS would ever want to do with a record: + + + + read TLSA records from zonefile format + + + + +write out a TLSA record in zonefile format + + + + +read a TLSA record from a packet + + + + +write a TLSA record to a packet + + + + + +The actual parsing code: + + +boilerplate_conv(TLSA, 52, + conv.xfr8BitInt(d_certusage); + conv.xfr8BitInt(d_selector); + conv.xfr8BitInt(d_matchtype); + conv.xfrHexBlob(d_cert, true); + ) + + + + This code defines the TLSA rrtype number as 52. Secondly, it says there are 3 eight bit fields for Certificate Usage, Selector and Match type. Next, it defines that the rest of the record is the actual certificate (hash). 'conv' methods are supplied for all DNS data types in use. + + + +Now add TLSRecordContent::report() to reportOtherTypes(). + + + + And that's it. For completeness, add TLSA and 52 to the QType enum in qtype.hh, which makes it easier to refer to the TLSA record in code if so required. + + + + + Backend writers' guide