xref: /freebsd/contrib/ldns/ldns/ldns.h (revision 5afab0e5)
17b5038d7SDag-Erling Smørgrav /*
27b5038d7SDag-Erling Smørgrav  * dns.h -- defines for the Domain Name System
37b5038d7SDag-Erling Smørgrav  *
47b5038d7SDag-Erling Smørgrav  * Copyright (c) 2005-2008, NLnet Labs. All rights reserved.
57b5038d7SDag-Erling Smørgrav  *
67b5038d7SDag-Erling Smørgrav  * See LICENSE for the license.
77b5038d7SDag-Erling Smørgrav  *
87b5038d7SDag-Erling Smørgrav  * This library was created by:
97b5038d7SDag-Erling Smørgrav  * Jelte Jansen, Erik Rozendaal and Miek Gieben
107b5038d7SDag-Erling Smørgrav  *
117b5038d7SDag-Erling Smørgrav  * A bunch of defines that are used in the DNS.
127b5038d7SDag-Erling Smørgrav  */
137b5038d7SDag-Erling Smørgrav 
147b5038d7SDag-Erling Smørgrav 
157b5038d7SDag-Erling Smørgrav /**
167b5038d7SDag-Erling Smørgrav \mainpage LDNS Documentation
177b5038d7SDag-Erling Smørgrav 
187b5038d7SDag-Erling Smørgrav \section introduction Introduction
197b5038d7SDag-Erling Smørgrav 
207b5038d7SDag-Erling Smørgrav The goal of ldns is to simplify DNS programming, it supports recent RFCs
217b5038d7SDag-Erling Smørgrav like the DNSSEC documents, and allow developers to easily create software
227b5038d7SDag-Erling Smørgrav conforming to current RFCs, and experimental software for current Internet
237b5038d7SDag-Erling Smørgrav drafts. A secondary benefit of using ldns is speed, because ldns is written
247b5038d7SDag-Erling Smørgrav in C, and although it is not optimized for performance, it should be a lot
257b5038d7SDag-Erling Smørgrav faster than Perl.
267b5038d7SDag-Erling Smørgrav 
277b5038d7SDag-Erling Smørgrav The first main tool to use ldns is Drill, from which part of the library was
287b5038d7SDag-Erling Smørgrav derived. From version 1.0.0 on, drill is included in the ldns release
2917d15b25SDag-Erling Smørgrav and will not be distributed separately anymore. The library also includes some
307b5038d7SDag-Erling Smørgrav other examples and tools to show how it can be used. These can be found in the
317b5038d7SDag-Erling Smørgrav examples/ directory in the tarball.
327b5038d7SDag-Erling Smørgrav 
337b5038d7SDag-Erling Smørgrav ldns depends on OpenSSL for it's cryptographic functions.
347b5038d7SDag-Erling Smørgrav Feature list
357b5038d7SDag-Erling Smørgrav 
367b5038d7SDag-Erling Smørgrav   - Transparent IPv4 and IPv6 support (overridable if necessary),
377b5038d7SDag-Erling Smørgrav   - TSIG support,
387b5038d7SDag-Erling Smørgrav   - DNSSEC support; signing and verification,
397b5038d7SDag-Erling Smørgrav   - small size,
407b5038d7SDag-Erling Smørgrav   - online documentation as well as manual pages.
417b5038d7SDag-Erling Smørgrav 
4217d15b25SDag-Erling Smørgrav If you want to send us patches please use the code from git.
437b5038d7SDag-Erling Smørgrav 
447b5038d7SDag-Erling Smørgrav \section using_ldns Using ldns
457b5038d7SDag-Erling Smørgrav 
467b5038d7SDag-Erling Smørgrav Almost all interaction between an application and ldns goes through the ldns
477b5038d7SDag-Erling Smørgrav data structures (\ref ldns_rr, \ref ldns_pkt, etc.). These are input or
487b5038d7SDag-Erling Smørgrav output to the functions of ldns. For example, \ref ldns_zone_new_frm_fp
497b5038d7SDag-Erling Smørgrav reads a zone from a \c FILE pointer, and returns an \ref ldns_zone
507b5038d7SDag-Erling Smørgrav structure.
517b5038d7SDag-Erling Smørgrav 
527b5038d7SDag-Erling Smørgrav 
537b5038d7SDag-Erling Smørgrav Let's use Drill as an example. Drill is a tool much like dig, whose most
547b5038d7SDag-Erling Smørgrav basic function is to send 1 query to a nameserver and print the response.
557b5038d7SDag-Erling Smørgrav 
567b5038d7SDag-Erling Smørgrav To be able to do this, drill uses the resolver module of ldns, which acts as
577b5038d7SDag-Erling Smørgrav a stub resolver. The resolver module uses the net module to actually send
587b5038d7SDag-Erling Smørgrav the query that drill requested. It then uses the wire2host module to
597b5038d7SDag-Erling Smørgrav translate the response and place it in ldns' internal structures. These are
607b5038d7SDag-Erling Smørgrav passed back to drill, which then uses the host2str module to print the
617b5038d7SDag-Erling Smørgrav response in presentation format.
627b5038d7SDag-Erling Smørgrav 
637b5038d7SDag-Erling Smørgrav \section gettingstarted Getting Started
647b5038d7SDag-Erling Smørgrav 
657b5038d7SDag-Erling Smørgrav See the \ref design page for a very high level description of the design
667b5038d7SDag-Erling Smørgrav choices made for ldns.
677b5038d7SDag-Erling Smørgrav 
687b5038d7SDag-Erling Smørgrav For an overview of the functions and types ldns provides, you can check out
697b5038d7SDag-Erling Smørgrav the \ref ldns ldns header file descriptions.
707b5038d7SDag-Erling Smørgrav 
717b5038d7SDag-Erling Smørgrav If you want to see some libdns action, you can read our tutorials:
727b5038d7SDag-Erling Smørgrav   - \ref tutorial1_mx
737b5038d7SDag-Erling Smørgrav   - \ref tutorial2_zone
747b5038d7SDag-Erling Smørgrav   - \ref tutorial3_signzone
757b5038d7SDag-Erling Smørgrav 
767b5038d7SDag-Erling Smørgrav Or you can just use the menu above to browse through the API docs.
777b5038d7SDag-Erling Smørgrav 
787b5038d7SDag-Erling Smørgrav <div style="visibility:hidden;">
797b5038d7SDag-Erling Smørgrav \image html LogoInGradientBar2-y100.png
807b5038d7SDag-Erling Smørgrav </div>
817b5038d7SDag-Erling Smørgrav */
827b5038d7SDag-Erling Smørgrav 
837b5038d7SDag-Erling Smørgrav /**
847b5038d7SDag-Erling Smørgrav  * \file ldns.h
857b5038d7SDag-Erling Smørgrav  *
867b5038d7SDag-Erling Smørgrav  * Including this file will include all ldns files, and define some lookup tables.
877b5038d7SDag-Erling Smørgrav  */
887b5038d7SDag-Erling Smørgrav 
897b5038d7SDag-Erling Smørgrav #ifndef LDNS_DNS_H
907b5038d7SDag-Erling Smørgrav #define LDNS_DNS_H
917b5038d7SDag-Erling Smørgrav 
927b5038d7SDag-Erling Smørgrav #include <stdio.h>
937b5038d7SDag-Erling Smørgrav #include <stdlib.h>
947b5038d7SDag-Erling Smørgrav 
957b5038d7SDag-Erling Smørgrav #include <ldns/util.h>
967b5038d7SDag-Erling Smørgrav #include <ldns/buffer.h>
977b5038d7SDag-Erling Smørgrav #include <ldns/common.h>
982787e39aSDag-Erling Smørgrav #include <ldns/dane.h>
997b5038d7SDag-Erling Smørgrav #include <ldns/dname.h>
1007b5038d7SDag-Erling Smørgrav #include <ldns/dnssec.h>
1017b5038d7SDag-Erling Smørgrav #include <ldns/dnssec_verify.h>
1027b5038d7SDag-Erling Smørgrav #include <ldns/dnssec_sign.h>
1037b5038d7SDag-Erling Smørgrav #include <ldns/duration.h>
104*5afab0e5SDag-Erling Smørgrav #include <ldns/edns.h>
1057b5038d7SDag-Erling Smørgrav #include <ldns/error.h>
1067b5038d7SDag-Erling Smørgrav #include <ldns/higher.h>
1077b5038d7SDag-Erling Smørgrav #include <ldns/host2str.h>
1087b5038d7SDag-Erling Smørgrav #include <ldns/host2wire.h>
1097b5038d7SDag-Erling Smørgrav #include <ldns/net.h>
1107b5038d7SDag-Erling Smørgrav #include <ldns/packet.h>
1117b5038d7SDag-Erling Smørgrav #include <ldns/rdata.h>
1127b5038d7SDag-Erling Smørgrav #include <ldns/resolver.h>
1137b5038d7SDag-Erling Smørgrav #include <ldns/rr.h>
1147b5038d7SDag-Erling Smørgrav #include <ldns/str2host.h>
1157b5038d7SDag-Erling Smørgrav #include <ldns/tsig.h>
1167b5038d7SDag-Erling Smørgrav #include <ldns/update.h>
1177b5038d7SDag-Erling Smørgrav #include <ldns/wire2host.h>
1187b5038d7SDag-Erling Smørgrav #include <ldns/rr_functions.h>
1197b5038d7SDag-Erling Smørgrav #include <ldns/keys.h>
1207b5038d7SDag-Erling Smørgrav #include <ldns/parse.h>
1217b5038d7SDag-Erling Smørgrav #include <ldns/zone.h>
1227b5038d7SDag-Erling Smørgrav #include <ldns/dnssec_zone.h>
12317d15b25SDag-Erling Smørgrav #include <ldns/radix.h>
1247b5038d7SDag-Erling Smørgrav #include <ldns/rbtree.h>
1257b5038d7SDag-Erling Smørgrav #include <ldns/sha1.h>
1267b5038d7SDag-Erling Smørgrav #include <ldns/sha2.h>
1277b5038d7SDag-Erling Smørgrav 
1287b5038d7SDag-Erling Smørgrav #ifdef __cplusplus
1297b5038d7SDag-Erling Smørgrav extern "C" {
1307b5038d7SDag-Erling Smørgrav #endif
1317b5038d7SDag-Erling Smørgrav 
1327b5038d7SDag-Erling Smørgrav #define LDNS_IP4ADDRLEN      (32/8)
1337b5038d7SDag-Erling Smørgrav #define LDNS_IP6ADDRLEN      (128/8)
1347b5038d7SDag-Erling Smørgrav #define LDNS_PORT	53
1357b5038d7SDag-Erling Smørgrav #define LDNS_ROOT_LABEL_STR     "."
1367b5038d7SDag-Erling Smørgrav #define LDNS_DEFAULT_TTL	3600
1377b5038d7SDag-Erling Smørgrav 
1387b5038d7SDag-Erling Smørgrav /* lookup tables for standard DNS stuff  */
1397b5038d7SDag-Erling Smørgrav 
1407b5038d7SDag-Erling Smørgrav /** Taken from RFC 2538, section 2.1.  */
1417b5038d7SDag-Erling Smørgrav extern ldns_lookup_table ldns_certificate_types[];
1427b5038d7SDag-Erling Smørgrav /** Taken from RFC 2535, section 7.  */
1437b5038d7SDag-Erling Smørgrav extern ldns_lookup_table ldns_algorithms[];
1447b5038d7SDag-Erling Smørgrav /** Taken from RFC 2538.  */
1457b5038d7SDag-Erling Smørgrav extern ldns_lookup_table ldns_cert_algorithms[];
1467b5038d7SDag-Erling Smørgrav /** rr types  */
1477b5038d7SDag-Erling Smørgrav extern ldns_lookup_table ldns_rr_classes[];
1487b5038d7SDag-Erling Smørgrav /** Response codes */
1497b5038d7SDag-Erling Smørgrav extern ldns_lookup_table ldns_rcodes[];
1507b5038d7SDag-Erling Smørgrav /** Operation codes */
1517b5038d7SDag-Erling Smørgrav extern ldns_lookup_table ldns_opcodes[];
1527b5038d7SDag-Erling Smørgrav /** EDNS flags */
1537b5038d7SDag-Erling Smørgrav extern ldns_lookup_table ldns_edns_flags[];
1547b5038d7SDag-Erling Smørgrav 
1557b5038d7SDag-Erling Smørgrav #ifdef __cplusplus
1567b5038d7SDag-Erling Smørgrav }
1577b5038d7SDag-Erling Smørgrav #endif
1587b5038d7SDag-Erling Smørgrav 
1597b5038d7SDag-Erling Smørgrav #endif /* LDNS_DNS_H */
160