5c3ee6d9b46bf20837eb8f6368fd32ed83a1bcff
[metze/samba/wip.git] / librpc / idl / ioctl.idl
1 #include "idl_types.h"
2 [
3         pointer_default(unique)
4 ]
5 interface copychunk
6 {
7         typedef [public] struct {
8                 uint8 resume_key[24];
9                 uint32 context_len;
10                 /* <56> Windows sends 4 bytes of zero for the context field. */
11                 uint8 context[4];
12         } req_resume_key_rsp;
13
14         typedef struct {
15                 hyper source_off;
16                 hyper target_off;
17                 uint32 length;
18                 uint32 reserved;
19         } srv_copychunk;
20
21         typedef [public] struct {
22                 uint8 source_key[24];
23                 uint32 chunk_count;
24                 uint32 reserved;
25                 srv_copychunk chunks[chunk_count];
26         } srv_copychunk_copy;
27
28         typedef [public] struct {
29                 uint32 chunks_written;
30                 uint32 chunk_bytes_written;
31                 uint32 total_bytes_written;
32         } srv_copychunk_rsp;
33
34         typedef [public] struct {
35                 uint32 version;
36                 uint32 size;
37                 uint32 maximum_token_lifetime;
38                 uint32 default_token_lifetime;
39                 hyper maximum_xfer_size;
40                 hyper optimal_xfer_count;
41                 uint32 maximum_data_descriptors;
42                 uint32 maximum_xfer_length_per_descriptor;
43                 uint32 optimal_xfer_length_per_descriptor;
44                 uint16 optimal_xfer_length_granularity;
45                 uint8 reserved[2];
46         } device_copy_offload_descriptor;
47
48         /* XXX: 0x00000001 is unconfirmed */
49         const uint32 STORAGE_OFFLOAD_TOKEN_TYPE_ZERO_DATA = 0x00000001;
50         typedef [public] struct {
51                 uint32 token_type;
52                 uint8 reserved[2];
53                 uint16 token_id_len;
54                 [size_is(token_id_len)] uint8 token[];
55         } storage_offload_token;
56
57         typedef [public] struct {
58                 uint32 size;
59                 uint32 flags;
60                 uint32 token_time_to_live;
61                 uint32 reserved;
62                 hyper file_offset;
63                 hyper length;
64         } fsctl_offload_read_input;
65
66         const uint32 OFFLOAD_READ_FLAG_FILE_TOO_SMALL = 0x00000001;
67         const uint32 OFFLOAD_READ_FLAG_ALL_ZERO_BEYOND_RANGE = 0x00000002;
68         const uint32 OFFLOAD_READ_FLAG_CANNOT_OFFLOAD_BEYOND_RANGE = 0x00000004;
69         typedef [public] struct {
70                 uint32 size;
71                 uint32 flags;
72                 hyper xfer_length;
73                 uint8 token[512];
74         } fsctl_offload_read_output;
75
76         typedef [public] struct {
77                 uint32 size;
78                 uint32 flags;
79                 hyper file_offset;
80                 hyper copy_length;
81                 hyper xfer_offset;
82                 uint8 token[512];
83         } fsctl_offload_write_input;
84
85         typedef [public] struct {
86                 uint32 size;
87                 uint32 flags;
88                 hyper length_written;
89         } fsctl_offload_write_output;
90
91         typedef [public] struct {
92                 /* The FileHandle field is the volatile part of the fileid */
93                 hyper fid_volatile;
94                 hyper source_off;
95                 hyper target_off;
96                 hyper byte_count;
97         } fsctl_dup_extents_to_file;
98 }
99
100 interface compression
101 {
102         const uint16 COMPRESSION_FORMAT_NONE = 0x0000;
103         const uint16 COMPRESSION_FORMAT_DEFAULT = 0x0001;
104         const uint16 COMPRESSION_FORMAT_LZNT1 = 0x0002;
105
106         typedef [public] struct {
107                 uint16 format;
108         } compression_state;
109 }
110
111 interface netinterface
112 {
113         typedef [bitmap32bit] bitmap {
114                 FSCTL_NET_IFACE_RSS_CAPABLE = 0x00000001,
115                 FSCTL_NET_IFACE_RDMA_CAPABLE = 0x00000002
116         } fsctl_net_iface_capability;
117
118         typedef [enum16bit] enum {
119                 FSCTL_NET_IFACE_AF_INET = 0x0002,
120                 FSCTL_NET_IFACE_AF_INET6 = 0x0017
121         } fsctl_sockaddr_af;
122
123         typedef [flag(NDR_NOALIGN)] struct {
124                 [value(0)] uint16 port;
125                 [flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
126                 [value(0)] hyper reserved;
127         } fsctl_sockaddr_in;
128
129         typedef [flag(NDR_NOALIGN)] struct {
130                 [value(0)] uint16 port;
131                 [value(0)] uint32 flowinfo;
132                 [flag(NDR_BIG_ENDIAN)] ipv6address ipv6;
133                 [value(0)] uint32 scopeid;
134         } fsctl_sockaddr_in6;
135
136         typedef [nodiscriminant,flag(NDR_NOALIGN)] union {
137                 [case (FSCTL_NET_IFACE_AF_INET)] fsctl_sockaddr_in saddr_in;
138                 [case (FSCTL_NET_IFACE_AF_INET6)] fsctl_sockaddr_in6 saddr_in6;
139         } fsctl_sockaddr_union;
140
141         typedef [flag(NDR_NOALIGN)] struct {
142                 fsctl_sockaddr_af family;
143                 [subcontext(0),subcontext_size(126),switch_is(family)] fsctl_sockaddr_union saddr;
144         } fsctl_sockaddr_storage;
145
146         typedef [public,relative_base,noprint] struct {
147                 [relative] fsctl_net_iface_info *next;
148                 uint32 ifindex;
149                 fsctl_net_iface_capability capability;
150                 [value(0)] uint32 reserved;
151                 hyper linkspeed;
152                 fsctl_sockaddr_storage sockaddr;
153         } fsctl_net_iface_info;
154 }
155
156 interface sparse
157 {
158         /* MS-FSCC 2.3.33 FSCTL_QUERY_ALLOCATED_RANGES Request */
159         typedef [public] struct {
160                 hyper file_off;
161                 hyper len;
162         } file_alloced_range_buf;
163
164         typedef [public] struct {
165                 file_alloced_range_buf buf;
166         } fsctl_query_alloced_ranges_req;
167
168         /*
169          * 2.3.34 FSCTL_QUERY_ALLOCATED_RANGES Reply
170          * ...
171          * The number of FILE_ALLOCATED_RANGE_BUFFER elements returned is
172          * computed by dividing the size of the returned output buffer (from
173          * either SMB or SMB2, the lower-layer protocol that carries the FSCTL)
174          * by the size of the FILE_ALLOCATED_RANGE_BUFFER element.
175          *
176          * This logic can't (currently) be represented in pidl, so just use a
177          * blob. Perhaps in future we'll support:
178          *      [flag(NDR_REMAINING)] file_alloced_range_buf array[];
179          */
180         typedef [public] struct {
181                 [flag(NDR_REMAINING)] DATA_BLOB far_buf_array;
182         } fsctl_query_alloced_ranges_rsp;
183
184         /* 2.3.65 FSCTL_SET_ZERO_DATA Request */
185         typedef [public] struct {
186                 hyper file_off;
187                 hyper beyond_final_zero;
188         } file_zero_data_info;
189
190         typedef [public] struct {
191                 file_zero_data_info info;
192         } fsctl_set_zero_data_req;
193 }
194
195 interface resiliency
196 {
197         /* 2.2.31.3 NETWORK_RESILIENCY_REQUEST */
198         typedef [public] struct {
199                 uint32 timeout;
200                 uint32 reserved;
201         } network_resiliency_request;
202 }
203
204 interface trim
205 {
206         /* MS-FSCC 2.3.73.1 FILE_LEVEL_TRIM_RANGE */
207         typedef [public] struct {
208                 hyper off;
209                 hyper len;
210         } file_level_trim_range;
211
212         /* MS-FSCC 2.3.73 FSCTL_FILE_LEVEL_TRIM Request */
213         typedef [public] struct {
214                 uint32 key;
215                 uint32 num_ranges;
216                 file_level_trim_range ranges[num_ranges];
217         } fsctl_file_level_trim_req;
218
219         /* MS-FSCC 2.3.74 FSCTL_FILE_LEVEL_TRIM Reply */
220         typedef [public] struct {
221                 uint32 num_ranges_processed;
222         } fsctl_file_level_trim_rsp;
223 }