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 60struct netdfs_uuid { 61 DWORD data1; 62 WORD data2; 63 WORD data3; 64 BYTE data4[8]; 65}; 66typedef struct netdfs_uuid netdfs_uuid_t; 67 68struct netdfs_storage_info { 69 DWORD state; 70 LPTSTR server; 71 LPTSTR share; 72}; 73typedef struct netdfs_storage_info netdfs_storage_info_t; 74 75 76struct 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}; 84typedef struct netdfs_storage_info1 netdfs_storage_info1_t; 85 86struct netdfs_info1 { 87 LPTSTR entry_path; 88}; 89typedef struct netdfs_info1 netdfs_info1_t; 90 91struct netdfs_info2 { 92 LPTSTR entry_path; 93 LPTSTR comment; 94 DWORD state; 95 DWORD n_store; 96}; 97typedef struct netdfs_info2 netdfs_info2_t; 98 99struct 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}; 107typedef struct netdfs_info3 netdfs_info3_t; 108 109struct 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}; 119typedef struct netdfs_info4 netdfs_info4_t; 120 121struct 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}; 131typedef struct netdfs_info5 netdfs_info5_t; 132 133struct 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}; 145typedef struct netdfs_info6 netdfs_info6_t; 146 147struct netdfs_info100 { 148 LPTSTR comment; 149}; 150typedef struct netdfs_info100 netdfs_info100_t; 151 152struct netdfs_info101 { 153 DWORD state; 154}; 155typedef struct netdfs_info101 netdfs_info101_t; 156 157 158struct netdfs_info102 { 159 DWORD timeout; 160}; 161typedef struct netdfs_info102 netdfs_info102_t; 162 163 164struct netdfs_info103 { 165 DWORD property_flag_mask; 166 DWORD property_flags; 167}; 168typedef struct netdfs_info103 netdfs_info103_t; 169 170 171struct netdfs_info104 { 172 DWORD priority_class; 173 WORD priority_rank; 174 WORD reserved; 175}; 176typedef struct netdfs_info104 netdfs_info104_t; 177 178 179struct netdfs_info105 { 180 LPTSTR comment; 181 DWORD state; 182 DWORD timeout; 183 DWORD property_flag_mask; 184 DWORD property_flags; 185}; 186typedef struct netdfs_info105 netdfs_info105_t; 187 188 189struct netdfs_info106 { 190 DWORD storage_state; 191 DWORD priority_class; 192 DWORD priority_rank; 193}; 194 195 196struct netdfs_info200 { 197 LPTSTR entry_path; 198}; 199 200 201struct netdfs_info300 { 202 DWORD flavor; 203 LPTSTR dfsname; 204}; 205typedef struct netdfs_info300 netdfs_info300_t; 206 207 208union 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 226struct netdfs_info { 227 DWORD level; 228 SWITCH(level) 229 union netdfs_info_u iu; 230}; 231typedef struct netdfs_info netdfs_info_t; 232 233 234struct netdfs_array1 { 235 DWORD count; 236 SIZE_IS(count) 237 struct netdfs_info1 *info1; 238}; 239 240struct netdfs_array2 { 241 DWORD count; 242 SIZE_IS(count) 243 struct netdfs_info2 *info2; 244}; 245 246struct netdfs_array3 { 247 DWORD count; 248 SIZE_IS(count) 249 struct netdfs_info3 *info3; 250}; 251 252struct netdfs_array4 { 253 DWORD count; 254 SIZE_IS(count) 255 struct netdfs_info4 *info4; 256}; 257 258struct netdfs_array5 { 259 DWORD count; 260 SIZE_IS(count) 261 struct netdfs_info5 *info5; 262}; 263 264struct netdfs_array6 { 265 DWORD count; 266 SIZE_IS(count) 267 struct netdfs_info6 *info6; 268}; 269 270struct netdfs_array200 { 271 DWORD count; 272 SIZE_IS(count) 273 struct netdfs_info200 *info200; 274}; 275 276struct netdfs_array300 { 277 DWORD count; 278 SIZE_IS(count) 279 struct netdfs_info300 *info300; 280}; 281 282union 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 295struct 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 */ 308OPERATION(NETDFS_OPNUM_GETVER) 309struct 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 */ 320OPERATION(NETDFS_OPNUM_ADD) 321struct 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}; 329typedef 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 */ 339OPERATION(NETDFS_OPNUM_REMOVE) 340struct 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 */ 357OPERATION(NETDFS_OPNUM_SETINFO) 358struct 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}; 366typedef 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 */ 379OPERATION(NETDFS_OPNUM_GETINFO) 380struct 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}; 388typedef 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 */ 400OPERATION(NETDFS_OPNUM_ENUM) 401struct 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}; 408typedef 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 */ 417OPERATION(NETDFS_OPNUM_RENAME) 418struct 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 */ 431OPERATION(NETDFS_OPNUM_MOVE) 432struct 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 */ 445OPERATION(NETDFS_OPNUM_ADDSTDROOT) 446struct 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 */ 459OPERATION(NETDFS_OPNUM_REMSTDROOT) 460struct 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 */ 477OPERATION(NETDFS_OPNUM_ENUMEX) 478struct 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 */ 493INTERFACE(0) 494union 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}; 518typedef union netdfs_interface netdfs_interface_t; 519EXTERNTYPEINFO(netdfs_interface) 520 521 522#endif /* _NETDFS_NDL_ */ 523