diff options
Diffstat (limited to 'lib/kernel/src/inet_dns.hrl')
-rw-r--r-- | lib/kernel/src/inet_dns.hrl | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/lib/kernel/src/inet_dns.hrl b/lib/kernel/src/inet_dns.hrl new file mode 100644 index 0000000000..1b69f31a4d --- /dev/null +++ b/lib/kernel/src/inet_dns.hrl @@ -0,0 +1,208 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +%% +%% Defintion for Domain Name System +%% + +%% +%% Currently defined opcodes +%% +-define(QUERY, 16#0). %% standard query +-define(IQUERY, 16#1). %% inverse query +-define(STATUS, 16#2). %% nameserver status query +%% -define(xxx, 16#3) %% 16#3 reserved +%% non standard +-define(UPDATEA, 16#9). %% add resource record +-define(UPDATED, 16#a). %% delete a specific resource record +-define(UPDATEDA, 16#b). %% delete all nemed resource record +-define(UPDATEM, 16#c). %% modify a specific resource record +-define(UPDATEMA, 16#d). %% modify all named resource record + +-define(ZONEINIT, 16#e). %% initial zone transfer +-define(ZONEREF, 16#f). %% incremental zone referesh + + +%% +%% Currently defined response codes +%% +-define(NOERROR, 0). %% no error +-define(FORMERR, 1). %% format error +-define(SERVFAIL, 2). %% server failure +-define(NXDOMAIN, 3). %% non existent domain +-define(NOTIMP, 4). %% not implemented +-define(REFUSED, 5). %% query refused +%% non standard +-define(NOCHANGE, 16#f). %% update failed to change db +-define(BADVERS, 16). + +%% +%% Type values for resources and queries +%% +-define(T_A, 1). %% host address +-define(T_NS, 2). %% authoritative server +-define(T_MD, 3). %% mail destination +-define(T_MF, 4). %% mail forwarder +-define(T_CNAME, 5). %% connonical name +-define(T_SOA, 6). %% start of authority zone +-define(T_MB, 7). %% mailbox domain name +-define(T_MG, 8). %% mail group member +-define(T_MR, 9). %% mail rename name +-define(T_NULL, 10). %% null resource record +-define(T_WKS, 11). %% well known service +-define(T_PTR, 12). %% domain name pointer +-define(T_HINFO, 13). %% host information +-define(T_MINFO, 14). %% mailbox information +-define(T_MX, 15). %% mail routing information +-define(T_TXT, 16). %% text strings +-define(T_AAAA, 28). %% ipv6 address +%% SRV (RFC 2052) +-define(T_SRV, 33). %% services +%% NAPTR (RFC 2915) +-define(T_NAPTR, 35). %% naming authority pointer +-define(T_OPT, 41). %% EDNS pseudo-rr RFC2671(7) +%% SPF (RFC 4408) +-define(T_SPF, 99). %% server policy framework +%% non standard +-define(T_UINFO, 100). %% user (finger) information +-define(T_UID, 101). %% user ID +-define(T_GID, 102). %% group ID +-define(T_UNSPEC, 103). %% Unspecified format (binary data) +%% Query type values which do not appear in resource records +-define(T_AXFR, 252). %% transfer zone of authority +-define(T_MAILB, 253). %% transfer mailbox records +-define(T_MAILA, 254). %% transfer mail agent records +-define(T_ANY, 255). %% wildcard match + +%% +%% Symbolic Type values for resources and queries +%% +-define(S_A, a). %% host address +-define(S_NS, ns). %% authoritative server +-define(S_MD, md). %% mail destination +-define(S_MF, mf). %% mail forwarder +-define(S_CNAME, cname). %% connonical name +-define(S_SOA, soa). %% start of authority zone +-define(S_MB, mb). %% mailbox domain name +-define(S_MG, mg). %% mail group member +-define(S_MR, mr). %% mail rename name +-define(S_NULL, null). %% null resource record +-define(S_WKS, wks). %% well known service +-define(S_PTR, ptr). %% domain name pointer +-define(S_HINFO, hinfo). %% host information +-define(S_MINFO, minfo). %% mailbox information +-define(S_MX, mx). %% mail routing information +-define(S_TXT, txt). %% text strings +-define(S_AAAA, aaaa). %% ipv6 address +%% SRV (RFC 2052) +-define(S_SRV, srv). %% services +%% NAPTR (RFC 2915) +-define(S_NAPTR, naptr). %% naming authority pointer +-define(S_OPT, opt). %% EDNS pseudo-rr RFC2671(7) +%% SPF (RFC 4408) +-define(S_SPF, spf). %% server policy framework +%% non standard +-define(S_UINFO, uinfo). %% user (finger) information +-define(S_UID, uid). %% user ID +-define(S_GID, gid). %% group ID +-define(S_UNSPEC, unspec). %% Unspecified format (binary data) +%% Query type values which do not appear in resource records +-define(S_AXFR, axfr). %% transfer zone of authority +-define(S_MAILB, mailb). %% transfer mailbox records +-define(S_MAILA, maila). %% transfer mail agent records +-define(S_ANY, any). %% wildcard match + +%% +%% Values for class field +%% + +-define(C_IN, 1). %% the arpa internet +-define(C_CHAOS, 3). %% for chaos net at MIT +-define(C_HS, 4). %% for Hesiod name server at MIT +%% Query class values which do not appear in resource records +-define(C_ANY, 255). %% wildcard match + + +%% indirection mask for compressed domain names +-define(INDIR_MASK, 16#c0). + +%% +%% Structure for query header, the order of the fields is machine and +%% compiler dependent, in our case, the bits within a byte are assignd +%% least significant first, while the order of transmition is most +%% significant first. This requires a somewhat confusing rearrangement. +%% +-record(dns_header, + { + id = 0, %% ushort query identification number + %% byte F0 + qr = 0, %% :1 response flag + opcode = 0, %% :4 purpose of message + aa = 0, %% :1 authoritive answer + tc = 0, %% :1 truncated message + rd = 0, %% :1 recursion desired + %% byte F1 + ra = 0, %% :1 recursion available + pr = 0, %% :1 primary server required (non standard) + %% :2 unused bits + rcode = 0 %% :4 response code + }). + +-record(dns_rec, + { + header, %% dns_header record + qdlist = [], %% list of question entries + anlist = [], %% list of answer entries + nslist = [], %% list of authority entries + arlist = [] %% list of resource entries + }). + +%% DNS resource record +-record(dns_rr, + { + domain = "", %% resource domain + type = any, %% resource type + class = in, %% reource class + cnt = 0, %% access count + ttl = 0, %% time to live + data = [], %% raw data + %% + tm, %% creation time + bm = [], %% Bitmap storing domain character case information. + func = false %% Optional function calculating the data field. + }). + +-define(DNS_UDP_PAYLOAD_SIZE, 1280). + +-record(dns_rr_opt, %% EDNS RR OPT (RFC2671), dns_rr{type=opt} + { + domain = "", %% should be the root domain + type = opt, + udp_payload_size = ?DNS_UDP_PAYLOAD_SIZE, %% RFC2671(4.5 CLASS) + ext_rcode = 0, %% RFC2671(4.6 EXTENDED-RCODE) + version = 0, %% RFC2671(4.6 VERSION) + z = 0, %% RFC2671(4.6 Z) + data = [] %% RFC2671(4.4) + }). + +-record(dns_query, + { + domain, %% query domain + type, %% query type + class %% query class + }). |