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