1// Requests.h 2 3#ifndef USERLAND_FS_REQUESTS_H 4#define USERLAND_FS_REQUESTS_H 5 6#include <fs_attr.h> 7#include <fs_index.h> 8#include <fsproto.h> 9 10#include "Compatibility.h" 11#include "Request.h" 12 13enum { 14 MAX_REQUEST_ADDRESS_COUNT = 4, 15}; 16 17// request types 18enum { 19 // kernel -> userland requests 20 21 // administrative 22 UFS_DISCONNECT_REQUEST = 0, 23 FS_CONNECT_REQUEST, 24 FS_CONNECT_REPLY, 25 // FS 26 MOUNT_VOLUME_REQUEST, 27 MOUNT_VOLUME_REPLY, 28 UNMOUNT_VOLUME_REQUEST, 29 UNMOUNT_VOLUME_REPLY, 30 INITIALIZE_VOLUME_REQUEST, 31 INITIALIZE_VOLUME_REPLY, 32 SYNC_VOLUME_REQUEST, 33 SYNC_VOLUME_REPLY, 34 READ_FS_STAT_REQUEST, 35 READ_FS_STAT_REPLY, 36 WRITE_FS_STAT_REQUEST, 37 WRITE_FS_STAT_REPLY, 38 // vnodes 39 READ_VNODE_REQUEST, 40 READ_VNODE_REPLY, 41 WRITE_VNODE_REQUEST, 42 WRITE_VNODE_REPLY, 43 FS_REMOVE_VNODE_REQUEST, 44 FS_REMOVE_VNODE_REPLY, 45 // nodes 46 FSYNC_REQUEST, 47 FSYNC_REPLY, 48 READ_STAT_REQUEST, 49 READ_STAT_REPLY, 50 WRITE_STAT_REQUEST, 51 WRITE_STAT_REPLY, 52 ACCESS_REQUEST, 53 ACCESS_REPLY, 54 // files 55 CREATE_REQUEST, 56 CREATE_REPLY, 57 OPEN_REQUEST, 58 OPEN_REPLY, 59 CLOSE_REQUEST, 60 CLOSE_REPLY, 61 FREE_COOKIE_REQUEST, 62 FREE_COOKIE_REPLY, 63 READ_REQUEST, 64 READ_REPLY, 65 WRITE_REQUEST, 66 WRITE_REPLY, 67 IOCTL_REQUEST, 68 IOCTL_REPLY, 69 SET_FLAGS_REQUEST, 70 SET_FLAGS_REPLY, 71 SELECT_REQUEST, 72 SELECT_REPLY, 73 DESELECT_REQUEST, 74 DESELECT_REPLY, 75 // hard links / symlinks 76 LINK_REQUEST, 77 LINK_REPLY, 78 SYMLINK_REQUEST, 79 SYMLINK_REPLY, 80 UNLINK_REQUEST, 81 UNLINK_REPLY, 82 READ_LINK_REQUEST, 83 READ_LINK_REPLY, 84 RENAME_REQUEST, 85 RENAME_REPLY, 86 // directories 87 MKDIR_REQUEST, 88 MKDIR_REPLY, 89 RMDIR_REQUEST, 90 RMDIR_REPLY, 91 OPEN_DIR_REQUEST, 92 OPEN_DIR_REPLY, 93 CLOSE_DIR_REQUEST, 94 CLOSE_DIR_REPLY, 95 FREE_DIR_COOKIE_REQUEST, 96 FREE_DIR_COOKIE_REPLY, 97 READ_DIR_REQUEST, 98 READ_DIR_REPLY, 99 REWIND_DIR_REQUEST, 100 REWIND_DIR_REPLY, 101 WALK_REQUEST, 102 WALK_REPLY, 103 // attributes 104 OPEN_ATTR_DIR_REQUEST, 105 OPEN_ATTR_DIR_REPLY, 106 CLOSE_ATTR_DIR_REQUEST, 107 CLOSE_ATTR_DIR_REPLY, 108 FREE_ATTR_DIR_COOKIE_REQUEST, 109 FREE_ATTR_DIR_COOKIE_REPLY, 110 READ_ATTR_DIR_REQUEST, 111 READ_ATTR_DIR_REPLY, 112 REWIND_ATTR_DIR_REQUEST, 113 REWIND_ATTR_DIR_REPLY, 114 READ_ATTR_REQUEST, 115 READ_ATTR_REPLY, 116 WRITE_ATTR_REQUEST, 117 WRITE_ATTR_REPLY, 118 REMOVE_ATTR_REQUEST, 119 REMOVE_ATTR_REPLY, 120 RENAME_ATTR_REQUEST, 121 RENAME_ATTR_REPLY, 122 STAT_ATTR_REQUEST, 123 STAT_ATTR_REPLY, 124 // indices 125 OPEN_INDEX_DIR_REQUEST, 126 OPEN_INDEX_DIR_REPLY, 127 CLOSE_INDEX_DIR_REQUEST, 128 CLOSE_INDEX_DIR_REPLY, 129 FREE_INDEX_DIR_COOKIE_REQUEST, 130 FREE_INDEX_DIR_COOKIE_REPLY, 131 READ_INDEX_DIR_REQUEST, 132 READ_INDEX_DIR_REPLY, 133 REWIND_INDEX_DIR_REQUEST, 134 REWIND_INDEX_DIR_REPLY, 135 CREATE_INDEX_REQUEST, 136 CREATE_INDEX_REPLY, 137 REMOVE_INDEX_REQUEST, 138 REMOVE_INDEX_REPLY, 139 RENAME_INDEX_REQUEST, 140 RENAME_INDEX_REPLY, 141 STAT_INDEX_REQUEST, 142 STAT_INDEX_REPLY, 143 // queries 144 OPEN_QUERY_REQUEST, 145 OPEN_QUERY_REPLY, 146 CLOSE_QUERY_REQUEST, 147 CLOSE_QUERY_REPLY, 148 FREE_QUERY_COOKIE_REQUEST, 149 FREE_QUERY_COOKIE_REPLY, 150 READ_QUERY_REQUEST, 151 READ_QUERY_REPLY, 152 153 // userland -> kernel requests 154 // notifications 155 NOTIFY_LISTENER_REQUEST, 156 NOTIFY_LISTENER_REPLY, 157 NOTIFY_SELECT_EVENT_REQUEST, 158 NOTIFY_SELECT_EVENT_REPLY, 159 SEND_NOTIFICATION_REQUEST, 160 SEND_NOTIFICATION_REPLY, 161 // vnodes 162 GET_VNODE_REQUEST, 163 GET_VNODE_REPLY, 164 PUT_VNODE_REQUEST, 165 PUT_VNODE_REPLY, 166 NEW_VNODE_REQUEST, 167 NEW_VNODE_REPLY, 168 REMOVE_VNODE_REQUEST, 169 REMOVE_VNODE_REPLY, 170 UNREMOVE_VNODE_REQUEST, 171 UNREMOVE_VNODE_REPLY, 172 IS_VNODE_REMOVED_REQUEST, 173 IS_VNODE_REMOVED_REPLY, 174 175 // general reply 176 RECEIPT_ACK_REPLY, 177 178 // invalid request ID (e.g. for request handlers) 179 NO_REQUEST, 180}; 181 182namespace UserlandFSUtil { 183 184// ReplyRequest 185class ReplyRequest : public Request { 186public: 187 ReplyRequest(uint32 type) : Request(type) {} 188 189 status_t error; 190}; 191 192// #pragma mark - 193// #pragma mark ----- kernel requests ----- 194 195// VolumeRequest 196class VolumeRequest : public Request { 197public: 198 VolumeRequest(uint32 type) : Request(type) {} 199 200 void* volume; 201}; 202 203// NodeRequest 204class NodeRequest : public VolumeRequest { 205public: 206 NodeRequest(uint32 type) : VolumeRequest(type) {} 207 208 void* node; 209}; 210 211// FileRequest 212class FileRequest : public NodeRequest { 213public: 214 FileRequest(uint32 type) : NodeRequest(type) {} 215 216 void* fileCookie; 217}; 218 219// DirRequest 220class DirRequest : public NodeRequest { 221public: 222 DirRequest(uint32 type) : NodeRequest(type) {} 223 224 void* dirCookie; 225}; 226 227// AttrDirRequest 228class AttrDirRequest : public NodeRequest { 229public: 230 AttrDirRequest(uint32 type) : NodeRequest(type) {} 231 232 void* attrDirCookie; 233}; 234 235// IndexDirRequest 236class IndexDirRequest : public VolumeRequest { 237public: 238 IndexDirRequest(uint32 type) : VolumeRequest(type) {} 239 240 void* indexDirCookie; 241}; 242 243// #pragma mark - 244// #pragma mark ----- administrative ----- 245 246// UFSDisconnectRequest 247class UFSDisconnectRequest : public Request { 248public: 249 UFSDisconnectRequest() : Request(UFS_DISCONNECT_REQUEST) {} 250}; 251 252// FSConnectRequest 253class FSConnectRequest : public Request { 254public: 255 FSConnectRequest() : Request(FS_CONNECT_REQUEST) {} 256 status_t GetAddressInfos(AddressInfo* infos, int32* count); 257 258 Address fsName; 259}; 260 261// FSConnectReply 262class FSConnectReply : public ReplyRequest { 263public: 264 FSConnectReply() : ReplyRequest(FS_CONNECT_REPLY) {} 265 status_t GetAddressInfos(AddressInfo* infos, int32* count); 266 267 Address portInfos; 268 int32 portInfoCount; 269}; 270 271// #pragma mark - 272// #pragma mark ----- FS ----- 273 274// MountVolumeRequest 275class MountVolumeRequest : public Request { 276public: 277 MountVolumeRequest() : Request(MOUNT_VOLUME_REQUEST) {} 278 status_t GetAddressInfos(AddressInfo* infos, int32* count); 279 280 nspace_id nsid; 281 Address cwd; // current working dir of the mount() caller 282 Address device; 283 ulong flags; 284 Address parameters; 285}; 286 287// MountVolumeReply 288class MountVolumeReply : public ReplyRequest { 289public: 290 MountVolumeReply() : ReplyRequest(MOUNT_VOLUME_REPLY) {} 291 292 vnode_id rootID; 293 void* volume; 294}; 295 296// UnmountVolumeRequest 297class UnmountVolumeRequest : public VolumeRequest { 298public: 299 UnmountVolumeRequest() : VolumeRequest(UNMOUNT_VOLUME_REQUEST) {} 300}; 301 302// UnmountVolumeReply 303class UnmountVolumeReply : public ReplyRequest { 304public: 305 UnmountVolumeReply() : ReplyRequest(UNMOUNT_VOLUME_REPLY) {} 306}; 307 308// InitializeVolumeRequest 309class InitializeVolumeRequest : public Request { 310public: 311 InitializeVolumeRequest() : Request(INITIALIZE_VOLUME_REQUEST) {} 312 status_t GetAddressInfos(AddressInfo* infos, int32* count); 313 314 Address device; 315 Address parameters; 316}; 317 318// InitializeVolumeReply 319class InitializeVolumeReply : public ReplyRequest { 320public: 321 InitializeVolumeReply() : ReplyRequest(INITIALIZE_VOLUME_REPLY) {} 322}; 323 324// SyncVolumeRequest 325class SyncVolumeRequest : public VolumeRequest { 326public: 327 SyncVolumeRequest() : VolumeRequest(SYNC_VOLUME_REQUEST) {} 328}; 329 330// SyncVolumeReply 331class SyncVolumeReply : public ReplyRequest { 332public: 333 SyncVolumeReply() : ReplyRequest(SYNC_VOLUME_REPLY) {} 334}; 335 336// ReadFSStatRequest 337class ReadFSStatRequest : public VolumeRequest { 338public: 339 ReadFSStatRequest() : VolumeRequest(READ_FS_STAT_REQUEST) {} 340}; 341 342// ReadFSStatReply 343class ReadFSStatReply : public ReplyRequest { 344public: 345 ReadFSStatReply() : ReplyRequest(READ_FS_STAT_REPLY) {} 346 347 fs_info info; 348}; 349 350// WriteFSStatRequest 351class WriteFSStatRequest : public VolumeRequest { 352public: 353 WriteFSStatRequest() : VolumeRequest(WRITE_FS_STAT_REQUEST) {} 354 355 fs_info info; 356 long mask; 357}; 358 359// WriteFSStatReply 360class WriteFSStatReply : public ReplyRequest { 361public: 362 WriteFSStatReply() : ReplyRequest(WRITE_FS_STAT_REPLY) {} 363}; 364 365// #pragma mark - 366// #pragma mark ----- vnodes ----- 367 368// ReadVNodeRequest 369class ReadVNodeRequest : public VolumeRequest { 370public: 371 ReadVNodeRequest() : VolumeRequest(READ_VNODE_REQUEST) {} 372 373 vnode_id vnid; 374 bool reenter; 375}; 376 377// ReadVNodeReply 378class ReadVNodeReply : public ReplyRequest { 379public: 380 ReadVNodeReply() : ReplyRequest(READ_VNODE_REPLY) {} 381 382 void* node; 383}; 384 385// WriteVNodeRequest 386class WriteVNodeRequest : public NodeRequest { 387public: 388 WriteVNodeRequest() : NodeRequest(WRITE_VNODE_REQUEST) {} 389 390 bool reenter; 391}; 392 393// WriteVNodeReply 394class WriteVNodeReply : public ReplyRequest { 395public: 396 WriteVNodeReply() : ReplyRequest(WRITE_VNODE_REPLY) {} 397}; 398 399// FSRemoveVNodeRequest 400class FSRemoveVNodeRequest : public NodeRequest { 401public: 402 FSRemoveVNodeRequest() : NodeRequest(FS_REMOVE_VNODE_REQUEST) {} 403 404 bool reenter; 405}; 406 407// FSRemoveVNodeReply 408class FSRemoveVNodeReply : public ReplyRequest { 409public: 410 FSRemoveVNodeReply() : ReplyRequest(FS_REMOVE_VNODE_REPLY) {} 411}; 412 413// #pragma mark - 414// #pragma mark ----- nodes ----- 415 416// FSyncRequest 417class FSyncRequest : public NodeRequest { 418public: 419 FSyncRequest() : NodeRequest(FSYNC_REQUEST) {} 420}; 421 422// FSyncReply 423class FSyncReply : public ReplyRequest { 424public: 425 FSyncReply() : ReplyRequest(FSYNC_REPLY) {} 426}; 427 428// ReadStatRequest 429class ReadStatRequest : public NodeRequest { 430public: 431 ReadStatRequest() : NodeRequest(READ_STAT_REQUEST) {} 432}; 433 434// ReadStatReply 435class ReadStatReply : public ReplyRequest { 436public: 437 ReadStatReply() : ReplyRequest(READ_STAT_REPLY) {} 438 439 struct stat st; 440}; 441 442// WriteStatRequest 443class WriteStatRequest : public NodeRequest { 444public: 445 WriteStatRequest() : NodeRequest(WRITE_STAT_REQUEST) {} 446 447 struct stat st; 448 long mask; 449}; 450 451// WriteStatReply 452class WriteStatReply : public ReplyRequest { 453public: 454 WriteStatReply() : ReplyRequest(WRITE_STAT_REPLY) {} 455}; 456 457// AccessRequest 458class AccessRequest : public NodeRequest { 459public: 460 AccessRequest() : NodeRequest(ACCESS_REQUEST) {} 461 462 int mode; 463}; 464 465// AccessReply 466class AccessReply : public ReplyRequest { 467public: 468 AccessReply() : ReplyRequest(ACCESS_REPLY) {} 469}; 470 471// #pragma mark - 472// #pragma mark ----- files ----- 473 474// CreateRequest 475class CreateRequest : public NodeRequest { 476public: 477 CreateRequest() : NodeRequest(CREATE_REQUEST) {} 478 status_t GetAddressInfos(AddressInfo* infos, int32* count); 479 480 Address name; 481 int openMode; 482 int mode; 483}; 484 485// CreateReply 486class CreateReply : public ReplyRequest { 487public: 488 CreateReply() : ReplyRequest(CREATE_REPLY) {} 489 490 vnode_id vnid; 491 void* fileCookie; 492}; 493 494// OpenRequest 495class OpenRequest : public NodeRequest { 496public: 497 OpenRequest() : NodeRequest(OPEN_REQUEST) {} 498 499 int openMode; 500}; 501 502// OpenReply 503class OpenReply : public ReplyRequest { 504public: 505 OpenReply() : ReplyRequest(OPEN_REPLY) {} 506 507 void* fileCookie; 508}; 509 510// CloseRequest 511class CloseRequest : public FileRequest { 512public: 513 CloseRequest() : FileRequest(CLOSE_REQUEST) {} 514}; 515 516// CloseReply 517class CloseReply : public ReplyRequest { 518public: 519 CloseReply() : ReplyRequest(CLOSE_REPLY) {} 520}; 521 522// FreeCookieRequest 523class FreeCookieRequest : public FileRequest { 524public: 525 FreeCookieRequest() : FileRequest(FREE_COOKIE_REQUEST) {} 526}; 527 528// FreeCookieReply 529class FreeCookieReply : public ReplyRequest { 530public: 531 FreeCookieReply() : ReplyRequest(FREE_COOKIE_REPLY) {} 532}; 533 534// ReadRequest 535class ReadRequest : public FileRequest { 536public: 537 ReadRequest() : FileRequest(READ_REQUEST) {} 538 539 off_t pos; 540 size_t size; 541}; 542 543// ReadReply 544class ReadReply : public ReplyRequest { 545public: 546 ReadReply() : ReplyRequest(READ_REPLY) {} 547 status_t GetAddressInfos(AddressInfo* infos, int32* count); 548 549 Address buffer; 550 size_t bytesRead; 551}; 552 553// WriteRequest 554class WriteRequest : public FileRequest { 555public: 556 WriteRequest() : FileRequest(WRITE_REQUEST) {} 557 status_t GetAddressInfos(AddressInfo* infos, int32* count); 558 559 Address buffer; 560 off_t pos; 561}; 562 563// WriteReply 564class WriteReply : public ReplyRequest { 565public: 566 WriteReply() : ReplyRequest(WRITE_REPLY) {} 567 568 size_t bytesWritten; 569}; 570 571// IOCtlRequest 572class IOCtlRequest : public FileRequest { 573public: 574 IOCtlRequest() : FileRequest(IOCTL_REQUEST) {} 575 status_t GetAddressInfos(AddressInfo* infos, int32* count); 576 577 int command; 578 void* bufferParameter; 579 size_t lenParameter; 580 bool isBuffer; // if false, just pass bufferParameter 581 // otherwise use buffer 582 Address buffer; 583 int32 writeSize; // ignored unless isBuffer -- then 584 // it indicates the size of the buffer to allocate 585}; 586 587// IOCtlReply 588class IOCtlReply : public ReplyRequest { 589public: 590 IOCtlReply() : ReplyRequest(IOCTL_REPLY) {} 591 status_t GetAddressInfos(AddressInfo* infos, int32* count); 592 593 status_t ioctlError; // we need a special handling since error 594 // may be a part of the client FS protocol 595 Address buffer; 596}; 597 598// SetFlagsRequest 599class SetFlagsRequest : public FileRequest { 600public: 601 SetFlagsRequest() : FileRequest(SET_FLAGS_REQUEST) {} 602 603 int flags; 604}; 605 606// SetFlagsReply 607class SetFlagsReply : public ReplyRequest { 608public: 609 SetFlagsReply() : ReplyRequest(SET_FLAGS_REPLY) {} 610}; 611 612// SelectRequest 613class SelectRequest : public FileRequest { 614public: 615 SelectRequest() : FileRequest(SELECT_REQUEST) {} 616 617 uint8 event; 618 uint32 ref; 619 selectsync* sync; 620}; 621 622// SelectReply 623class SelectReply : public ReplyRequest { 624public: 625 SelectReply() : ReplyRequest(SELECT_REPLY) {} 626}; 627 628// DeselectRequest 629class DeselectRequest : public FileRequest { 630public: 631 DeselectRequest() : FileRequest(DESELECT_REQUEST) {} 632 633 uint8 event; 634 selectsync* sync; 635}; 636 637// DeselectReply 638class DeselectReply : public ReplyRequest { 639public: 640 DeselectReply() : ReplyRequest(DESELECT_REPLY) {} 641}; 642 643// #pragma mark - 644// #pragma mark ----- hard links / symlinks ----- 645 646// LinkRequest 647class LinkRequest : public NodeRequest { 648public: 649 LinkRequest() : NodeRequest(LINK_REQUEST) {} 650 status_t GetAddressInfos(AddressInfo* infos, int32* count); 651 652 Address name; 653 void* target; 654}; 655 656// LinkReply 657class LinkReply : public ReplyRequest { 658public: 659 LinkReply() : ReplyRequest(LINK_REPLY) {} 660}; 661 662// UnlinkRequest 663class UnlinkRequest : public NodeRequest { 664public: 665 UnlinkRequest() : NodeRequest(UNLINK_REQUEST) {} 666 status_t GetAddressInfos(AddressInfo* infos, int32* count); 667 668 Address name; 669}; 670 671// UnlinkReply 672class UnlinkReply : public ReplyRequest { 673public: 674 UnlinkReply() : ReplyRequest(UNLINK_REPLY) {} 675}; 676 677// SymlinkRequest 678class SymlinkRequest : public NodeRequest { 679public: 680 SymlinkRequest() : NodeRequest(SYMLINK_REQUEST) {} 681 status_t GetAddressInfos(AddressInfo* infos, int32* count); 682 683 Address name; 684 Address target; 685}; 686 687// SymlinkReply 688class SymlinkReply : public ReplyRequest { 689public: 690 SymlinkReply() : ReplyRequest(SYMLINK_REPLY) {} 691}; 692 693// ReadLinkRequest 694class ReadLinkRequest : public NodeRequest { 695public: 696 ReadLinkRequest() : NodeRequest(READ_LINK_REQUEST) {} 697 698 size_t size; 699}; 700 701// ReadLinkReply 702class ReadLinkReply : public ReplyRequest { 703public: 704 ReadLinkReply() : ReplyRequest(READ_LINK_REPLY) {} 705 status_t GetAddressInfos(AddressInfo* infos, int32* count); 706 707 Address buffer; 708 size_t bytesRead; 709}; 710 711// RenameRequest 712class RenameRequest : public VolumeRequest { 713public: 714 RenameRequest() : VolumeRequest(RENAME_REQUEST) {} 715 status_t GetAddressInfos(AddressInfo* infos, int32* count); 716 717 void* oldDir; 718 Address oldName; 719 void* newDir; 720 Address newName; 721}; 722 723// RenameReply 724class RenameReply : public ReplyRequest { 725public: 726 RenameReply() : ReplyRequest(RENAME_REPLY) {} 727}; 728 729// #pragma mark - 730// #pragma mark ----- directories ----- 731 732// MkDirRequest 733class MkDirRequest : public NodeRequest { 734public: 735 MkDirRequest() : NodeRequest(MKDIR_REQUEST) {} 736 status_t GetAddressInfos(AddressInfo* infos, int32* count); 737 738 Address name; 739 int mode; 740}; 741 742// MkDirReply 743class MkDirReply : public ReplyRequest { 744public: 745 MkDirReply() : ReplyRequest(MKDIR_REPLY) {} 746}; 747 748// RmDirRequest 749class RmDirRequest : public NodeRequest { 750public: 751 RmDirRequest() : NodeRequest(RMDIR_REQUEST) {} 752 status_t GetAddressInfos(AddressInfo* infos, int32* count); 753 754 Address name; 755}; 756 757// RmDirReply 758class RmDirReply : public ReplyRequest { 759public: 760 RmDirReply() : ReplyRequest(RMDIR_REPLY) {} 761}; 762 763// OpenDirRequest 764class OpenDirRequest : public NodeRequest { 765public: 766 OpenDirRequest() : NodeRequest(OPEN_DIR_REQUEST) {} 767}; 768 769// OpenDirReply 770class OpenDirReply : public ReplyRequest { 771public: 772 OpenDirReply() : ReplyRequest(OPEN_DIR_REPLY) {} 773 774 void* dirCookie; 775}; 776 777// CloseDirRequest 778class CloseDirRequest : public DirRequest { 779public: 780 CloseDirRequest() : DirRequest(CLOSE_DIR_REQUEST) {} 781}; 782 783// CloseDirReply 784class CloseDirReply : public ReplyRequest { 785public: 786 CloseDirReply() : ReplyRequest(CLOSE_DIR_REPLY) {} 787}; 788 789// FreeDirCookieRequest 790class FreeDirCookieRequest : public DirRequest { 791public: 792 FreeDirCookieRequest() : DirRequest(FREE_DIR_COOKIE_REQUEST) {} 793}; 794 795// FreeDirCookieReply 796class FreeDirCookieReply : public ReplyRequest { 797public: 798 FreeDirCookieReply() : ReplyRequest(FREE_DIR_COOKIE_REPLY) {} 799}; 800 801// ReadDirRequest 802class ReadDirRequest : public DirRequest { 803public: 804 ReadDirRequest() : DirRequest(READ_DIR_REQUEST) {} 805 806 size_t bufferSize; 807 int32 count; 808}; 809 810// ReadDirReply 811class ReadDirReply : public ReplyRequest { 812public: 813 ReadDirReply() : ReplyRequest(READ_DIR_REPLY) {} 814 status_t GetAddressInfos(AddressInfo* infos, int32* count); 815 816 int32 count; 817 Address buffer; 818}; 819 820// RewindDirRequest 821class RewindDirRequest : public DirRequest { 822public: 823 RewindDirRequest() : DirRequest(REWIND_DIR_REQUEST) {} 824}; 825 826// RewindDirReply 827class RewindDirReply : public ReplyRequest { 828public: 829 RewindDirReply() : ReplyRequest(REWIND_DIR_REPLY) {} 830}; 831 832// WalkRequest 833class WalkRequest : public NodeRequest { 834public: 835 WalkRequest() : NodeRequest(WALK_REQUEST) {} 836 status_t GetAddressInfos(AddressInfo* infos, int32* count); 837 838 Address entryName; 839 bool traverseLink; 840}; 841 842// WalkReply 843class WalkReply : public ReplyRequest { 844public: 845 WalkReply() : ReplyRequest(WALK_REPLY) {} 846 status_t GetAddressInfos(AddressInfo* infos, int32* count); 847 848 Address resolvedPath; 849 vnode_id vnid; 850}; 851 852// #pragma mark - 853// #pragma mark ----- attributes ----- 854 855// OpenAttrDirRequest 856class OpenAttrDirRequest : public NodeRequest { 857public: 858 OpenAttrDirRequest() : NodeRequest(OPEN_ATTR_DIR_REQUEST) {} 859}; 860 861// OpenAttrDirReply 862class OpenAttrDirReply : public ReplyRequest { 863public: 864 OpenAttrDirReply() : ReplyRequest(OPEN_ATTR_DIR_REPLY) {} 865 866 void* attrDirCookie; 867}; 868 869// CloseAttrDirRequest 870class CloseAttrDirRequest : public AttrDirRequest { 871public: 872 CloseAttrDirRequest() : AttrDirRequest(CLOSE_ATTR_DIR_REQUEST) {} 873}; 874 875// CloseAttrDirReply 876class CloseAttrDirReply : public ReplyRequest { 877public: 878 CloseAttrDirReply() : ReplyRequest(CLOSE_ATTR_DIR_REPLY) {} 879}; 880 881// FreeAttrDirCookieRequest 882class FreeAttrDirCookieRequest : public AttrDirRequest { 883public: 884 FreeAttrDirCookieRequest() : AttrDirRequest(FREE_ATTR_DIR_COOKIE_REQUEST) {} 885}; 886 887// FreeAttrDirCookieReply 888class FreeAttrDirCookieReply : public ReplyRequest { 889public: 890 FreeAttrDirCookieReply() : ReplyRequest(FREE_ATTR_DIR_COOKIE_REPLY) {} 891}; 892 893// ReadAttrDirRequest 894class ReadAttrDirRequest : public AttrDirRequest { 895public: 896 ReadAttrDirRequest() : AttrDirRequest(READ_ATTR_DIR_REQUEST) {} 897 898 size_t bufferSize; 899 int32 count; 900}; 901 902// ReadAttrDirReply 903class ReadAttrDirReply : public ReplyRequest { 904public: 905 ReadAttrDirReply() : ReplyRequest(READ_ATTR_DIR_REPLY) {} 906 status_t GetAddressInfos(AddressInfo* infos, int32* count); 907 908 int32 count; 909 Address buffer; 910}; 911 912// RewindAttrDirRequest 913class RewindAttrDirRequest : public AttrDirRequest { 914public: 915 RewindAttrDirRequest() : AttrDirRequest(REWIND_ATTR_DIR_REQUEST) {} 916}; 917 918// RewindAttrDirReply 919class RewindAttrDirReply : public ReplyRequest { 920public: 921 RewindAttrDirReply() : ReplyRequest(REWIND_ATTR_DIR_REPLY) {} 922}; 923 924// ReadAttrRequest 925class ReadAttrRequest : public NodeRequest { 926public: 927 ReadAttrRequest() : NodeRequest(READ_ATTR_REQUEST) {} 928 status_t GetAddressInfos(AddressInfo* infos, int32* count); 929 930 Address name; 931 int type; 932 off_t pos; 933 size_t size; 934}; 935 936// ReadAttrReply 937class ReadAttrReply : public ReplyRequest { 938public: 939 ReadAttrReply() : ReplyRequest(READ_ATTR_REPLY) {} 940 status_t GetAddressInfos(AddressInfo* infos, int32* count); 941 942 Address buffer; 943 size_t bytesRead; 944}; 945 946// WriteAttrRequest 947class WriteAttrRequest : public NodeRequest { 948public: 949 WriteAttrRequest() : NodeRequest(WRITE_ATTR_REQUEST) {} 950 status_t GetAddressInfos(AddressInfo* infos, int32* count); 951 952 Address name; 953 int type; 954 Address buffer; 955 off_t pos; 956 size_t size; 957}; 958 959// WriteAttrReply 960class WriteAttrReply : public ReplyRequest { 961public: 962 WriteAttrReply() : ReplyRequest(WRITE_ATTR_REPLY) {} 963 964 size_t bytesWritten; 965}; 966 967// RemoveAttrRequest 968class RemoveAttrRequest : public NodeRequest { 969public: 970 RemoveAttrRequest() : NodeRequest(REMOVE_ATTR_REQUEST) {} 971 status_t GetAddressInfos(AddressInfo* infos, int32* count); 972 973 Address name; 974}; 975 976// RemoveAttrReply 977class RemoveAttrReply : public ReplyRequest { 978public: 979 RemoveAttrReply() : ReplyRequest(REMOVE_ATTR_REPLY) {} 980}; 981 982// RenameAttrRequest 983class RenameAttrRequest : public NodeRequest { 984public: 985 RenameAttrRequest() : NodeRequest(RENAME_ATTR_REQUEST) {} 986 status_t GetAddressInfos(AddressInfo* infos, int32* count); 987 988 Address oldName; 989 Address newName; 990}; 991 992// RenameAttrReply 993class RenameAttrReply : public ReplyRequest { 994public: 995 RenameAttrReply() : ReplyRequest(RENAME_ATTR_REPLY) {} 996}; 997 998// StatAttrRequest 999class StatAttrRequest : public NodeRequest { 1000public: 1001 StatAttrRequest() : NodeRequest(STAT_ATTR_REQUEST) {} 1002 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1003 1004 Address name; 1005}; 1006 1007// StatAttrReply 1008class StatAttrReply : public ReplyRequest { 1009public: 1010 StatAttrReply() : ReplyRequest(STAT_ATTR_REPLY) {} 1011 1012 attr_info info; 1013}; 1014 1015// #pragma mark - 1016// #pragma mark ----- indices ----- 1017 1018// OpenIndexDirRequest 1019class OpenIndexDirRequest : public VolumeRequest { 1020public: 1021 OpenIndexDirRequest() : VolumeRequest(OPEN_INDEX_DIR_REQUEST) {} 1022}; 1023 1024// OpenIndexDirReply 1025class OpenIndexDirReply : public ReplyRequest { 1026public: 1027 OpenIndexDirReply() : ReplyRequest(OPEN_INDEX_DIR_REPLY) {} 1028 1029 void* indexDirCookie; 1030}; 1031 1032// CloseIndexDirRequest 1033class CloseIndexDirRequest : public IndexDirRequest { 1034public: 1035 CloseIndexDirRequest() : IndexDirRequest(CLOSE_INDEX_DIR_REQUEST) {} 1036}; 1037 1038// CloseIndexDirReply 1039class CloseIndexDirReply : public ReplyRequest { 1040public: 1041 CloseIndexDirReply() : ReplyRequest(CLOSE_INDEX_DIR_REPLY) {} 1042}; 1043 1044// FreeIndexDirCookieRequest 1045class FreeIndexDirCookieRequest : public IndexDirRequest { 1046public: 1047 FreeIndexDirCookieRequest() 1048 : IndexDirRequest(FREE_INDEX_DIR_COOKIE_REQUEST) {} 1049}; 1050 1051// FreeIndexDirCookieReply 1052class FreeIndexDirCookieReply : public ReplyRequest { 1053public: 1054 FreeIndexDirCookieReply() : ReplyRequest(FREE_INDEX_DIR_COOKIE_REPLY) {} 1055}; 1056 1057// ReadIndexDirRequest 1058class ReadIndexDirRequest : public IndexDirRequest { 1059public: 1060 ReadIndexDirRequest() : IndexDirRequest(READ_INDEX_DIR_REQUEST) {} 1061 1062 size_t bufferSize; 1063 int32 count; 1064}; 1065 1066// ReadIndexDirReply 1067class ReadIndexDirReply : public ReplyRequest { 1068public: 1069 ReadIndexDirReply() : ReplyRequest(READ_INDEX_DIR_REPLY) {} 1070 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1071 1072 int32 count; 1073 Address buffer; 1074}; 1075 1076// RewindIndexDirRequest 1077class RewindIndexDirRequest : public IndexDirRequest { 1078public: 1079 RewindIndexDirRequest() : IndexDirRequest(REWIND_INDEX_DIR_REQUEST) {} 1080}; 1081 1082// RewindIndexDirReply 1083class RewindIndexDirReply : public ReplyRequest { 1084public: 1085 RewindIndexDirReply() : ReplyRequest(REWIND_INDEX_DIR_REPLY) {} 1086}; 1087 1088// CreateIndexRequest 1089class CreateIndexRequest : public VolumeRequest { 1090public: 1091 CreateIndexRequest() : VolumeRequest(CREATE_INDEX_REQUEST) {} 1092 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1093 1094 Address name; 1095 int type; 1096 int flags; 1097}; 1098 1099// CreateIndexReply 1100class CreateIndexReply : public ReplyRequest { 1101public: 1102 CreateIndexReply() : ReplyRequest(CREATE_INDEX_REPLY) {} 1103}; 1104 1105// RemoveIndexRequest 1106class RemoveIndexRequest : public VolumeRequest { 1107public: 1108 RemoveIndexRequest() : VolumeRequest(REMOVE_INDEX_REQUEST) {} 1109 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1110 1111 Address name; 1112}; 1113 1114// RemoveIndexReply 1115class RemoveIndexReply : public ReplyRequest { 1116public: 1117 RemoveIndexReply() : ReplyRequest(REMOVE_INDEX_REPLY) {} 1118}; 1119 1120// RenameIndexRequest 1121class RenameIndexRequest : public VolumeRequest { 1122public: 1123 RenameIndexRequest() : VolumeRequest(RENAME_INDEX_REQUEST) {} 1124 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1125 1126 Address oldName; 1127 Address newName; 1128}; 1129 1130// RenameIndexReply 1131class RenameIndexReply : public ReplyRequest { 1132public: 1133 RenameIndexReply() : ReplyRequest(RENAME_INDEX_REPLY) {} 1134}; 1135 1136// StatIndexRequest 1137class StatIndexRequest : public VolumeRequest { 1138public: 1139 StatIndexRequest() : VolumeRequest(STAT_INDEX_REQUEST) {} 1140 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1141 1142 Address name; 1143}; 1144 1145// StatIndexReply 1146class StatIndexReply : public ReplyRequest { 1147public: 1148 StatIndexReply() : ReplyRequest(STAT_INDEX_REPLY) {} 1149 1150 index_info info; 1151}; 1152 1153// #pragma mark - 1154// #pragma mark ----- queries ----- 1155 1156// OpenQueryRequest 1157class OpenQueryRequest : public VolumeRequest { 1158public: 1159 OpenQueryRequest() : VolumeRequest(OPEN_QUERY_REQUEST) {} 1160 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1161 1162 Address queryString; 1163 ulong flags; 1164 port_id port; 1165 long token; 1166}; 1167 1168// OpenQueryReply 1169class OpenQueryReply : public ReplyRequest { 1170public: 1171 OpenQueryReply() : ReplyRequest(OPEN_QUERY_REPLY) {} 1172 1173 void* queryCookie; 1174}; 1175 1176// CloseQueryRequest 1177class CloseQueryRequest : public VolumeRequest { 1178public: 1179 CloseQueryRequest() : VolumeRequest(CLOSE_QUERY_REQUEST) {} 1180 1181 void* queryCookie; 1182}; 1183 1184// CloseQueryReply 1185class CloseQueryReply : public ReplyRequest { 1186public: 1187 CloseQueryReply() : ReplyRequest(CLOSE_QUERY_REPLY) {} 1188}; 1189 1190// FreeQueryCookieRequest 1191class FreeQueryCookieRequest : public VolumeRequest { 1192public: 1193 FreeQueryCookieRequest() : VolumeRequest(FREE_QUERY_COOKIE_REQUEST) {} 1194 1195 void* queryCookie; 1196}; 1197 1198// FreeQueryCookieReply 1199class FreeQueryCookieReply : public ReplyRequest { 1200public: 1201 FreeQueryCookieReply() : ReplyRequest(FREE_QUERY_COOKIE_REPLY) {} 1202}; 1203 1204// ReadQueryRequest 1205class ReadQueryRequest : public VolumeRequest { 1206public: 1207 ReadQueryRequest() : VolumeRequest(READ_QUERY_REQUEST) {} 1208 1209 void* queryCookie; 1210 size_t bufferSize; 1211 int32 count; 1212}; 1213 1214// ReadQueryReply 1215class ReadQueryReply : public ReplyRequest { 1216public: 1217 ReadQueryReply() : ReplyRequest(READ_QUERY_REPLY) {} 1218 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1219 1220 int32 count; 1221 Address buffer; 1222}; 1223 1224 1225// #pragma mark - 1226// #pragma mark ----- userland requests ----- 1227 1228// #pragma mark - 1229// #pragma mark ----- notifications ----- 1230 1231// NotifyListenerRequest 1232class NotifyListenerRequest : public Request { 1233public: 1234 NotifyListenerRequest() : Request(NOTIFY_LISTENER_REQUEST) {} 1235 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1236 1237 int32 operation; 1238 nspace_id nsid; 1239 vnode_id vnida; 1240 vnode_id vnidb; 1241 vnode_id vnidc; 1242 Address name; 1243}; 1244 1245// NotifyListenerReply 1246class NotifyListenerReply : public ReplyRequest { 1247public: 1248 NotifyListenerReply() : ReplyRequest(NOTIFY_LISTENER_REPLY) {} 1249}; 1250 1251// NotifySelectRequest 1252class NotifySelectEventRequest : public Request { 1253public: 1254 NotifySelectEventRequest() : Request(NOTIFY_SELECT_EVENT_REQUEST) {} 1255 1256 selectsync* sync; 1257 uint32 ref; 1258}; 1259 1260// NotifySelectEventReply 1261class NotifySelectEventReply : public ReplyRequest { 1262public: 1263 NotifySelectEventReply() : ReplyRequest(NOTIFY_SELECT_EVENT_REPLY) {} 1264}; 1265 1266// SendNotificationRequest 1267class SendNotificationRequest : public Request { 1268public: 1269 SendNotificationRequest() : Request(SEND_NOTIFICATION_REQUEST) {} 1270 status_t GetAddressInfos(AddressInfo* infos, int32* count); 1271 1272 port_id port; 1273 int32 token; 1274 uint32 what; 1275 int32 operation; 1276 nspace_id nsida; 1277 nspace_id nsidb; 1278 vnode_id vnida; 1279 vnode_id vnidb; 1280 vnode_id vnidc; 1281 Address name; 1282}; 1283 1284// SendNotificationReply 1285class SendNotificationReply : public ReplyRequest { 1286public: 1287 SendNotificationReply() : ReplyRequest(SEND_NOTIFICATION_REPLY) {} 1288}; 1289 1290 1291// #pragma mark - 1292// #pragma mark ----- vnodes ----- 1293 1294// GetVNodeRequest 1295class GetVNodeRequest : public Request { 1296public: 1297 GetVNodeRequest() : Request(GET_VNODE_REQUEST) {} 1298 1299 nspace_id nsid; 1300 vnode_id vnid; 1301}; 1302 1303// GetVNodeReply 1304class GetVNodeReply : public ReplyRequest { 1305public: 1306 GetVNodeReply() : ReplyRequest(GET_VNODE_REPLY) {} 1307 1308 void* node; 1309}; 1310 1311// PutVNodeRequest 1312class PutVNodeRequest : public Request { 1313public: 1314 PutVNodeRequest() : Request(PUT_VNODE_REQUEST) {} 1315 1316 nspace_id nsid; 1317 vnode_id vnid; 1318}; 1319 1320// PutVNodeReply 1321class PutVNodeReply : public ReplyRequest { 1322public: 1323 PutVNodeReply() : ReplyRequest(PUT_VNODE_REPLY) {} 1324}; 1325 1326// NewVNodeRequest 1327class NewVNodeRequest : public Request { 1328public: 1329 NewVNodeRequest() : Request(NEW_VNODE_REQUEST) {} 1330 1331 nspace_id nsid; 1332 vnode_id vnid; 1333 void* node; 1334}; 1335 1336// NewVNodeReply 1337class NewVNodeReply : public ReplyRequest { 1338public: 1339 NewVNodeReply() : ReplyRequest(NEW_VNODE_REPLY) {} 1340}; 1341 1342// RemoveVNodeRequest 1343class RemoveVNodeRequest : public Request { 1344public: 1345 RemoveVNodeRequest() : Request(REMOVE_VNODE_REQUEST) {} 1346 1347 nspace_id nsid; 1348 vnode_id vnid; 1349}; 1350 1351// RemoveVNodeReply 1352class RemoveVNodeReply : public ReplyRequest { 1353public: 1354 RemoveVNodeReply() : ReplyRequest(REMOVE_VNODE_REPLY) {} 1355}; 1356 1357// UnremoveVNodeRequest 1358class UnremoveVNodeRequest : public Request { 1359public: 1360 UnremoveVNodeRequest() : Request(UNREMOVE_VNODE_REQUEST) {} 1361 1362 nspace_id nsid; 1363 vnode_id vnid; 1364}; 1365 1366// UnremoveVNodeReply 1367class UnremoveVNodeReply : public ReplyRequest { 1368public: 1369 UnremoveVNodeReply() : ReplyRequest(UNREMOVE_VNODE_REPLY) {} 1370}; 1371 1372// IsVNodeRemovedRequest 1373class IsVNodeRemovedRequest : public Request { 1374public: 1375 IsVNodeRemovedRequest() : Request(IS_VNODE_REMOVED_REQUEST) {} 1376 1377 nspace_id nsid; 1378 vnode_id vnid; 1379}; 1380 1381// IsVNodeRemovedReply 1382class IsVNodeRemovedReply : public ReplyRequest { 1383public: 1384 IsVNodeRemovedReply() : ReplyRequest(IS_VNODE_REMOVED_REPLY) {} 1385 1386 int result; 1387}; 1388 1389 1390////////////////// 1391// General Reply 1392 1393// ReceiptAckReply 1394class ReceiptAckReply : public ReplyRequest { 1395public: 1396 ReceiptAckReply() : ReplyRequest(RECEIPT_ACK_REPLY) {} 1397}; 1398 1399 1400/////////////////// 1401// Request Checks 1402 1403// do_for_request 1404template<class Task> 1405static 1406status_t 1407do_for_request(Request* request, Task& task) 1408{ 1409 if (!request) 1410 return B_BAD_VALUE; 1411 switch (request->GetType()) { 1412 // kernel -> userland requests 1413 // administrative 1414 case UFS_DISCONNECT_REQUEST: 1415 return task((UFSDisconnectRequest*)request); 1416 case FS_CONNECT_REQUEST: 1417 return task((FSConnectRequest*)request); 1418 case FS_CONNECT_REPLY: 1419 return task((FSConnectReply*)request); 1420 // FS 1421 case MOUNT_VOLUME_REQUEST: 1422 return task((MountVolumeRequest*)request); 1423 case MOUNT_VOLUME_REPLY: 1424 return task((MountVolumeReply*)request); 1425 case UNMOUNT_VOLUME_REQUEST: 1426 return task((UnmountVolumeRequest*)request); 1427 case UNMOUNT_VOLUME_REPLY: 1428 return task((UnmountVolumeReply*)request); 1429 case INITIALIZE_VOLUME_REQUEST: 1430 return task((InitializeVolumeRequest*)request); 1431 case INITIALIZE_VOLUME_REPLY: 1432 return task((InitializeVolumeReply*)request); 1433 case SYNC_VOLUME_REQUEST: 1434 return task((SyncVolumeRequest*)request); 1435 case SYNC_VOLUME_REPLY: 1436 return task((SyncVolumeReply*)request); 1437 case READ_FS_STAT_REQUEST: 1438 return task((ReadFSStatRequest*)request); 1439 case READ_FS_STAT_REPLY: 1440 return task((ReadFSStatReply*)request); 1441 case WRITE_FS_STAT_REQUEST: 1442 return task((WriteFSStatRequest*)request); 1443 case WRITE_FS_STAT_REPLY: 1444 return task((WriteFSStatReply*)request); 1445 // vnodes 1446 case READ_VNODE_REQUEST: 1447 return task((ReadVNodeRequest*)request); 1448 case READ_VNODE_REPLY: 1449 return task((ReadVNodeReply*)request); 1450 case WRITE_VNODE_REQUEST: 1451 return task((WriteVNodeRequest*)request); 1452 case WRITE_VNODE_REPLY: 1453 return task((WriteVNodeReply*)request); 1454 case FS_REMOVE_VNODE_REQUEST: 1455 return task((FSRemoveVNodeRequest*)request); 1456 case FS_REMOVE_VNODE_REPLY: 1457 return task((FSRemoveVNodeReply*)request); 1458 // nodes 1459 case FSYNC_REQUEST: 1460 return task((FSyncRequest*)request); 1461 case FSYNC_REPLY: 1462 return task((FSyncReply*)request); 1463 case READ_STAT_REQUEST: 1464 return task((ReadStatRequest*)request); 1465 case READ_STAT_REPLY: 1466 return task((ReadStatReply*)request); 1467 case WRITE_STAT_REQUEST: 1468 return task((WriteStatRequest*)request); 1469 case WRITE_STAT_REPLY: 1470 return task((WriteStatReply*)request); 1471 case ACCESS_REQUEST: 1472 return task((AccessRequest*)request); 1473 case ACCESS_REPLY: 1474 return task((AccessReply*)request); 1475 // files 1476 case CREATE_REQUEST: 1477 return task((CreateRequest*)request); 1478 case CREATE_REPLY: 1479 return task((CreateReply*)request); 1480 case OPEN_REQUEST: 1481 return task((OpenRequest*)request); 1482 case OPEN_REPLY: 1483 return task((OpenReply*)request); 1484 case CLOSE_REQUEST: 1485 return task((CloseRequest*)request); 1486 case CLOSE_REPLY: 1487 return task((CloseReply*)request); 1488 case FREE_COOKIE_REQUEST: 1489 return task((FreeCookieRequest*)request); 1490 case FREE_COOKIE_REPLY: 1491 return task((FreeCookieReply*)request); 1492 case READ_REQUEST: 1493 return task((ReadRequest*)request); 1494 case READ_REPLY: 1495 return task((ReadReply*)request); 1496 case WRITE_REQUEST: 1497 return task((WriteRequest*)request); 1498 case WRITE_REPLY: 1499 return task((WriteReply*)request); 1500 case IOCTL_REQUEST: 1501 return task((IOCtlRequest*)request); 1502 case IOCTL_REPLY: 1503 return task((IOCtlReply*)request); 1504 case SET_FLAGS_REQUEST: 1505 return task((SetFlagsRequest*)request); 1506 case SET_FLAGS_REPLY: 1507 return task((SetFlagsReply*)request); 1508 case SELECT_REQUEST: 1509 return task((SelectRequest*)request); 1510 case SELECT_REPLY: 1511 return task((SelectReply*)request); 1512 case DESELECT_REQUEST: 1513 return task((DeselectRequest*)request); 1514 case DESELECT_REPLY: 1515 return task((DeselectReply*)request); 1516 // hard links / symlinks 1517 case LINK_REQUEST: 1518 return task((LinkRequest*)request); 1519 case LINK_REPLY: 1520 return task((LinkReply*)request); 1521 case UNLINK_REQUEST: 1522 return task((UnlinkRequest*)request); 1523 case UNLINK_REPLY: 1524 return task((UnlinkReply*)request); 1525 case SYMLINK_REQUEST: 1526 return task((SymlinkRequest*)request); 1527 case SYMLINK_REPLY: 1528 return task((SymlinkReply*)request); 1529 case READ_LINK_REQUEST: 1530 return task((ReadLinkRequest*)request); 1531 case READ_LINK_REPLY: 1532 return task((ReadLinkReply*)request); 1533 case RENAME_REQUEST: 1534 return task((RenameRequest*)request); 1535 case RENAME_REPLY: 1536 return task((RenameReply*)request); 1537 // directories 1538 case MKDIR_REQUEST: 1539 return task((MkDirRequest*)request); 1540 case MKDIR_REPLY: 1541 return task((MkDirReply*)request); 1542 case RMDIR_REQUEST: 1543 return task((RmDirRequest*)request); 1544 case RMDIR_REPLY: 1545 return task((RmDirReply*)request); 1546 case OPEN_DIR_REQUEST: 1547 return task((OpenDirRequest*)request); 1548 case OPEN_DIR_REPLY: 1549 return task((OpenDirReply*)request); 1550 case CLOSE_DIR_REQUEST: 1551 return task((CloseDirRequest*)request); 1552 case CLOSE_DIR_REPLY: 1553 return task((CloseDirReply*)request); 1554 case FREE_DIR_COOKIE_REQUEST: 1555 return task((FreeDirCookieRequest*)request); 1556 case FREE_DIR_COOKIE_REPLY: 1557 return task((FreeDirCookieReply*)request); 1558 case READ_DIR_REQUEST: 1559 return task((ReadDirRequest*)request); 1560 case READ_DIR_REPLY: 1561 return task((ReadDirReply*)request); 1562 case REWIND_DIR_REQUEST: 1563 return task((RewindDirRequest*)request); 1564 case REWIND_DIR_REPLY: 1565 return task((RewindDirReply*)request); 1566 case WALK_REQUEST: 1567 return task((WalkRequest*)request); 1568 case WALK_REPLY: 1569 return task((WalkReply*)request); 1570 // attributes 1571 case OPEN_ATTR_DIR_REQUEST: 1572 return task((OpenAttrDirRequest*)request); 1573 case OPEN_ATTR_DIR_REPLY: 1574 return task((OpenAttrDirReply*)request); 1575 case CLOSE_ATTR_DIR_REQUEST: 1576 return task((CloseAttrDirRequest*)request); 1577 case CLOSE_ATTR_DIR_REPLY: 1578 return task((CloseAttrDirReply*)request); 1579 case FREE_ATTR_DIR_COOKIE_REQUEST: 1580 return task((FreeAttrDirCookieRequest*)request); 1581 case FREE_ATTR_DIR_COOKIE_REPLY: 1582 return task((FreeAttrDirCookieReply*)request); 1583 case READ_ATTR_DIR_REQUEST: 1584 return task((ReadAttrDirRequest*)request); 1585 case READ_ATTR_DIR_REPLY: 1586 return task((ReadAttrDirReply*)request); 1587 case REWIND_ATTR_DIR_REQUEST: 1588 return task((RewindAttrDirRequest*)request); 1589 case REWIND_ATTR_DIR_REPLY: 1590 return task((RewindAttrDirReply*)request); 1591 case READ_ATTR_REQUEST: 1592 return task((ReadAttrRequest*)request); 1593 case READ_ATTR_REPLY: 1594 return task((ReadAttrReply*)request); 1595 case WRITE_ATTR_REQUEST: 1596 return task((WriteAttrRequest*)request); 1597 case WRITE_ATTR_REPLY: 1598 return task((WriteAttrReply*)request); 1599 case REMOVE_ATTR_REQUEST: 1600 return task((RemoveAttrRequest*)request); 1601 case REMOVE_ATTR_REPLY: 1602 return task((RemoveAttrReply*)request); 1603 case RENAME_ATTR_REQUEST: 1604 return task((RenameAttrRequest*)request); 1605 case RENAME_ATTR_REPLY: 1606 return task((RenameAttrReply*)request); 1607 case STAT_ATTR_REQUEST: 1608 return task((StatAttrRequest*)request); 1609 case STAT_ATTR_REPLY: 1610 return task((StatAttrReply*)request); 1611 // indices 1612 case OPEN_INDEX_DIR_REQUEST: 1613 return task((OpenIndexDirRequest*)request); 1614 case OPEN_INDEX_DIR_REPLY: 1615 return task((OpenIndexDirReply*)request); 1616 case CLOSE_INDEX_DIR_REQUEST: 1617 return task((CloseIndexDirRequest*)request); 1618 case CLOSE_INDEX_DIR_REPLY: 1619 return task((CloseIndexDirReply*)request); 1620 case FREE_INDEX_DIR_COOKIE_REQUEST: 1621 return task((FreeIndexDirCookieRequest*)request); 1622 case FREE_INDEX_DIR_COOKIE_REPLY: 1623 return task((FreeIndexDirCookieReply*)request); 1624 case READ_INDEX_DIR_REQUEST: 1625 return task((ReadIndexDirRequest*)request); 1626 case READ_INDEX_DIR_REPLY: 1627 return task((ReadIndexDirReply*)request); 1628 case REWIND_INDEX_DIR_REQUEST: 1629 return task((RewindIndexDirRequest*)request); 1630 case REWIND_INDEX_DIR_REPLY: 1631 return task((RewindIndexDirReply*)request); 1632 case CREATE_INDEX_REQUEST: 1633 return task((CreateIndexRequest*)request); 1634 case CREATE_INDEX_REPLY: 1635 return task((CreateIndexReply*)request); 1636 case REMOVE_INDEX_REQUEST: 1637 return task((RemoveIndexRequest*)request); 1638 case REMOVE_INDEX_REPLY: 1639 return task((RemoveIndexReply*)request); 1640 case RENAME_INDEX_REQUEST: 1641 return task((RenameIndexRequest*)request); 1642 case RENAME_INDEX_REPLY: 1643 return task((RenameIndexReply*)request); 1644 case STAT_INDEX_REQUEST: 1645 return task((StatIndexRequest*)request); 1646 case STAT_INDEX_REPLY: 1647 return task((StatIndexReply*)request); 1648 // queries 1649 case OPEN_QUERY_REQUEST: 1650 return task((OpenQueryRequest*)request); 1651 case OPEN_QUERY_REPLY: 1652 return task((OpenQueryReply*)request); 1653 case CLOSE_QUERY_REQUEST: 1654 return task((CloseQueryRequest*)request); 1655 case CLOSE_QUERY_REPLY: 1656 return task((CloseQueryReply*)request); 1657 case FREE_QUERY_COOKIE_REQUEST: 1658 return task((FreeQueryCookieRequest*)request); 1659 case FREE_QUERY_COOKIE_REPLY: 1660 return task((FreeQueryCookieReply*)request); 1661 case READ_QUERY_REQUEST: 1662 return task((ReadQueryRequest*)request); 1663 case READ_QUERY_REPLY: 1664 return task((ReadQueryReply*)request); 1665 1666 // userland -> kernel requests 1667 // notifications 1668 case NOTIFY_LISTENER_REQUEST: 1669 return task((NotifyListenerRequest*)request); 1670 case NOTIFY_LISTENER_REPLY: 1671 return task((NotifyListenerReply*)request); 1672 case NOTIFY_SELECT_EVENT_REQUEST: 1673 return task((NotifySelectEventRequest*)request); 1674 case NOTIFY_SELECT_EVENT_REPLY: 1675 return task((NotifySelectEventReply*)request); 1676 case SEND_NOTIFICATION_REQUEST: 1677 return task((SendNotificationRequest*)request); 1678 case SEND_NOTIFICATION_REPLY: 1679 return task((SendNotificationReply*)request); 1680 // vnodes 1681 case GET_VNODE_REQUEST: 1682 return task((GetVNodeRequest*)request); 1683 case GET_VNODE_REPLY: 1684 return task((GetVNodeReply*)request); 1685 case PUT_VNODE_REQUEST: 1686 return task((PutVNodeRequest*)request); 1687 case PUT_VNODE_REPLY: 1688 return task((PutVNodeReply*)request); 1689 case NEW_VNODE_REQUEST: 1690 return task((NewVNodeRequest*)request); 1691 case NEW_VNODE_REPLY: 1692 return task((NewVNodeReply*)request); 1693 case REMOVE_VNODE_REQUEST: 1694 return task((RemoveVNodeRequest*)request); 1695 case REMOVE_VNODE_REPLY: 1696 return task((RemoveVNodeReply*)request); 1697 case UNREMOVE_VNODE_REQUEST: 1698 return task((UnremoveVNodeRequest*)request); 1699 case UNREMOVE_VNODE_REPLY: 1700 return task((UnremoveVNodeReply*)request); 1701 case IS_VNODE_REMOVED_REQUEST: 1702 return task((IsVNodeRemovedRequest*)request); 1703 case IS_VNODE_REMOVED_REPLY: 1704 return task((IsVNodeRemovedReply*)request); 1705 // general reply 1706 case RECEIPT_ACK_REPLY: 1707 return task((ReceiptAckReply*)request); 1708 default: 1709 return B_BAD_DATA; 1710 } 1711 return task(request); 1712} 1713 1714status_t get_request_address_infos(Request* request, AddressInfo* infos, 1715 int32* count); 1716status_t check_request(Request* request); 1717status_t relocate_request(Request* request, int32 requestBufferSize, 1718 area_id* areas, int32* count); 1719 1720} // namespace UserlandFSUtil 1721 1722using UserlandFSUtil::ReplyRequest; 1723using UserlandFSUtil::VolumeRequest; 1724using UserlandFSUtil::NodeRequest; 1725using UserlandFSUtil::FileRequest; 1726using UserlandFSUtil::DirRequest; 1727using UserlandFSUtil::AttrDirRequest; 1728using UserlandFSUtil::IndexDirRequest; 1729 1730// kernel -> userland requests 1731// administrative 1732using UserlandFSUtil::UFSDisconnectRequest; 1733using UserlandFSUtil::FSConnectRequest; 1734using UserlandFSUtil::FSConnectReply; 1735// FS 1736using UserlandFSUtil::MountVolumeRequest; 1737using UserlandFSUtil::MountVolumeReply; 1738using UserlandFSUtil::UnmountVolumeRequest; 1739using UserlandFSUtil::UnmountVolumeReply; 1740using UserlandFSUtil::InitializeVolumeRequest; 1741using UserlandFSUtil::InitializeVolumeReply; 1742using UserlandFSUtil::SyncVolumeRequest; 1743using UserlandFSUtil::SyncVolumeReply; 1744using UserlandFSUtil::ReadFSStatRequest; 1745using UserlandFSUtil::ReadFSStatReply; 1746using UserlandFSUtil::WriteFSStatRequest; 1747using UserlandFSUtil::WriteFSStatReply; 1748// vnodes 1749using UserlandFSUtil::ReadVNodeRequest; 1750using UserlandFSUtil::ReadVNodeReply; 1751using UserlandFSUtil::WriteVNodeRequest; 1752using UserlandFSUtil::WriteVNodeReply; 1753using UserlandFSUtil::FSRemoveVNodeRequest; 1754using UserlandFSUtil::FSRemoveVNodeReply; 1755// nodes 1756using UserlandFSUtil::FSyncRequest; 1757using UserlandFSUtil::FSyncReply; 1758using UserlandFSUtil::ReadStatRequest; 1759using UserlandFSUtil::ReadStatReply; 1760using UserlandFSUtil::WriteStatRequest; 1761using UserlandFSUtil::WriteStatReply; 1762using UserlandFSUtil::AccessRequest; 1763using UserlandFSUtil::AccessReply; 1764// files 1765using UserlandFSUtil::CreateRequest; 1766using UserlandFSUtil::CreateReply; 1767using UserlandFSUtil::OpenRequest; 1768using UserlandFSUtil::OpenReply; 1769using UserlandFSUtil::CloseRequest; 1770using UserlandFSUtil::CloseReply; 1771using UserlandFSUtil::FreeCookieRequest; 1772using UserlandFSUtil::FreeCookieReply; 1773using UserlandFSUtil::ReadRequest; 1774using UserlandFSUtil::ReadReply; 1775using UserlandFSUtil::WriteRequest; 1776using UserlandFSUtil::WriteReply; 1777using UserlandFSUtil::IOCtlRequest; 1778using UserlandFSUtil::IOCtlReply; 1779using UserlandFSUtil::SetFlagsRequest; 1780using UserlandFSUtil::SetFlagsReply; 1781using UserlandFSUtil::SelectRequest; 1782using UserlandFSUtil::SelectReply; 1783using UserlandFSUtil::DeselectRequest; 1784using UserlandFSUtil::DeselectReply; 1785// hard links / symlinks 1786using UserlandFSUtil::LinkRequest; 1787using UserlandFSUtil::LinkReply; 1788using UserlandFSUtil::UnlinkRequest; 1789using UserlandFSUtil::UnlinkReply; 1790using UserlandFSUtil::SymlinkRequest; 1791using UserlandFSUtil::SymlinkReply; 1792using UserlandFSUtil::ReadLinkRequest; 1793using UserlandFSUtil::ReadLinkReply; 1794using UserlandFSUtil::RenameRequest; 1795using UserlandFSUtil::RenameReply; 1796// directories 1797using UserlandFSUtil::MkDirRequest; 1798using UserlandFSUtil::MkDirReply; 1799using UserlandFSUtil::RmDirRequest; 1800using UserlandFSUtil::RmDirReply; 1801using UserlandFSUtil::OpenDirRequest; 1802using UserlandFSUtil::OpenDirReply; 1803using UserlandFSUtil::CloseDirRequest; 1804using UserlandFSUtil::CloseDirReply; 1805using UserlandFSUtil::FreeDirCookieRequest; 1806using UserlandFSUtil::FreeDirCookieReply; 1807using UserlandFSUtil::ReadDirRequest; 1808using UserlandFSUtil::ReadDirReply; 1809using UserlandFSUtil::RewindDirRequest; 1810using UserlandFSUtil::RewindDirReply; 1811using UserlandFSUtil::WalkRequest; 1812using UserlandFSUtil::WalkReply; 1813// attributes 1814using UserlandFSUtil::OpenAttrDirRequest; 1815using UserlandFSUtil::OpenAttrDirReply; 1816using UserlandFSUtil::CloseAttrDirRequest; 1817using UserlandFSUtil::CloseAttrDirReply; 1818using UserlandFSUtil::FreeAttrDirCookieRequest; 1819using UserlandFSUtil::FreeAttrDirCookieReply; 1820using UserlandFSUtil::ReadAttrDirRequest; 1821using UserlandFSUtil::ReadAttrDirReply; 1822using UserlandFSUtil::RewindAttrDirRequest; 1823using UserlandFSUtil::RewindAttrDirReply; 1824using UserlandFSUtil::ReadAttrRequest; 1825using UserlandFSUtil::ReadAttrReply; 1826using UserlandFSUtil::WriteAttrRequest; 1827using UserlandFSUtil::WriteAttrReply; 1828using UserlandFSUtil::RemoveAttrRequest; 1829using UserlandFSUtil::RemoveAttrReply; 1830using UserlandFSUtil::RenameAttrRequest; 1831using UserlandFSUtil::RenameAttrReply; 1832using UserlandFSUtil::StatAttrRequest; 1833using UserlandFSUtil::StatAttrReply; 1834// indices 1835using UserlandFSUtil::OpenIndexDirRequest; 1836using UserlandFSUtil::OpenIndexDirReply; 1837using UserlandFSUtil::CloseIndexDirRequest; 1838using UserlandFSUtil::CloseIndexDirReply; 1839using UserlandFSUtil::FreeIndexDirCookieRequest; 1840using UserlandFSUtil::FreeIndexDirCookieReply; 1841using UserlandFSUtil::ReadIndexDirRequest; 1842using UserlandFSUtil::ReadIndexDirReply; 1843using UserlandFSUtil::RewindIndexDirRequest; 1844using UserlandFSUtil::RewindIndexDirReply; 1845using UserlandFSUtil::CreateIndexRequest; 1846using UserlandFSUtil::CreateIndexReply; 1847using UserlandFSUtil::RemoveIndexRequest; 1848using UserlandFSUtil::RemoveIndexReply; 1849using UserlandFSUtil::RenameIndexRequest; 1850using UserlandFSUtil::RenameIndexReply; 1851using UserlandFSUtil::StatIndexRequest; 1852using UserlandFSUtil::StatIndexReply; 1853// queries 1854using UserlandFSUtil::OpenQueryRequest; 1855using UserlandFSUtil::OpenQueryReply; 1856using UserlandFSUtil::CloseQueryRequest; 1857using UserlandFSUtil::CloseQueryReply; 1858using UserlandFSUtil::FreeQueryCookieRequest; 1859using UserlandFSUtil::FreeQueryCookieReply; 1860using UserlandFSUtil::ReadQueryRequest; 1861using UserlandFSUtil::ReadQueryReply; 1862 1863// userland -> kernel requests 1864// notifications 1865using UserlandFSUtil::NotifyListenerRequest; 1866using UserlandFSUtil::NotifyListenerReply; 1867using UserlandFSUtil::NotifySelectEventRequest; 1868using UserlandFSUtil::NotifySelectEventReply; 1869using UserlandFSUtil::SendNotificationRequest; 1870using UserlandFSUtil::SendNotificationReply; 1871// vnodes 1872using UserlandFSUtil::GetVNodeRequest; 1873using UserlandFSUtil::GetVNodeReply; 1874using UserlandFSUtil::PutVNodeRequest; 1875using UserlandFSUtil::PutVNodeReply; 1876using UserlandFSUtil::NewVNodeRequest; 1877using UserlandFSUtil::NewVNodeReply; 1878using UserlandFSUtil::RemoveVNodeRequest; 1879using UserlandFSUtil::RemoveVNodeReply; 1880using UserlandFSUtil::UnremoveVNodeRequest; 1881using UserlandFSUtil::UnremoveVNodeReply; 1882using UserlandFSUtil::IsVNodeRemovedRequest; 1883using UserlandFSUtil::IsVNodeRemovedReply; 1884// general reply 1885using UserlandFSUtil::ReceiptAckReply; 1886 1887using UserlandFSUtil::do_for_request; 1888using UserlandFSUtil::get_request_address_infos; 1889using UserlandFSUtil::check_request; 1890using UserlandFSUtil::relocate_request; 1891 1892#endif // USERLAND_FS_REQUESTS_H 1893