1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 * 25 * Copyright 2013 Nexenta Systems, Inc. All rights reserved. 26 */ 27 28 #ifndef _NETDFS_NDL_ 29 #define _NETDFS_NDL_ 30 31 /* 32 * NT Distributed File Service (NETDFS) RPC interface definition. 33 */ 34 35 #include <libmlrpc/ndrtypes.ndl> 36 37 38 #define NETDFS_ABSTRACT_UUID "4fc742e0-4a10-11cf-8273-00aa004ae673" 39 #define NETDFS_ABSTRACT_VERS 3 40 41 #define NETDFS_TRANSFER_UUID "8a885d04-1ceb-11c9-9fe8-08002b104860" 42 #define NETDFS_TRANSFER_VERS 2 43 44 #define NETDFS_OPNUM_GETVER 0x00 45 #define NETDFS_OPNUM_ADD 0x01 46 #define NETDFS_OPNUM_REMOVE 0x02 47 #define NETDFS_OPNUM_SETINFO 0x03 48 #define NETDFS_OPNUM_GETINFO 0x04 49 #define NETDFS_OPNUM_ENUM 0x05 50 #define NETDFS_OPNUM_MOVE 0x06 51 #define NETDFS_OPNUM_RENAME 0x07 52 #define NETDFS_OPNUM_ADDSTDROOT 0x0c 53 #define NETDFS_OPNUM_REMSTDROOT 0x0d 54 #define NETDFS_OPNUM_ENUMEX 0x15 55 56 #define DFS_MANAGER_VERSION_NT4 0x01 57 #define DFS_MANAGER_VERSION_W2K 0x02 58 #define DFS_MANAGER_VERSION_W2K3 0x04 59 60 struct netdfs_uuid { 61 DWORD data1; 62 WORD data2; 63 WORD data3; 64 BYTE data4[8]; 65 }; 66 typedef struct netdfs_uuid netdfs_uuid_t; 67 68 struct netdfs_storage_info { 69 DWORD state; 70 LPTSTR server; 71 LPTSTR share; 72 }; 73 typedef struct netdfs_storage_info netdfs_storage_info_t; 74 75 76 struct netdfs_storage_info1 { 77 DWORD state; 78 LPTSTR server; 79 LPTSTR share; 80 DWORD p_class; 81 WORD p_rank; 82 WORD p_reserved; 83 }; 84 typedef struct netdfs_storage_info1 netdfs_storage_info1_t; 85 86 struct netdfs_info1 { 87 LPTSTR entry_path; 88 }; 89 typedef struct netdfs_info1 netdfs_info1_t; 90 91 struct netdfs_info2 { 92 LPTSTR entry_path; 93 LPTSTR comment; 94 DWORD state; 95 DWORD n_store; 96 }; 97 typedef struct netdfs_info2 netdfs_info2_t; 98 99 struct netdfs_info3 { 100 LPTSTR entry_path; 101 LPTSTR comment; 102 DWORD state; 103 DWORD n_store; 104 SIZE_IS(n_store) 105 struct netdfs_storage_info *si; 106 }; 107 typedef struct netdfs_info3 netdfs_info3_t; 108 109 struct netdfs_info4 { 110 LPTSTR entry_path; 111 LPTSTR comment; 112 DWORD state; 113 DWORD timeout; 114 netdfs_uuid_t guid; 115 DWORD n_store; 116 SIZE_IS(n_store) 117 struct netdfs_storage_info *si; 118 }; 119 typedef struct netdfs_info4 netdfs_info4_t; 120 121 struct netdfs_info5 { 122 LPTSTR entry_path; 123 LPTSTR comment; 124 DWORD state; 125 DWORD timeout; 126 netdfs_uuid_t guid; 127 DWORD flags; 128 DWORD metadata_sz; 129 DWORD n_store; 130 }; 131 typedef struct netdfs_info5 netdfs_info5_t; 132 133 struct netdfs_info6 { 134 LPTSTR entry_path; 135 LPTSTR comment; 136 DWORD state; 137 DWORD timeout; 138 netdfs_uuid_t guid; 139 DWORD flags; 140 DWORD metadata_sz; 141 DWORD n_store; 142 SIZE_IS(n_store) 143 struct netdfs_storage_info1 *si; 144 }; 145 typedef struct netdfs_info6 netdfs_info6_t; 146 147 struct netdfs_info100 { 148 LPTSTR comment; 149 }; 150 typedef struct netdfs_info100 netdfs_info100_t; 151 152 struct netdfs_info101 { 153 DWORD state; 154 }; 155 typedef struct netdfs_info101 netdfs_info101_t; 156 157 158 struct netdfs_info102 { 159 DWORD timeout; 160 }; 161 typedef struct netdfs_info102 netdfs_info102_t; 162 163 164 struct netdfs_info103 { 165 DWORD property_flag_mask; 166 DWORD property_flags; 167 }; 168 typedef struct netdfs_info103 netdfs_info103_t; 169 170 171 struct netdfs_info104 { 172 DWORD priority_class; 173 WORD priority_rank; 174 WORD reserved; 175 }; 176 typedef struct netdfs_info104 netdfs_info104_t; 177 178 179 struct netdfs_info105 { 180 LPTSTR comment; 181 DWORD state; 182 DWORD timeout; 183 DWORD property_flag_mask; 184 DWORD property_flags; 185 }; 186 typedef struct netdfs_info105 netdfs_info105_t; 187 188 189 struct netdfs_info106 { 190 DWORD storage_state; 191 DWORD priority_class; 192 DWORD priority_rank; 193 }; 194 195 196 struct netdfs_info200 { 197 LPTSTR entry_path; 198 }; 199 200 201 struct netdfs_info300 { 202 DWORD flavor; 203 LPTSTR dfsname; 204 }; 205 typedef struct netdfs_info300 netdfs_info300_t; 206 207 208 union netdfs_info_u { 209 CASE(1) struct netdfs_info1 *info1; 210 CASE(2) struct netdfs_info2 *info2; 211 CASE(3) struct netdfs_info3 *info3; 212 CASE(4) struct netdfs_info4 *info4; 213 CASE(5) struct netdfs_info5 *info5; 214 CASE(6) struct netdfs_info6 *info6; 215 CASE(100) struct netdfs_info100 *info100; 216 CASE(101) struct netdfs_info101 *info101; 217 CASE(102) struct netdfs_info102 *info102; 218 CASE(103) struct netdfs_info103 *info103; 219 CASE(104) struct netdfs_info104 *info104; 220 CASE(105) struct netdfs_info105 *info105; 221 CASE(106) struct netdfs_info106 *info106; 222 DEFAULT char *nullptr; 223 }; 224 225 226 struct netdfs_info { 227 DWORD level; 228 SWITCH(level) 229 union netdfs_info_u iu; 230 }; 231 typedef struct netdfs_info netdfs_info_t; 232 233 234 struct netdfs_array1 { 235 DWORD count; 236 SIZE_IS(count) 237 struct netdfs_info1 *info1; 238 }; 239 240 struct netdfs_array2 { 241 DWORD count; 242 SIZE_IS(count) 243 struct netdfs_info2 *info2; 244 }; 245 246 struct netdfs_array3 { 247 DWORD count; 248 SIZE_IS(count) 249 struct netdfs_info3 *info3; 250 }; 251 252 struct netdfs_array4 { 253 DWORD count; 254 SIZE_IS(count) 255 struct netdfs_info4 *info4; 256 }; 257 258 struct netdfs_array5 { 259 DWORD count; 260 SIZE_IS(count) 261 struct netdfs_info5 *info5; 262 }; 263 264 struct netdfs_array6 { 265 DWORD count; 266 SIZE_IS(count) 267 struct netdfs_info6 *info6; 268 }; 269 270 struct netdfs_array200 { 271 DWORD count; 272 SIZE_IS(count) 273 struct netdfs_info200 *info200; 274 }; 275 276 struct netdfs_array300 { 277 DWORD count; 278 SIZE_IS(count) 279 struct netdfs_info300 *info300; 280 }; 281 282 union netdfs_enum_info_u { 283 CASE(1) struct netdfs_array1 *info1; 284 CASE(2) struct netdfs_array2 *info2; 285 CASE(3) struct netdfs_array3 *info3; 286 CASE(4) struct netdfs_array4 *info4; 287 CASE(5) struct netdfs_array5 *info5; 288 CASE(6) struct netdfs_array6 *info6; 289 CASE(200) struct netdfs_array200 *info200; 290 CASE(300) struct netdfs_array300 *info300; 291 DEFAULT char *nullptr; 292 }; 293 294 295 struct netdfs_enum_info { 296 DWORD level; 297 DWORD switch_value; 298 SWITCH(switch_value) 299 union netdfs_enum_info_u iu; 300 }; 301 302 303 /* 304 *********************************************************************** 305 * Return server version id 306 *********************************************************************** 307 */ 308 OPERATION(NETDFS_OPNUM_GETVER) 309 struct netdfs_getver { 310 OUT DWORD version; 311 }; 312 313 314 /* 315 *********************************************************************** 316 * Add a new volume or additional storage for an existing volume at 317 * dfs_path. 318 *********************************************************************** 319 */ 320 OPERATION(NETDFS_OPNUM_ADD) 321 struct netdfs_add { 322 IN REFERENCE LPTSTR dfs_path; 323 IN REFERENCE LPTSTR server; 324 IN LPTSTR share; 325 IN LPTSTR comment; 326 IN DWORD flags; 327 OUT DWORD status; 328 }; 329 typedef struct netdfs_add netdfs_add_t; 330 331 332 /* 333 *********************************************************************** 334 * Remove a volume or additional storage for volume from the DFS at 335 * dfs_path. When applied to the last storage in a volume, removes 336 * the volume from the DFS. 337 *********************************************************************** 338 */ 339 OPERATION(NETDFS_OPNUM_REMOVE) 340 struct netdfs_remove { 341 IN REFERENCE LPTSTR dfs_path; 342 IN LPTSTR server; 343 IN LPTSTR share; 344 OUT DWORD status; 345 }; 346 347 348 /* 349 *********************************************************************** 350 * Set information about the volume or storage. If the server and share 351 * are specified, the information set is specific to that server and 352 * share. Otherwise the information is specific to the volume as a whole. 353 * 354 * Valid levels are 100-102. 355 *********************************************************************** 356 */ 357 OPERATION(NETDFS_OPNUM_SETINFO) 358 struct netdfs_setinfo { 359 IN REFERENCE LPTSTR dfs_path; 360 IN LPTSTR server; 361 IN LPTSTR share; 362 IN DWORD level; 363 IN struct netdfs_info info; 364 OUT DWORD status; 365 }; 366 typedef struct netdfs_setinfo netdfs_setinfo_t; 367 368 369 /* 370 *********************************************************************** 371 * Get information about the volume or storage. If the server and share 372 * are specified, the information returned is specific to that server 373 * and share. Otherwise the information is specific to the volume as a 374 * whole. 375 * 376 * Valid levels are 1-4, 100-102. 377 *********************************************************************** 378 */ 379 OPERATION(NETDFS_OPNUM_GETINFO) 380 struct netdfs_getinfo { 381 IN REFERENCE LPTSTR dfs_path; 382 IN LPTSTR server; 383 IN LPTSTR share; 384 IN DWORD level; 385 OUT struct netdfs_info info; 386 OUT DWORD status; 387 }; 388 typedef struct netdfs_getinfo netdfs_getinfo_t; 389 390 391 /* 392 *********************************************************************** 393 * Get information about all of the volumes in the DFS. dfs_path is 394 * the "server" part of the UNC name used to refer to this particular 395 * DFS. 396 * 397 * Valid levels are 1-3. 398 *********************************************************************** 399 */ 400 OPERATION(NETDFS_OPNUM_ENUM) 401 struct netdfs_enum { 402 IN DWORD level; 403 IN DWORD pref_max_len; 404 INOUT struct netdfs_enum_info *info; 405 INOUT DWORD *resume_handle; 406 OUT DWORD status; 407 }; 408 typedef struct netdfs_enum netdfs_enum_t; 409 410 411 /* 412 *********************************************************************** 413 * Rename the current Win32 path in a DFS to a new Win32 path in the 414 * same DFS. 415 *********************************************************************** 416 */ 417 OPERATION(NETDFS_OPNUM_RENAME) 418 struct netdfs_rename { 419 IN REFERENCE LPTSTR dfs_path; 420 IN REFERENCE LPTSTR new_path; 421 OUT DWORD status; 422 }; 423 424 425 /* 426 *********************************************************************** 427 * Move a DFS volume and all subordinate volumes from one place in the 428 * DFS to another place in the DFS. 429 *********************************************************************** 430 */ 431 OPERATION(NETDFS_OPNUM_MOVE) 432 struct netdfs_move { 433 IN REFERENCE LPTSTR dfs_path; 434 IN REFERENCE LPTSTR new_path; 435 IN DWORD flags; 436 OUT DWORD status; 437 }; 438 439 440 /* 441 *********************************************************************** 442 * Add a DFS root share. 443 *********************************************************************** 444 */ 445 OPERATION(NETDFS_OPNUM_ADDSTDROOT) 446 struct netdfs_addstdroot { 447 IN REFERENCE LPTSTR server; 448 IN REFERENCE LPTSTR share; 449 IN REFERENCE LPTSTR comment; 450 IN DWORD flags; 451 OUT DWORD status; 452 }; 453 454 /* 455 *********************************************************************** 456 * Remove a DFS root share. 457 *********************************************************************** 458 */ 459 OPERATION(NETDFS_OPNUM_REMSTDROOT) 460 struct netdfs_remstdroot { 461 IN REFERENCE LPTSTR server; 462 IN REFERENCE LPTSTR share; 463 IN DWORD flags; 464 OUT DWORD status; 465 }; 466 467 468 /* 469 *********************************************************************** 470 * Get information about all of the volumes in the DFS. dfs_path is 471 * the "server" part of the UNC name used to refer to this particular 472 * DFS. 473 * 474 * Valid levels are 1-3. 475 *********************************************************************** 476 */ 477 OPERATION(NETDFS_OPNUM_ENUMEX) 478 struct netdfs_enumex { 479 IN REFERENCE LPTSTR dfs_path; 480 IN DWORD level; 481 IN DWORD pref_max_len; 482 INOUT struct netdfs_enum_info *info; 483 INOUT DWORD *resume_handle; 484 OUT DWORD status; 485 }; 486 487 488 /* 489 *********************************************************************** 490 * The NETDFS interface definiton. 491 *********************************************************************** 492 */ 493 INTERFACE(0) 494 union netdfs_interface { 495 CASE(NETDFS_OPNUM_GETVER) 496 struct netdfs_getver netdfs_getver; 497 CASE(NETDFS_OPNUM_ADD) 498 struct netdfs_add netdfs_add; 499 CASE(NETDFS_OPNUM_REMOVE) 500 struct netdfs_remove netdfs_remove; 501 CASE(NETDFS_OPNUM_SETINFO) 502 struct netdfs_setinfo netdfs_setinfo; 503 CASE(NETDFS_OPNUM_GETINFO) 504 struct netdfs_getinfo netdfs_getinfo; 505 CASE(NETDFS_OPNUM_ENUM) 506 struct netdfs_enum netdfs_enum; 507 CASE(NETDFS_OPNUM_MOVE) 508 struct netdfs_move netdfs_move; 509 CASE(NETDFS_OPNUM_RENAME) 510 struct netdfs_rename netdfs_rename; 511 CASE(NETDFS_OPNUM_ADDSTDROOT) 512 struct netdfs_addstdroot netdfs_addstdroot; 513 CASE(NETDFS_OPNUM_REMSTDROOT) 514 struct netdfs_remstdroot netdfs_remstdroot; 515 CASE(NETDFS_OPNUM_ENUMEX) 516 struct netdfs_enumex netdfs_enumex; 517 }; 518 typedef union netdfs_interface netdfs_interface_t; 519 EXTERNTYPEINFO(netdfs_interface) 520 521 522 #endif /* _NETDFS_NDL_ */