idl: Add idl describing DNS structures
[mat/samba.git] / librpc / idl / dns.idl
1 #include "idl_types.h"
2
3 /*
4    IDL structures for DNS operations
5
6    DNS is not traditionally encoded using IDL/NDR. This is a bit of an
7    experiment, and I may well switch us back to a more traditional
8    encoding if it doesn't work out
9 */
10
11 import "misc.idl";
12 [
13         helper("librpc/ndr/ndr_dnsp.h"),
14         helpstring("DNS records"),
15         version(0.0),
16         uuid("a047c001-5f22-40b0-9d52-7042c43f711a")
17 ]
18 interface dns
19 {
20         const int DNS_SERVICE_PORT       = 53;
21
22         typedef [public,bitmap16bit] bitmap {
23                 DNS_RCODE                   = 0x000F,
24                 DNS_FLAG_BROADCAST          = 0x0010,
25                 DNS_FLAG_RECURSION_AVAIL    = 0x0080,
26                 DNS_FLAG_RECURSION_DESIRED  = 0x0100,
27                 DNS_FLAG_TRUNCATION         = 0x0200,
28                 DNS_FLAG_AUTHORITIVE        = 0x0400,
29                 DNS_OPCODE                  = 0x7800,
30                 DNS_FLAG_REPLY              = 0x8000
31         } dns_operation;
32
33         /* the opcodes are in the operation field, masked with
34            DNS_OPCODE */
35         typedef [public] enum {
36                 DNS_OPCODE_QUERY          =  (0x0<<11),
37                 DNS_OPCODE_IQUERY         =  (0x1<<11),
38                 DNS_OPCODE_STATUS         =  (0x2<<11),
39                 DNS_OPCODE_REGISTER       =  (0x5<<11),
40                 DNS_OPCODE_RELEASE        =  (0x6<<11),
41                 DNS_OPCODE_WACK           =  (0x7<<11),
42                 DNS_OPCODE_REFRESH        =  (0x8<<11),
43                 DNS_OPCODE_REFRESH2       =  (0x9<<11),
44                 DNS_OPCODE_MULTI_HOME_REG =  (0xf<<11)
45         } dns_opcode;
46
47         /* rcode values */
48         typedef [public] enum {
49                 DNS_RCODE_OK       = 0x0,
50                 DNS_RCODE_FORMERR  = 0x1,
51                 DNS_RCODE_SERVFAIL = 0x2,
52                 DNS_RCODE_NXDOMAIN = 0x3,
53                 DNS_RCODE_NOTIMP   = 0x4,
54                 DNS_RCODE_REFUSED  = 0x5,
55                 DNS_RCODE_YXDOMAIN = 0x6,
56                 DNS_RCODE_YXRRSET  = 0x7,
57                 DNS_RCODE_NXRRSET  = 0x8,
58                 DNS_RCODE_NOTAUTH  = 0x9,
59                 DNS_RCODE_NOTZONE  = 0xA
60         } dns_rcode;
61
62         typedef [public,enum16bit] enum {
63                 DNS_QCLASS_IP = 0x01
64         } dns_qclass;
65
66         /* These vese values could have been merged with NBT_QTYPE values, but
67            DNS_QTYPE_SRV and NBT_QTYPE_STATUS have the same numeric value. */
68         typedef [public,enum16bit] enum {
69                 DNS_QTYPE_ZERO   = 0x0000,
70                 DNS_QTYPE_A      = 0x0001,
71                 DNS_QTYPE_NS     = 0x0002,
72                 DNS_QTYPE_MD     = 0x0003,
73                 DNS_QTYPE_MF     = 0x0004,
74                 DNS_QTYPE_CNAME  = 0x0005,
75                 DNS_QTYPE_SOA    = 0x0006,
76                 DNS_QTYPE_MB     = 0x0007,
77                 DNS_QTYPE_MG     = 0x0008,
78                 DNS_QTYPE_MR     = 0x0009,
79                 DNS_QTYPE_NULL   = 0x000A,
80                 DNS_QTYPE_WKS    = 0x000B,
81                 DNS_QTYPE_PTR    = 0x000C,
82                 DNS_QTYPE_HINFO  = 0x000D,
83                 DNS_QTYPE_MINFO  = 0x000E,
84                 DNS_QTYPE_MX     = 0x000F,
85                 DNS_QTYPE_TXT    = 0x0010,
86                 DNS_QTYPE_RP     = 0x0011,
87                 DNS_QTYPE_AFSDB  = 0x0012,
88                 DNS_QTYPE_X25    = 0x0013,
89                 DNS_QTYPE_ISDN   = 0x0014,
90                 DNS_QTYPE_RT     = 0x0015,
91                 DNS_QTYPE_SIG    = 0x0018,
92                 DNS_QTYPE_KEY    = 0x0019,
93                 DNS_QTYPE_AAAA   = 0x001C,
94                 DNS_QTYPE_LOC    = 0x001D,
95                 DNS_QTYPE_NXT    = 0x001E,
96                 DNS_QTYPE_NETBIOS= 0x0020,
97                 DNS_QTYPE_SRV    = 0x0021,
98                 DNS_QTYPE_ATMA   = 0x0022,
99                 DNS_QTYPE_NAPTR  = 0x0023,
100                 DNS_QTYPE_DNAME  = 0x0027,
101                 DNS_QTYPE_DS     = 0x002B,
102                 DNS_QTYPE_RRSIG  = 0x002E,
103                 DNS_QTYPE_NSEC   = 0x002F,
104                 DNS_QTYPE_DNSKEY = 0x0030,
105                 DNS_QTYPE_DHCID  = 0x0031,
106                 DNS_QTYPE_ALL    = 0x00FF,
107                 DNS_QTYPE_WINS   = 0xFF01,
108                 DNS_QTYPE_WINSR  = 0xFF02
109         } dns_qtype;
110
111         typedef [public] struct {
112                 dnsp_name  name;
113                 dns_qtype  question_type;
114                 dns_qclass question_class;
115         } dns_name_question;
116
117         typedef [public] struct {
118                 uint16 length;
119                 uint8  data[length];
120         } dns_rdata_data;
121
122         typedef [nodiscriminant,public] union {
123                 [case(DNS_QTYPE_A)]       ipv4address      ipv4_address;
124                 [default]                 dns_rdata_data   data;
125         } dns_rdata;
126
127         typedef [flag(LIBNDR_PRINT_ARRAY_HEX),public] struct {
128                 dnsp_name  name;
129                 dns_qtype  rr_type;
130                 dns_qclass rr_class;
131                 uint32     ttl;
132                 [switch_is(rr_type)] dns_rdata rdata;
133         } dns_res_rec;
134
135         typedef [flag(NDR_NOALIGN|NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
136                 uint16            id;
137                 dns_operation     operation;
138                 uint16            qdcount;
139                 uint16            ancount;
140                 uint16            nscount;
141                 uint16            arcount;
142                 dns_name_question questions[qdcount];
143                 dns_res_rec       answers[ancount];
144                 dns_res_rec       nsrecs[nscount];
145                 dns_res_rec       additional[arcount];
146                 [flag(NDR_REMAINING)] DATA_BLOB padding;
147         } dns_name_packet;
148
149         /*
150            this is a convenience hook for ndrdump
151         */
152         void decode_dns_name_packet(
153                                     [in] dns_name_packet packet
154                                    );
155 }