pidl: Use C99 initializers for last element in ndr_interface_call(_pipes)
[Samba.git] / librpc / idl / dns.idl
blob8e8eed5ab23716d26e9e22f5df7b9428f2f119b8
1 #include "idl_types.h"
3 /*
4 IDL structures for DNS operations
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 */
11 import "misc.idl", "dnsp.idl";
13 helper("librpc/ndr/ndr_dns.h"),
14 helpstring("DNS records"),
15 version(0.0),
16 uuid("a047c001-5f22-40b0-9d52-7042c43f711a")
18 interface dns
20 const int DNS_SERVICE_PORT = 53;
21 const int DNS_MAX_LABELS = 127;
22 const int DNS_MAX_DOMAIN_LENGTH = 253;
23 const int DNS_MAX_LABEL_LENGTH = 63;
25 typedef [public,bitmap16bit] bitmap {
26 DNS_RCODE = 0x000F,
27 DNS_FLAG_BROADCAST = 0x0010,
28 DNS_FLAG_RECURSION_AVAIL = 0x0080,
29 DNS_FLAG_RECURSION_DESIRED = 0x0100,
30 DNS_FLAG_TRUNCATION = 0x0200,
31 DNS_FLAG_AUTHORITATIVE = 0x0400,
32 DNS_OPCODE = 0x7800,
33 DNS_FLAG_REPLY = 0x8000
34 } dns_operation;
36 /* the opcodes are in the operation field, masked with
37 DNS_OPCODE */
38 typedef [public] enum {
39 DNS_OPCODE_QUERY = (0x0<<11),
40 DNS_OPCODE_IQUERY = (0x1<<11),
41 DNS_OPCODE_STATUS = (0x2<<11),
42 DNS_OPCODE_UPDATE = (0x5<<11),
43 DNS_OPCODE_RELEASE = (0x6<<11),
44 DNS_OPCODE_WACK = (0x7<<11),
45 DNS_OPCODE_REFRESH = (0x8<<11),
46 DNS_OPCODE_REFRESH2 = (0x9<<11),
47 DNS_OPCODE_MULTI_HOME_REG = (0xf<<11)
48 } dns_opcode;
50 /* rcode values */
51 typedef [public] enum {
52 DNS_RCODE_OK = 0x00,
53 DNS_RCODE_FORMERR = 0x01,
54 DNS_RCODE_SERVFAIL = 0x02,
55 DNS_RCODE_NXDOMAIN = 0x03,
56 DNS_RCODE_NOTIMP = 0x04,
57 DNS_RCODE_REFUSED = 0x05,
58 DNS_RCODE_YXDOMAIN = 0x06,
59 DNS_RCODE_YXRRSET = 0x07,
60 DNS_RCODE_NXRRSET = 0x08,
61 DNS_RCODE_NOTAUTH = 0x09,
62 DNS_RCODE_NOTZONE = 0x0A,
63 DNS_RCODE_BADSIG = 0x10,
64 DNS_RCODE_BADKEY = 0x11,
65 DNS_RCODE_BADTIME = 0x12,
66 DNS_RCODE_BADMODE = 0x13,
67 DNS_RCODE_BADNAME = 0x14,
68 DNS_RCODE_BADALG = 0x15
69 } dns_rcode;
71 typedef [public,enum16bit] enum {
72 DNS_QCLASS_IN = 0x0001,
73 DNS_QCLASS_NONE = 0x00FE,
74 DNS_QCLASS_ANY = 0x00FF
75 } dns_qclass;
77 /* These vese values could have been merged with NBT_QTYPE values, but
78 DNS_QTYPE_SRV and NBT_QTYPE_STATUS have the same numeric value. */
79 typedef [public,enum16bit] enum {
80 DNS_QTYPE_ZERO = 0x0000,
81 DNS_QTYPE_A = 0x0001,
82 DNS_QTYPE_NS = 0x0002,
83 DNS_QTYPE_MD = 0x0003,
84 DNS_QTYPE_MF = 0x0004,
85 DNS_QTYPE_CNAME = 0x0005,
86 DNS_QTYPE_SOA = 0x0006,
87 DNS_QTYPE_MB = 0x0007,
88 DNS_QTYPE_MG = 0x0008,
89 DNS_QTYPE_MR = 0x0009,
90 DNS_QTYPE_NULL = 0x000A,
91 DNS_QTYPE_WKS = 0x000B,
92 DNS_QTYPE_PTR = 0x000C,
93 DNS_QTYPE_HINFO = 0x000D,
94 DNS_QTYPE_MINFO = 0x000E,
95 DNS_QTYPE_MX = 0x000F,
96 DNS_QTYPE_TXT = 0x0010,
97 DNS_QTYPE_RP = 0x0011,
98 DNS_QTYPE_AFSDB = 0x0012,
99 DNS_QTYPE_X25 = 0x0013,
100 DNS_QTYPE_ISDN = 0x0014,
101 DNS_QTYPE_RT = 0x0015,
102 DNS_QTYPE_SIG = 0x0018,
103 DNS_QTYPE_KEY = 0x0019,
104 DNS_QTYPE_AAAA = 0x001C,
105 DNS_QTYPE_LOC = 0x001D,
106 DNS_QTYPE_NXT = 0x001E,
107 DNS_QTYPE_NETBIOS= 0x0020,
108 DNS_QTYPE_SRV = 0x0021,
109 DNS_QTYPE_ATMA = 0x0022,
110 DNS_QTYPE_NAPTR = 0x0023,
111 DNS_QTYPE_DNAME = 0x0027,
112 DNS_QTYPE_OPT = 0x0029,
113 DNS_QTYPE_DS = 0x002B,
114 DNS_QTYPE_RRSIG = 0x002E,
115 DNS_QTYPE_NSEC = 0x002F,
116 DNS_QTYPE_DNSKEY = 0x0030,
117 DNS_QTYPE_DHCID = 0x0031,
118 DNS_QTYPE_TKEY = 0x00F9,
119 DNS_QTYPE_TSIG = 0x00FA,
120 DNS_QTYPE_AXFR = 0x00FC,
121 DNS_QTYPE_MAILB = 0x00FD,
122 DNS_QTYPE_MAILA = 0x00FE,
123 DNS_QTYPE_ALL = 0x00FF
124 } dns_qtype;
126 typedef [public,enum16bit] enum {
127 DNS_TKEY_MODE_NULL = 0x0000,
128 DNS_TKEY_MODE_SERVER = 0x0001,
129 DNS_TKEY_MODE_DH = 0x0002,
130 DNS_TKEY_MODE_GSSAPI = 0x0003,
131 DNS_TKEY_MODE_CLIENT = 0x0004,
132 DNS_TKEY_MODE_DELETE = 0x0005,
133 DNS_TKEY_MODE_LAST = 0xFFFF
134 } dns_tkey_mode;
136 typedef [public] struct {
137 dns_string name;
138 dns_qtype question_type;
139 dns_qclass question_class;
140 } dns_name_question;
142 typedef [public] struct {
143 uint16 length;
144 uint8 data[length];
145 } dns_rdata_data;
147 typedef struct {
148 dns_string mname;
149 dns_string rname;
150 uint32 serial;
151 uint32 refresh;
152 uint32 retry;
153 uint32 expire;
154 uint32 minimum;
155 } dns_soa_record;
157 typedef [public] struct {
158 uint16 preference;
159 dns_string exchange;
160 } dns_mx_record;
162 typedef [public,nopull] struct {
163 dnsp_string_list txt;
164 } dns_txt_record;
166 typedef [public] struct {
167 dns_string mbox;
168 dns_string txt;
170 } dns_rp_record;
172 typedef [public] struct {
173 uint16 priority;
174 uint16 weight;
175 uint16 port;
176 dns_string target;
177 } dns_srv_record;
179 typedef [public] struct {
180 uint16 option_code;
181 uint16 option_length;
182 uint8 option_data[option_length];
183 } dns_opt_record;
185 typedef [flag(NDR_NO_COMP),public] struct {
186 dns_string algorithm;
187 uint32 inception;
188 uint32 expiration;
189 dns_tkey_mode mode;
190 uint16 error;
191 uint16 key_size;
192 uint8 key_data[key_size];
193 uint16 other_size;
194 uint8 other_data[other_size];
195 } dns_tkey_record;
197 typedef [flag(NDR_NO_COMP),public] struct {
198 dns_string algorithm_name;
199 uint16 time_prefix; /* 0 until February 2106*/
200 uint32 time;
201 uint16 fudge;
202 uint16 mac_size;
203 uint8 mac[mac_size];
204 uint16 original_id;
205 uint16 error;
206 uint16 other_size;
207 uint8 other_data[other_size];
208 } dns_tsig_record;
210 typedef [flag(NDR_NO_COMP|NDR_NOALIGN|NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
211 dns_string name;
212 dns_qclass rr_class;
213 uint32 ttl;
214 dns_string algorithm_name;
215 uint16 time_prefix; /* 0 until February 2106*/
216 uint32 time;
217 uint16 fudge;
218 uint16 error;
219 uint16 other_size;
220 uint8 other_data[other_size];
221 } dns_fake_tsig_rec;
223 typedef [nodiscriminant,public,flag(NDR_NOALIGN)] union {
224 [case(DNS_QTYPE_A)] ipv4address ipv4_record;
225 [case(DNS_QTYPE_NS)] dns_string ns_record;
226 [case(DNS_QTYPE_CNAME)] dns_string cname_record;
227 [case(DNS_QTYPE_SOA)] dns_soa_record soa_record;
228 [case(DNS_QTYPE_PTR)] dns_string ptr_record;
229 [case(DNS_QTYPE_HINFO)] dnsp_hinfo hinfo_record;
230 [case(DNS_QTYPE_MX)] dns_mx_record mx_record;
231 [case(DNS_QTYPE_TXT)] dns_txt_record txt_record;
232 [case(DNS_QTYPE_RP)] dns_rp_record rp_record;
233 [case(DNS_QTYPE_AAAA)] ipv6address ipv6_record;
234 [case(DNS_QTYPE_SRV)] dns_srv_record srv_record;
235 [case(DNS_QTYPE_OPT)] dns_opt_record opt_record;
236 [case(DNS_QTYPE_TSIG)] dns_tsig_record tsig_record;
237 [case(DNS_QTYPE_TKEY)] dns_tkey_record tkey_record;
238 [default];
239 } dns_rdata;
241 typedef [flag(LIBNDR_PRINT_ARRAY_HEX|NDR_NOALIGN),nopush,nopull] struct {
242 dns_string name;
243 dns_qtype rr_type;
244 dns_qclass rr_class;
245 uint32 ttl;
246 uint16 length; /* Should be set to either UINT16_MAX or 0 */
247 [switch_is(rr_type)] dns_rdata rdata;
248 DATA_BLOB unexpected;
249 } dns_res_rec;
251 typedef [flag(NDR_NOALIGN|NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
252 uint16 id;
253 dns_operation operation;
254 uint16 qdcount;
255 uint16 ancount;
256 uint16 nscount;
257 uint16 arcount;
258 dns_name_question questions[qdcount];
259 dns_res_rec answers[ancount];
260 dns_res_rec nsrecs[nscount];
261 dns_res_rec additional[arcount];
262 } dns_name_packet;
265 this is a convenience hook for ndrdump
267 [nopython] void decode_dns_name_packet(
268 [in] dns_name_packet packet