aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/src/inet_dns.hrl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel/src/inet_dns.hrl')
-rw-r--r--lib/kernel/src/inet_dns.hrl208
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
+ }).