1168457Skato/*
264123Skato * Copyright 2001-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
364123Skato * Distributed under the terms of the MIT License.
464123Skato */
564123Skato#ifndef USERLAND_FS_REQUESTS_H
664123Skato#define USERLAND_FS_REQUESTS_H
764123Skato
864123Skato#include <fs_attr.h>
964123Skato#include <fs_index.h>
1064123Skato#include <fs_info.h>
1164123Skato#include <fs_interface.h>
1264123Skato
1364123Skato#include "Compatibility.h"
1464123Skato#include "FSCapabilities.h"
1564123Skato#include "Request.h"
1664123Skato
1764123Skato
1864123Skatoenum {
1964123Skato	MAX_REQUEST_ADDRESS_COUNT	= 4,
2064123Skato};
2164123Skato
2264123Skato// request types
2364123Skatoenum {
2464123Skato	// kernel -> userland requests
2564123Skato
2664123Skato	// administrative
2764123Skato	UFS_DISCONNECT_REQUEST = 0,
2864123Skato	FS_CONNECT_REQUEST,
2964123Skato	FS_CONNECT_REPLY,
3064123Skato
3164123Skato	// FS
3264123Skato	MOUNT_VOLUME_REQUEST,
3364123Skato	MOUNT_VOLUME_REPLY,
3464123Skato	UNMOUNT_VOLUME_REQUEST,
3564123Skato	UNMOUNT_VOLUME_REPLY,
3664123Skato//	INITIALIZE_VOLUME_REQUEST,
3764123Skato//	INITIALIZE_VOLUME_REPLY,
3864123Skato	SYNC_VOLUME_REQUEST,
3964123Skato	SYNC_VOLUME_REPLY,
4064123Skato	READ_FS_INFO_REQUEST,
4164123Skato	READ_FS_INFO_REPLY, // 10
4264123Skato	WRITE_FS_INFO_REQUEST,
4364123Skato	WRITE_FS_INFO_REPLY,
4464123Skato
4564123Skato	// vnodes
4664123Skato	LOOKUP_REQUEST,
4764123Skato	LOOKUP_REPLY,
4864123Skato	GET_VNODE_NAME_REQUEST,
4964123Skato	GET_VNODE_NAME_REPLY,
5064123Skato	READ_VNODE_REQUEST,
5164123Skato	READ_VNODE_REPLY,
5264123Skato	WRITE_VNODE_REQUEST,
5364123Skato	WRITE_VNODE_REPLY, // 20
5464123Skato	FS_REMOVE_VNODE_REQUEST,
5564123Skato	FS_REMOVE_VNODE_REPLY,
5664123Skato
5764123Skato	// asynchronous I/O
5864123Skato	DO_IO_REQUEST,
5964123Skato	DO_IO_REPLY,
6064123Skato	CANCEL_IO_REQUEST,
6164123Skato	CANCEL_IO_REPLY,
6264123Skato	ITERATIVE_IO_GET_VECS_REQUEST,
63167657Skato	ITERATIVE_IO_GET_VECS_REPLY,
6464123Skato	ITERATIVE_IO_FINISHED_REQUEST,
6564123Skato	ITERATIVE_IO_FINISHED_REPLY, // 30
6664123Skato
6764123Skato	// nodes
6864123Skato	IOCTL_REQUEST,
6964123Skato	IOCTL_REPLY,
7064123Skato	SET_FLAGS_REQUEST,
7164123Skato	SET_FLAGS_REPLY,
7264123Skato	SELECT_REQUEST,
7364123Skato	SELECT_REPLY,
7464123Skato	DESELECT_REQUEST,
7564123Skato	DESELECT_REPLY,
7664123Skato	FSYNC_REQUEST,
7764123Skato	FSYNC_REPLY, // 40
7864123Skato
7964123Skato	READ_SYMLINK_REQUEST,
8064123Skato	READ_SYMLINK_REPLY,
8164123Skato	CREATE_SYMLINK_REQUEST,
8264123Skato	CREATE_SYMLINK_REPLY,
8364123Skato	LINK_REQUEST,
8464123Skato	LINK_REPLY,
8564123Skato	UNLINK_REQUEST,
8664123Skato	UNLINK_REPLY,
8764123Skato	RENAME_REQUEST,
8864123Skato	RENAME_REPLY, // 50
8964123Skato
9064123Skato	ACCESS_REQUEST,
9164123Skato	ACCESS_REPLY,
9264123Skato	READ_STAT_REQUEST,
9364123Skato	READ_STAT_REPLY,
9464123Skato	WRITE_STAT_REQUEST,
9564123Skato	WRITE_STAT_REPLY,
9664123Skato
9764123Skato	// files
9864123Skato	CREATE_REQUEST,
9964123Skato	CREATE_REPLY,
10064123Skato	OPEN_REQUEST,
10164123Skato	OPEN_REPLY, // 60
10264123Skato	CLOSE_REQUEST,
10364123Skato	CLOSE_REPLY,
10464123Skato	FREE_COOKIE_REQUEST,
10564123Skato	FREE_COOKIE_REPLY,
10664123Skato	READ_REQUEST,
10764123Skato	READ_REPLY,
10864123Skato	WRITE_REQUEST,
10964123Skato	WRITE_REPLY,
11064123Skato
11164123Skato	// directories
11264123Skato	CREATE_DIR_REQUEST,
11364123Skato	CREATE_DIR_REPLY, // 70
11464123Skato	REMOVE_DIR_REQUEST,
11564123Skato	REMOVE_DIR_REPLY,
11664123Skato	OPEN_DIR_REQUEST,
11764123Skato	OPEN_DIR_REPLY,
11864123Skato	CLOSE_DIR_REQUEST,
11964123Skato	CLOSE_DIR_REPLY,
12064123Skato	FREE_DIR_COOKIE_REQUEST,
12164123Skato	FREE_DIR_COOKIE_REPLY,
12264123Skato	READ_DIR_REQUEST,
12364123Skato	READ_DIR_REPLY, // 80
12464123Skato	REWIND_DIR_REQUEST,
12564123Skato	REWIND_DIR_REPLY,
12664123Skato
12764123Skato	// attribute directories
12864295Skato	OPEN_ATTR_DIR_REQUEST,
12964123Skato	OPEN_ATTR_DIR_REPLY,
13064123Skato	CLOSE_ATTR_DIR_REQUEST,
13164123Skato	CLOSE_ATTR_DIR_REPLY,
13264123Skato	FREE_ATTR_DIR_COOKIE_REQUEST,
13364123Skato	FREE_ATTR_DIR_COOKIE_REPLY,
13464123Skato	READ_ATTR_DIR_REQUEST,
13564123Skato	READ_ATTR_DIR_REPLY, // 90
13664123Skato	REWIND_ATTR_DIR_REQUEST,
13764123Skato	REWIND_ATTR_DIR_REPLY,
13864123Skato
13964123Skato	// attributes
14064123Skato	CREATE_ATTR_REQUEST,
14164123Skato	CREATE_ATTR_REPLY,
14264123Skato	OPEN_ATTR_REQUEST,
14364123Skato	OPEN_ATTR_REPLY,
14464123Skato	CLOSE_ATTR_REQUEST,
14564123Skato	CLOSE_ATTR_REPLY,
14664123Skato	FREE_ATTR_COOKIE_REQUEST,
14764123Skato	FREE_ATTR_COOKIE_REPLY, // 100
14864123Skato	READ_ATTR_REQUEST,
14964123Skato	READ_ATTR_REPLY,
15064123Skato	WRITE_ATTR_REQUEST,
15164123Skato	WRITE_ATTR_REPLY,
15264123Skato	READ_ATTR_STAT_REQUEST,
15364123Skato	READ_ATTR_STAT_REPLY,
15464123Skato	WRITE_ATTR_STAT_REQUEST,
15564123Skato	WRITE_ATTR_STAT_REPLY,
15664123Skato	RENAME_ATTR_REQUEST,
15764123Skato	RENAME_ATTR_REPLY, // 110
15864123Skato	REMOVE_ATTR_REQUEST,
15964123Skato	REMOVE_ATTR_REPLY,
16064123Skato
16164123Skato	// indices
16264123Skato	OPEN_INDEX_DIR_REQUEST,
16364123Skato	OPEN_INDEX_DIR_REPLY,
16464123Skato	CLOSE_INDEX_DIR_REQUEST,
16564123Skato	CLOSE_INDEX_DIR_REPLY,
16664123Skato	FREE_INDEX_DIR_COOKIE_REQUEST,
16764123Skato	FREE_INDEX_DIR_COOKIE_REPLY,
16864123Skato	READ_INDEX_DIR_REQUEST,
16964123Skato	READ_INDEX_DIR_REPLY, // 120
17064123Skato	REWIND_INDEX_DIR_REQUEST,
17164123Skato	REWIND_INDEX_DIR_REPLY,
17264123Skato	CREATE_INDEX_REQUEST,
17364123Skato	CREATE_INDEX_REPLY,
17464123Skato	REMOVE_INDEX_REQUEST,
17564123Skato	REMOVE_INDEX_REPLY,
17664123Skato	READ_INDEX_STAT_REQUEST,
17764123Skato	READ_INDEX_STAT_REPLY,
17864123Skato
17964123Skato	// queries
18064123Skato	OPEN_QUERY_REQUEST,
18164123Skato	OPEN_QUERY_REPLY, // 130
18264123Skato	CLOSE_QUERY_REQUEST,
18364123Skato	CLOSE_QUERY_REPLY,
18464123Skato	FREE_QUERY_COOKIE_REQUEST,
18564123Skato	FREE_QUERY_COOKIE_REPLY,
18664123Skato	READ_QUERY_REQUEST,
18764123Skato	READ_QUERY_REPLY,
18864123Skato	REWIND_QUERY_REQUEST,
18964123Skato	REWIND_QUERY_REPLY,
19064123Skato
19164123Skato	// node monitoring
19264123Skato	NODE_MONITORING_EVENT_REQUEST,
19364123Skato	NODE_MONITORING_EVENT_REPLY, // 140
19464123Skato
19564123Skato	// userland -> kernel requests
19664123Skato	// notifications
19764123Skato	NOTIFY_LISTENER_REQUEST,
19864123Skato	NOTIFY_LISTENER_REPLY,
19964123Skato	NOTIFY_SELECT_EVENT_REQUEST,
20064123Skato	NOTIFY_SELECT_EVENT_REPLY,
20164123Skato	NOTIFY_QUERY_REQUEST,
20264123Skato	NOTIFY_QUERY_REPLY,
20364123Skato
20464123Skato	// vnodes
20564123Skato	GET_VNODE_REQUEST,
20664123Skato	GET_VNODE_REPLY,
20764123Skato	PUT_VNODE_REQUEST,
20864123Skato	PUT_VNODE_REPLY, // 150
20964123Skato	ACQUIRE_VNODE_REQUEST,
21064123Skato	ACQUIRE_VNODE_REPLY,
21164123Skato	NEW_VNODE_REQUEST,
21264123Skato	NEW_VNODE_REPLY,
21364123Skato	PUBLISH_VNODE_REQUEST,
21464123Skato	PUBLISH_VNODE_REPLY,
21564123Skato	REMOVE_VNODE_REQUEST,
21664123Skato	REMOVE_VNODE_REPLY,
21764123Skato	UNREMOVE_VNODE_REQUEST,
21864123Skato	UNREMOVE_VNODE_REPLY, // 160
21964123Skato	GET_VNODE_REMOVED_REQUEST,
22064123Skato	GET_VNODE_REMOVED_REPLY,
22164123Skato
22264123Skato	// file cache
22364123Skato	FILE_CACHE_CREATE_REQUEST,
22464123Skato	FILE_CACHE_CREATE_REPLY,
22564123Skato	FILE_CACHE_DELETE_REQUEST,
22664123Skato	FILE_CACHE_DELETE_REPLY,
22764123Skato	FILE_CACHE_SET_ENABLED_REQUEST,
22864123Skato	FILE_CACHE_SET_ENABLED_REPLY,
22964123Skato	FILE_CACHE_SET_SIZE_REQUEST,
23064123Skato	FILE_CACHE_SET_SIZE_REPLY, // 170
23164123Skato	FILE_CACHE_SYNC_REQUEST,
23264123Skato	FILE_CACHE_SYNC_REPLY,
23364123Skato	FILE_CACHE_READ_REQUEST,
23464123Skato	FILE_CACHE_READ_REPLY,
23564123Skato	FILE_CACHE_WRITE_REQUEST,
23664123Skato	FILE_CACHE_WRITE_REPLY,
23764123Skato
23864123Skato	// I/O
23964123Skato	DO_ITERATIVE_FD_IO_REQUEST,
24064123Skato	DO_ITERATIVE_FD_IO_REPLY,
24164123Skato	READ_FROM_IO_REQUEST_REQUEST,
24264123Skato	READ_FROM_IO_REQUEST_REPLY, // 180
24364123Skato	WRITE_TO_IO_REQUEST_REQUEST,
24464123Skato	WRITE_TO_IO_REQUEST_REPLY,
24564123Skato	NOTIFY_IO_REQUEST_REQUEST,
24664123Skato	NOTIFY_IO_REQUEST_REPLY,
24764123Skato
24864123Skato	// node monitoring
24964123Skato	ADD_NODE_LISTENER_REQUEST,
25064123Skato	ADD_NODE_LISTENER_REPLY,
25164123Skato	REMOVE_NODE_LISTENER_REQUEST,
25264123Skato	REMOVE_NODE_LISTENER_REPLY,
25364123Skato
25464123Skato	// general reply
25564123Skato	RECEIPT_ACK_REPLY,
25664123Skato
257167657Skato	// invalid request ID (e.g. for request handlers)
25864123Skato	NO_REQUEST, // 190
25964123Skato};
26064123Skato
26164123Skatonamespace UserlandFSUtil {
26264123Skato
26364123Skato// ReplyRequest
264168457Skatoclass ReplyRequest : public Request {
265168457Skatopublic:
26664123Skato	ReplyRequest(uint32 type) : Request(type) {}
26764123Skato
26864123Skato	status_t	error;
26964123Skato};
27064123Skato
27164123Skato
27264123Skato// #pragma mark - kernel requests
27364123Skato
27464123Skato
27564123Skato// KernelRequest
27664123Skatoclass KernelRequest : public Request {
27764123Skatopublic:
27864123Skato	KernelRequest(uint32 type) : Request(type) {}
27964123Skato
28064123Skato	team_id		team;
28164123Skato	thread_id	thread;
28264123Skato	uid_t		user;
28364123Skato	gid_t		group;
284167657Skato};
285167657Skato
286167657Skato// VolumeRequest
287167657Skatoclass VolumeRequest : public KernelRequest {
288167657Skatopublic:
289167657Skato	VolumeRequest(uint32 type) : KernelRequest(type) {}
290167657Skato
291167657Skato	void*		volume;
292167657Skato};
293167657Skato
294// NodeRequest
295class NodeRequest : public VolumeRequest {
296public:
297	NodeRequest(uint32 type) : VolumeRequest(type) {}
298
299	void*		node;
300};
301
302// FileRequest
303class FileRequest : public NodeRequest {
304public:
305	FileRequest(uint32 type) : NodeRequest(type) {}
306
307	void*		fileCookie;
308};
309
310// DirRequest
311class DirRequest : public NodeRequest {
312public:
313	DirRequest(uint32 type) : NodeRequest(type) {}
314
315	void*		dirCookie;
316};
317
318// AttrDirRequest
319class AttrDirRequest : public NodeRequest {
320public:
321	AttrDirRequest(uint32 type) : NodeRequest(type) {}
322
323	void*		attrDirCookie;
324};
325
326// AttributeRequest
327class AttributeRequest : public NodeRequest {
328public:
329	AttributeRequest(uint32 type) : NodeRequest(type) {}
330
331	void*		attrCookie;
332};
333
334// IndexDirRequest
335class IndexDirRequest : public VolumeRequest {
336public:
337	IndexDirRequest(uint32 type) : VolumeRequest(type) {}
338
339	void*		indexDirCookie;
340};
341
342// QueryRequest
343class QueryRequest : public VolumeRequest {
344public:
345	QueryRequest(uint32 type) : VolumeRequest(type) {}
346
347	void*		queryCookie;
348};
349
350// FileCacheRequest
351class FileCacheRequest : public Request {
352public:
353	FileCacheRequest(uint32 type) : Request(type) {}
354
355	dev_t		nsid;
356	ino_t		vnid;
357};
358
359class IORequestRequest : public Request {
360public:
361	IORequestRequest(uint32 type) : Request(type) {}
362
363	dev_t		nsid;
364	int32		request;
365};
366
367
368// #pragma mark - administrative
369
370
371// UFSDisconnectRequest
372class UFSDisconnectRequest : public Request {
373public:
374	UFSDisconnectRequest() : Request(UFS_DISCONNECT_REQUEST) {}
375};
376
377// FSConnectRequest
378class FSConnectRequest : public Request {
379public:
380	FSConnectRequest() : Request(FS_CONNECT_REQUEST) {}
381	status_t GetAddressInfos(AddressInfo* infos, int32* count);
382
383	Address		fsName;
384};
385
386// FSConnectReply
387class FSConnectReply : public ReplyRequest {
388public:
389	FSConnectReply() : ReplyRequest(FS_CONNECT_REPLY) {}
390	status_t GetAddressInfos(AddressInfo* infos, int32* count);
391
392	Address			portInfos;
393	int32			portInfoCount;
394	FSCapabilities	capabilities;
395	client_fs_type	clientFSType;
396};
397
398
399// #pragma mark - FS
400
401
402// MountVolumeRequest
403class MountVolumeRequest : public KernelRequest {
404public:
405	MountVolumeRequest() : KernelRequest(MOUNT_VOLUME_REQUEST) {}
406	status_t GetAddressInfos(AddressInfo* infos, int32* count);
407
408	dev_t		nsid;
409	Address		cwd;			// current working dir of the mount() caller
410	Address		device;
411	uint32		flags;
412	Address		parameters;
413};
414
415// MountVolumeReply
416class MountVolumeReply : public ReplyRequest {
417public:
418	MountVolumeReply() : ReplyRequest(MOUNT_VOLUME_REPLY) {}
419
420	ino_t					rootID;
421	void*					volume;
422	FSVolumeCapabilities	capabilities;
423};
424
425// UnmountVolumeRequest
426class UnmountVolumeRequest : public VolumeRequest {
427public:
428	UnmountVolumeRequest() : VolumeRequest(UNMOUNT_VOLUME_REQUEST) {}
429};
430
431// UnmountVolumeReply
432class UnmountVolumeReply : public ReplyRequest {
433public:
434	UnmountVolumeReply() : ReplyRequest(UNMOUNT_VOLUME_REPLY) {}
435};
436
437/*// InitializeVolumeRequest
438class InitializeVolumeRequest : public Request {
439public:
440	InitializeVolumeRequest() : Request(INITIALIZE_VOLUME_REQUEST) {}
441	status_t GetAddressInfos(AddressInfo* infos, int32* count);
442
443	Address		device;
444	Address		parameters;
445};
446
447// InitializeVolumeReply
448class InitializeVolumeReply : public ReplyRequest {
449public:
450	InitializeVolumeReply() : ReplyRequest(INITIALIZE_VOLUME_REPLY) {}
451};*/
452
453// SyncVolumeRequest
454class SyncVolumeRequest : public VolumeRequest {
455public:
456	SyncVolumeRequest() : VolumeRequest(SYNC_VOLUME_REQUEST) {}
457};
458
459// SyncVolumeReply
460class SyncVolumeReply : public ReplyRequest {
461public:
462	SyncVolumeReply() : ReplyRequest(SYNC_VOLUME_REPLY) {}
463};
464
465// ReadFSInfoRequest
466class ReadFSInfoRequest : public VolumeRequest {
467public:
468	ReadFSInfoRequest() : VolumeRequest(READ_FS_INFO_REQUEST) {}
469};
470
471// ReadFSInfoReply
472class ReadFSInfoReply : public ReplyRequest {
473public:
474	ReadFSInfoReply() : ReplyRequest(READ_FS_INFO_REPLY) {}
475
476	fs_info		info;
477};
478
479// WriteFSInfoRequest
480class WriteFSInfoRequest : public VolumeRequest {
481public:
482	WriteFSInfoRequest() : VolumeRequest(WRITE_FS_INFO_REQUEST) {}
483
484	fs_info		info;
485	uint32		mask;
486};
487
488// WriteFSInfoReply
489class WriteFSInfoReply : public ReplyRequest {
490public:
491	WriteFSInfoReply() : ReplyRequest(WRITE_FS_INFO_REPLY) {}
492};
493
494
495// #pragma mark - vnodes
496
497
498// LookupRequest
499class LookupRequest : public NodeRequest {
500public:
501	LookupRequest() : NodeRequest(LOOKUP_REQUEST) {}
502	status_t GetAddressInfos(AddressInfo* infos, int32* count);
503
504	Address		entryName;
505	bool		traverseLink;
506};
507
508// LookupReply
509class LookupReply : public ReplyRequest {
510public:
511	LookupReply() : ReplyRequest(LOOKUP_REPLY) {}
512
513	ino_t		vnid;
514};
515
516// GetVNodeNameRequest
517class GetVNodeNameRequest : public NodeRequest {
518public:
519	GetVNodeNameRequest() : NodeRequest(GET_VNODE_NAME_REQUEST) {}
520
521	size_t		size;
522};
523
524// GetVNodeNameReply
525class GetVNodeNameReply : public ReplyRequest {
526public:
527	GetVNodeNameReply() : ReplyRequest(GET_VNODE_NAME_REPLY) {}
528	status_t GetAddressInfos(AddressInfo* infos, int32* count);
529
530	Address		buffer;
531};
532
533// ReadVNodeRequest
534class ReadVNodeRequest : public VolumeRequest {
535public:
536	ReadVNodeRequest() : VolumeRequest(READ_VNODE_REQUEST) {}
537
538	ino_t		vnid;
539	bool		reenter;
540};
541
542// ReadVNodeReply
543class ReadVNodeReply : public ReplyRequest {
544public:
545	ReadVNodeReply() : ReplyRequest(READ_VNODE_REPLY) {}
546
547	void*				node;
548	int					type;
549	uint32				flags;
550	FSVNodeCapabilities	capabilities;
551};
552
553// WriteVNodeRequest
554class WriteVNodeRequest : public NodeRequest {
555public:
556	WriteVNodeRequest() : NodeRequest(WRITE_VNODE_REQUEST) {}
557
558	bool		reenter;
559};
560
561// WriteVNodeReply
562class WriteVNodeReply : public ReplyRequest {
563public:
564	WriteVNodeReply() : ReplyRequest(WRITE_VNODE_REPLY) {}
565};
566
567// FSRemoveVNodeRequest
568class FSRemoveVNodeRequest : public NodeRequest {
569public:
570	FSRemoveVNodeRequest() : NodeRequest(FS_REMOVE_VNODE_REQUEST) {}
571
572	bool		reenter;
573};
574
575// FSRemoveVNodeReply
576class FSRemoveVNodeReply : public ReplyRequest {
577public:
578	FSRemoveVNodeReply() : ReplyRequest(FS_REMOVE_VNODE_REPLY) {}
579};
580
581
582// #pragma mark - asynchronous I/O
583
584
585// DoIORequest
586class DoIORequest : public FileRequest {
587public:
588	DoIORequest() : FileRequest(DO_IO_REQUEST) {}
589
590	off_t		offset;
591	size_t		length;
592	int32		request;
593	bool		isWrite;
594	bool		isVIP;
595};
596
597// DoIOReply
598class DoIOReply : public ReplyRequest {
599public:
600	DoIOReply() : ReplyRequest(DO_IO_REPLY) {}
601};
602
603// CancelIORequest
604class CancelIORequest : public FileRequest {
605public:
606	CancelIORequest() : FileRequest(CANCEL_IO_REQUEST) {}
607
608	int32		request;
609};
610
611// CancelIOReply
612class CancelIOReply : public ReplyRequest {
613public:
614	CancelIOReply() : ReplyRequest(CANCEL_IO_REPLY) {}
615};
616
617// IterativeIOGetVecsRequest
618class IterativeIOGetVecsRequest : public VolumeRequest {
619public:
620	IterativeIOGetVecsRequest()
621		: VolumeRequest(ITERATIVE_IO_GET_VECS_REQUEST) {}
622
623	void*		cookie;
624	off_t		offset;
625	int32		request;
626	size_t		size;
627	uint32		vecCount;
628};
629
630// IterativeIOGetVecsReply
631class IterativeIOGetVecsReply : public ReplyRequest {
632public:
633	IterativeIOGetVecsReply() : ReplyRequest(ITERATIVE_IO_GET_VECS_REPLY) {}
634
635	enum { MAX_VECS = 8 };
636
637	file_io_vec	vecs[MAX_VECS];
638	uint32		vecCount;
639};
640
641// IterativeIOFinishedRequest
642class IterativeIOFinishedRequest : public VolumeRequest {
643public:
644	IterativeIOFinishedRequest()
645		: VolumeRequest(ITERATIVE_IO_FINISHED_REQUEST) {}
646
647	void*		cookie;
648	int32		request;
649	status_t	status;
650	bool		partialTransfer;
651	size_t		bytesTransferred;
652};
653
654// IterativeIOFinishedReply
655class IterativeIOFinishedReply : public ReplyRequest {
656public:
657	IterativeIOFinishedReply() : ReplyRequest(ITERATIVE_IO_FINISHED_REPLY) {}
658};
659
660
661// #pragma mark - nodes
662
663
664// IOCtlRequest
665class IOCtlRequest : public FileRequest {
666public:
667	IOCtlRequest() : FileRequest(IOCTL_REQUEST) {}
668	status_t GetAddressInfos(AddressInfo* infos, int32* count);
669
670	uint32		command;
671	void*		bufferParameter;
672	size_t		lenParameter;
673	bool		isBuffer;	// if false, just pass bufferParameter
674							// otherwise use buffer
675	Address		buffer;
676	int32		writeSize;	// ignored unless isBuffer -- then
677							// it indicates the size of the buffer to allocate
678};
679
680// IOCtlReply
681class IOCtlReply : public ReplyRequest {
682public:
683	IOCtlReply() : ReplyRequest(IOCTL_REPLY) {}
684	status_t GetAddressInfos(AddressInfo* infos, int32* count);
685
686	status_t	ioctlError;		// we need a special handling since error
687								// may be a part of the client FS protocol
688	Address		buffer;
689};
690
691// SetFlagsRequest
692class SetFlagsRequest : public FileRequest {
693public:
694	SetFlagsRequest() : FileRequest(SET_FLAGS_REQUEST) {}
695
696	int			flags;
697};
698
699// SetFlagsReply
700class SetFlagsReply : public ReplyRequest {
701public:
702	SetFlagsReply() : ReplyRequest(SET_FLAGS_REPLY) {}
703};
704
705// SelectRequest
706class SelectRequest : public FileRequest {
707public:
708	SelectRequest() : FileRequest(SELECT_REQUEST) {}
709
710	uint8		event;
711	selectsync*	sync;
712};
713
714// SelectReply
715class SelectReply : public ReplyRequest {
716public:
717	SelectReply() : ReplyRequest(SELECT_REPLY) {}
718};
719
720// DeselectRequest
721class DeselectRequest : public FileRequest {
722public:
723	DeselectRequest() : FileRequest(DESELECT_REQUEST) {}
724
725	uint8		event;
726	selectsync*	sync;
727};
728
729// DeselectReply
730class DeselectReply : public ReplyRequest {
731public:
732	DeselectReply() : ReplyRequest(DESELECT_REPLY) {}
733};
734
735// FSyncRequest
736class FSyncRequest : public NodeRequest {
737public:
738	FSyncRequest() : NodeRequest(FSYNC_REQUEST) {}
739};
740
741// FSyncReply
742class FSyncReply : public ReplyRequest {
743public:
744	FSyncReply() : ReplyRequest(FSYNC_REPLY) {}
745};
746
747// ReadSymlinkRequest
748class ReadSymlinkRequest : public NodeRequest {
749public:
750	ReadSymlinkRequest() : NodeRequest(READ_SYMLINK_REQUEST) {}
751
752	size_t		size;
753};
754
755// ReadSymlinkReply
756class ReadSymlinkReply : public ReplyRequest {
757public:
758	ReadSymlinkReply() : ReplyRequest(READ_SYMLINK_REPLY) {}
759	status_t GetAddressInfos(AddressInfo* infos, int32* count);
760
761	Address		buffer;
762	size_t		bytesRead;
763};
764
765// CreateSymlinkRequest
766class CreateSymlinkRequest : public NodeRequest {
767public:
768	CreateSymlinkRequest() : NodeRequest(CREATE_SYMLINK_REQUEST) {}
769	status_t GetAddressInfos(AddressInfo* infos, int32* count);
770
771	Address		name;
772	Address		target;
773	int			mode;
774};
775
776// CreateSymlinkReply
777class CreateSymlinkReply : public ReplyRequest {
778public:
779	CreateSymlinkReply() : ReplyRequest(CREATE_SYMLINK_REPLY) {}
780};
781
782// LinkRequest
783class LinkRequest : public NodeRequest {
784public:
785	LinkRequest() : NodeRequest(LINK_REQUEST) {}
786	status_t GetAddressInfos(AddressInfo* infos, int32* count);
787
788	Address		name;
789	void*		target;
790};
791
792// LinkReply
793class LinkReply : public ReplyRequest {
794public:
795	LinkReply() : ReplyRequest(LINK_REPLY) {}
796};
797
798// UnlinkRequest
799class UnlinkRequest : public NodeRequest {
800public:
801	UnlinkRequest() : NodeRequest(UNLINK_REQUEST) {}
802	status_t GetAddressInfos(AddressInfo* infos, int32* count);
803
804	Address		name;
805};
806
807// UnlinkReply
808class UnlinkReply : public ReplyRequest {
809public:
810	UnlinkReply() : ReplyRequest(UNLINK_REPLY) {}
811};
812
813// RenameRequest
814class RenameRequest : public VolumeRequest {
815public:
816	RenameRequest() : VolumeRequest(RENAME_REQUEST) {}
817	status_t GetAddressInfos(AddressInfo* infos, int32* count);
818
819	void*		oldDir;
820	Address		oldName;
821	void*		newDir;
822	Address		newName;
823};
824
825// RenameReply
826class RenameReply : public ReplyRequest {
827public:
828	RenameReply() : ReplyRequest(RENAME_REPLY) {}
829};
830
831// AccessRequest
832class AccessRequest : public NodeRequest {
833public:
834	AccessRequest() : NodeRequest(ACCESS_REQUEST) {}
835
836	int			mode;
837};
838
839// AccessReply
840class AccessReply : public ReplyRequest {
841public:
842	AccessReply() : ReplyRequest(ACCESS_REPLY) {}
843};
844
845// ReadStatRequest
846class ReadStatRequest : public NodeRequest {
847public:
848	ReadStatRequest() : NodeRequest(READ_STAT_REQUEST) {}
849};
850
851// ReadStatReply
852class ReadStatReply : public ReplyRequest {
853public:
854	ReadStatReply() : ReplyRequest(READ_STAT_REPLY) {}
855
856	struct stat	st;
857};
858
859// WriteStatRequest
860class WriteStatRequest : public NodeRequest {
861public:
862	WriteStatRequest() : NodeRequest(WRITE_STAT_REQUEST) {}
863
864	struct stat	st;
865	uint32		mask;
866};
867
868// WriteStatReply
869class WriteStatReply : public ReplyRequest {
870public:
871	WriteStatReply() : ReplyRequest(WRITE_STAT_REPLY) {}
872};
873
874
875// #pragma mark - files
876
877
878// CreateRequest
879class CreateRequest : public NodeRequest {
880public:
881	CreateRequest() : NodeRequest(CREATE_REQUEST) {}
882	status_t GetAddressInfos(AddressInfo* infos, int32* count);
883
884	Address		name;
885	int			openMode;
886	int			mode;
887};
888
889// CreateReply
890class CreateReply : public ReplyRequest {
891public:
892	CreateReply() : ReplyRequest(CREATE_REPLY) {}
893
894	ino_t		vnid;
895	void*		fileCookie;
896};
897
898// OpenRequest
899class OpenRequest : public NodeRequest {
900public:
901	OpenRequest() : NodeRequest(OPEN_REQUEST) {}
902
903	int			openMode;
904};
905
906// OpenReply
907class OpenReply : public ReplyRequest {
908public:
909	OpenReply() : ReplyRequest(OPEN_REPLY) {}
910
911	void*		fileCookie;
912};
913
914// CloseRequest
915class CloseRequest : public FileRequest {
916public:
917	CloseRequest() : FileRequest(CLOSE_REQUEST) {}
918};
919
920// CloseReply
921class CloseReply : public ReplyRequest {
922public:
923	CloseReply() : ReplyRequest(CLOSE_REPLY) {}
924};
925
926// FreeCookieRequest
927class FreeCookieRequest : public FileRequest {
928public:
929	FreeCookieRequest() : FileRequest(FREE_COOKIE_REQUEST) {}
930};
931
932// FreeCookieReply
933class FreeCookieReply : public ReplyRequest {
934public:
935	FreeCookieReply() : ReplyRequest(FREE_COOKIE_REPLY) {}
936};
937
938// ReadRequest
939class ReadRequest : public FileRequest {
940public:
941	ReadRequest() : FileRequest(READ_REQUEST) {}
942
943	off_t		pos;
944	size_t		size;
945};
946
947// ReadReply
948class ReadReply : public ReplyRequest {
949public:
950	ReadReply() : ReplyRequest(READ_REPLY) {}
951	status_t GetAddressInfos(AddressInfo* infos, int32* count);
952
953	Address		buffer;
954	size_t		bytesRead;
955};
956
957// WriteRequest
958class WriteRequest : public FileRequest {
959public:
960	WriteRequest() : FileRequest(WRITE_REQUEST) {}
961	status_t GetAddressInfos(AddressInfo* infos, int32* count);
962
963	Address		buffer;
964	off_t		pos;
965};
966
967// WriteReply
968class WriteReply : public ReplyRequest {
969public:
970	WriteReply() : ReplyRequest(WRITE_REPLY) {}
971
972	size_t		bytesWritten;
973};
974
975
976// #pragma mark - directories
977
978
979// CreateDirRequest
980class CreateDirRequest : public NodeRequest {
981public:
982	CreateDirRequest() : NodeRequest(CREATE_DIR_REQUEST) {}
983	status_t GetAddressInfos(AddressInfo* infos, int32* count);
984
985	Address		name;
986	int			mode;
987};
988
989// CreateDirReply
990class CreateDirReply : public ReplyRequest {
991public:
992	CreateDirReply() : ReplyRequest(CREATE_DIR_REPLY) {}
993};
994
995// RemoveDirRequest
996class RemoveDirRequest : public NodeRequest {
997public:
998	RemoveDirRequest() : NodeRequest(REMOVE_DIR_REQUEST) {}
999	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1000
1001	Address		name;
1002};
1003
1004// RemoveDirReply
1005class RemoveDirReply : public ReplyRequest {
1006public:
1007	RemoveDirReply() : ReplyRequest(REMOVE_DIR_REPLY) {}
1008};
1009
1010// OpenDirRequest
1011class OpenDirRequest : public NodeRequest {
1012public:
1013	OpenDirRequest() : NodeRequest(OPEN_DIR_REQUEST) {}
1014};
1015
1016// OpenDirReply
1017class OpenDirReply : public ReplyRequest {
1018public:
1019	OpenDirReply() : ReplyRequest(OPEN_DIR_REPLY) {}
1020
1021	void*		dirCookie;
1022};
1023
1024// CloseDirRequest
1025class CloseDirRequest : public DirRequest {
1026public:
1027	CloseDirRequest() : DirRequest(CLOSE_DIR_REQUEST) {}
1028};
1029
1030// CloseDirReply
1031class CloseDirReply : public ReplyRequest {
1032public:
1033	CloseDirReply() : ReplyRequest(CLOSE_DIR_REPLY) {}
1034};
1035
1036// FreeDirCookieRequest
1037class FreeDirCookieRequest : public DirRequest {
1038public:
1039	FreeDirCookieRequest() : DirRequest(FREE_DIR_COOKIE_REQUEST) {}
1040};
1041
1042// FreeDirCookieReply
1043class FreeDirCookieReply : public ReplyRequest {
1044public:
1045	FreeDirCookieReply() : ReplyRequest(FREE_DIR_COOKIE_REPLY) {}
1046};
1047
1048// ReadDirRequest
1049class ReadDirRequest : public DirRequest {
1050public:
1051	ReadDirRequest() : DirRequest(READ_DIR_REQUEST) {}
1052
1053	size_t		bufferSize;
1054	uint32		count;
1055};
1056
1057// ReadDirReply
1058class ReadDirReply : public ReplyRequest {
1059public:
1060	ReadDirReply() : ReplyRequest(READ_DIR_REPLY) {}
1061	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1062
1063	uint32		count;
1064	Address		buffer;
1065};
1066
1067// RewindDirRequest
1068class RewindDirRequest : public DirRequest {
1069public:
1070	RewindDirRequest() : DirRequest(REWIND_DIR_REQUEST) {}
1071};
1072
1073// RewindDirReply
1074class RewindDirReply : public ReplyRequest {
1075public:
1076	RewindDirReply() : ReplyRequest(REWIND_DIR_REPLY) {}
1077};
1078
1079
1080// #pragma mark - attribute directories
1081
1082
1083// OpenAttrDirRequest
1084class OpenAttrDirRequest : public NodeRequest {
1085public:
1086	OpenAttrDirRequest() : NodeRequest(OPEN_ATTR_DIR_REQUEST) {}
1087};
1088
1089// OpenAttrDirReply
1090class OpenAttrDirReply : public ReplyRequest {
1091public:
1092	OpenAttrDirReply() : ReplyRequest(OPEN_ATTR_DIR_REPLY) {}
1093
1094	void*		attrDirCookie;
1095};
1096
1097// CloseAttrDirRequest
1098class CloseAttrDirRequest : public AttrDirRequest {
1099public:
1100	CloseAttrDirRequest() : AttrDirRequest(CLOSE_ATTR_DIR_REQUEST) {}
1101};
1102
1103// CloseAttrDirReply
1104class CloseAttrDirReply : public ReplyRequest {
1105public:
1106	CloseAttrDirReply() : ReplyRequest(CLOSE_ATTR_DIR_REPLY) {}
1107};
1108
1109// FreeAttrDirCookieRequest
1110class FreeAttrDirCookieRequest : public AttrDirRequest {
1111public:
1112	FreeAttrDirCookieRequest() : AttrDirRequest(FREE_ATTR_DIR_COOKIE_REQUEST) {}
1113};
1114
1115// FreeAttrDirCookieReply
1116class FreeAttrDirCookieReply : public ReplyRequest {
1117public:
1118	FreeAttrDirCookieReply() : ReplyRequest(FREE_ATTR_DIR_COOKIE_REPLY) {}
1119};
1120
1121// ReadAttrDirRequest
1122class ReadAttrDirRequest : public AttrDirRequest {
1123public:
1124	ReadAttrDirRequest() : AttrDirRequest(READ_ATTR_DIR_REQUEST) {}
1125
1126	size_t		bufferSize;
1127	uint32		count;
1128};
1129
1130// ReadAttrDirReply
1131class ReadAttrDirReply : public ReplyRequest {
1132public:
1133	ReadAttrDirReply() : ReplyRequest(READ_ATTR_DIR_REPLY) {}
1134	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1135
1136	uint32		count;
1137	Address		buffer;
1138};
1139
1140// RewindAttrDirRequest
1141class RewindAttrDirRequest : public AttrDirRequest {
1142public:
1143	RewindAttrDirRequest() : AttrDirRequest(REWIND_ATTR_DIR_REQUEST) {}
1144};
1145
1146// RewindAttrDirReply
1147class RewindAttrDirReply : public ReplyRequest {
1148public:
1149	RewindAttrDirReply() : ReplyRequest(REWIND_ATTR_DIR_REPLY) {}
1150};
1151
1152
1153// #pragma mark - attributes
1154
1155
1156// CreateAttrRequest
1157class CreateAttrRequest : public NodeRequest {
1158public:
1159	CreateAttrRequest() : NodeRequest(CREATE_ATTR_REQUEST) {}
1160	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1161
1162	Address		name;
1163	uint32		type;
1164	int			openMode;
1165};
1166
1167// CreateAttrReply
1168class CreateAttrReply : public ReplyRequest {
1169public:
1170	CreateAttrReply() : ReplyRequest(CREATE_ATTR_REPLY) {}
1171
1172	void*		attrCookie;
1173};
1174
1175// OpenAttrRequest
1176class OpenAttrRequest : public NodeRequest {
1177public:
1178	OpenAttrRequest() : NodeRequest(OPEN_ATTR_REQUEST) {}
1179	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1180
1181	Address		name;
1182	int			openMode;
1183};
1184
1185// OpenAttrReply
1186class OpenAttrReply : public ReplyRequest {
1187public:
1188	OpenAttrReply() : ReplyRequest(OPEN_ATTR_REPLY) {}
1189
1190	void*		attrCookie;
1191};
1192
1193// CloseAttrRequest
1194class CloseAttrRequest : public AttributeRequest {
1195public:
1196	CloseAttrRequest() : AttributeRequest(CLOSE_ATTR_REQUEST) {}
1197};
1198
1199// CloseAttrReply
1200class CloseAttrReply : public ReplyRequest {
1201public:
1202	CloseAttrReply() : ReplyRequest(CLOSE_ATTR_REPLY) {}
1203};
1204
1205// FreeAttrCookieRequest
1206class FreeAttrCookieRequest : public AttributeRequest {
1207public:
1208	FreeAttrCookieRequest() : AttributeRequest(FREE_ATTR_COOKIE_REQUEST) {}
1209};
1210
1211// FreeAttrCookieReply
1212class FreeAttrCookieReply : public ReplyRequest {
1213public:
1214	FreeAttrCookieReply() : ReplyRequest(FREE_ATTR_COOKIE_REPLY) {}
1215};
1216
1217// ReadAttrRequest
1218class ReadAttrRequest : public AttributeRequest {
1219public:
1220	ReadAttrRequest() : AttributeRequest(READ_ATTR_REQUEST) {}
1221
1222	off_t		pos;
1223	size_t		size;
1224};
1225
1226// ReadAttrReply
1227class ReadAttrReply : public ReplyRequest {
1228public:
1229	ReadAttrReply() : ReplyRequest(READ_ATTR_REPLY) {}
1230	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1231
1232	Address		buffer;
1233	size_t		bytesRead;
1234};
1235
1236// WriteAttrRequest
1237class WriteAttrRequest : public AttributeRequest {
1238public:
1239	WriteAttrRequest() : AttributeRequest(WRITE_ATTR_REQUEST) {}
1240	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1241
1242	Address		buffer;
1243	off_t		pos;
1244	size_t		size;
1245};
1246
1247// WriteAttrReply
1248class WriteAttrReply : public ReplyRequest {
1249public:
1250	WriteAttrReply() : ReplyRequest(WRITE_ATTR_REPLY) {}
1251
1252	size_t		bytesWritten;
1253};
1254
1255// ReadAttrStatRequest
1256class ReadAttrStatRequest : public AttributeRequest {
1257public:
1258	ReadAttrStatRequest() : AttributeRequest(READ_ATTR_STAT_REQUEST) {}
1259};
1260
1261// ReadAttrStatReply
1262class ReadAttrStatReply : public ReplyRequest {
1263public:
1264	ReadAttrStatReply() : ReplyRequest(READ_ATTR_STAT_REPLY) {}
1265
1266	struct stat	st;
1267};
1268
1269// WriteAttrStatRequest
1270class WriteAttrStatRequest : public AttributeRequest {
1271public:
1272	WriteAttrStatRequest() : AttributeRequest(WRITE_ATTR_STAT_REQUEST) {}
1273
1274	struct stat	st;
1275	uint32		mask;
1276};
1277
1278// WriteAttrStatReply
1279class WriteAttrStatReply : public ReplyRequest {
1280public:
1281	WriteAttrStatReply() : ReplyRequest(WRITE_ATTR_STAT_REPLY) {}
1282};
1283
1284// RenameAttrRequest
1285class RenameAttrRequest : public VolumeRequest {
1286public:
1287	RenameAttrRequest() : VolumeRequest(RENAME_ATTR_REQUEST) {}
1288	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1289
1290	void*		oldNode;
1291	void*		newNode;
1292	Address		oldName;
1293	Address		newName;
1294};
1295
1296// RenameAttrReply
1297class RenameAttrReply : public ReplyRequest {
1298public:
1299	RenameAttrReply() : ReplyRequest(RENAME_ATTR_REPLY) {}
1300};
1301
1302// RemoveAttrRequest
1303class RemoveAttrRequest : public NodeRequest {
1304public:
1305	RemoveAttrRequest() : NodeRequest(REMOVE_ATTR_REQUEST) {}
1306	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1307
1308	Address		name;
1309};
1310
1311// RemoveAttrReply
1312class RemoveAttrReply : public ReplyRequest {
1313public:
1314	RemoveAttrReply() : ReplyRequest(REMOVE_ATTR_REPLY) {}
1315};
1316
1317
1318// #pragma mark - indices
1319
1320
1321// OpenIndexDirRequest
1322class OpenIndexDirRequest : public VolumeRequest {
1323public:
1324	OpenIndexDirRequest() : VolumeRequest(OPEN_INDEX_DIR_REQUEST) {}
1325};
1326
1327// OpenIndexDirReply
1328class OpenIndexDirReply : public ReplyRequest {
1329public:
1330	OpenIndexDirReply() : ReplyRequest(OPEN_INDEX_DIR_REPLY) {}
1331
1332	void*		indexDirCookie;
1333};
1334
1335// CloseIndexDirRequest
1336class CloseIndexDirRequest : public IndexDirRequest {
1337public:
1338	CloseIndexDirRequest() : IndexDirRequest(CLOSE_INDEX_DIR_REQUEST) {}
1339};
1340
1341// CloseIndexDirReply
1342class CloseIndexDirReply : public ReplyRequest {
1343public:
1344	CloseIndexDirReply() : ReplyRequest(CLOSE_INDEX_DIR_REPLY) {}
1345};
1346
1347// FreeIndexDirCookieRequest
1348class FreeIndexDirCookieRequest : public IndexDirRequest {
1349public:
1350	FreeIndexDirCookieRequest()
1351		: IndexDirRequest(FREE_INDEX_DIR_COOKIE_REQUEST) {}
1352};
1353
1354// FreeIndexDirCookieReply
1355class FreeIndexDirCookieReply : public ReplyRequest {
1356public:
1357	FreeIndexDirCookieReply() : ReplyRequest(FREE_INDEX_DIR_COOKIE_REPLY) {}
1358};
1359
1360// ReadIndexDirRequest
1361class ReadIndexDirRequest : public IndexDirRequest {
1362public:
1363	ReadIndexDirRequest() : IndexDirRequest(READ_INDEX_DIR_REQUEST) {}
1364
1365	size_t		bufferSize;
1366	uint32		count;
1367};
1368
1369// ReadIndexDirReply
1370class ReadIndexDirReply : public ReplyRequest {
1371public:
1372	ReadIndexDirReply() : ReplyRequest(READ_INDEX_DIR_REPLY) {}
1373	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1374
1375	uint32		count;
1376	Address		buffer;
1377};
1378
1379// RewindIndexDirRequest
1380class RewindIndexDirRequest : public IndexDirRequest {
1381public:
1382	RewindIndexDirRequest() : IndexDirRequest(REWIND_INDEX_DIR_REQUEST) {}
1383};
1384
1385// RewindIndexDirReply
1386class RewindIndexDirReply : public ReplyRequest {
1387public:
1388	RewindIndexDirReply() : ReplyRequest(REWIND_INDEX_DIR_REPLY) {}
1389};
1390
1391// CreateIndexRequest
1392class CreateIndexRequest : public VolumeRequest {
1393public:
1394	CreateIndexRequest() : VolumeRequest(CREATE_INDEX_REQUEST) {}
1395	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1396
1397	Address		name;
1398	uint32		type;
1399	uint32		flags;
1400};
1401
1402// CreateIndexReply
1403class CreateIndexReply : public ReplyRequest {
1404public:
1405	CreateIndexReply() : ReplyRequest(CREATE_INDEX_REPLY) {}
1406};
1407
1408// RemoveIndexRequest
1409class RemoveIndexRequest : public VolumeRequest {
1410public:
1411	RemoveIndexRequest() : VolumeRequest(REMOVE_INDEX_REQUEST) {}
1412	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1413
1414	Address		name;
1415};
1416
1417// RemoveIndexReply
1418class RemoveIndexReply : public ReplyRequest {
1419public:
1420	RemoveIndexReply() : ReplyRequest(REMOVE_INDEX_REPLY) {}
1421};
1422
1423// ReadIndexStatRequest
1424class ReadIndexStatRequest : public VolumeRequest {
1425public:
1426	ReadIndexStatRequest() : VolumeRequest(READ_INDEX_STAT_REQUEST) {}
1427	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1428
1429	Address		name;
1430};
1431
1432// ReadIndexStatReply
1433class ReadIndexStatReply : public ReplyRequest {
1434public:
1435	ReadIndexStatReply() : ReplyRequest(READ_INDEX_STAT_REPLY) {}
1436
1437	struct stat	st;
1438};
1439
1440
1441// #pragma mark - queries
1442
1443
1444// OpenQueryRequest
1445class OpenQueryRequest : public VolumeRequest {
1446public:
1447	OpenQueryRequest() : VolumeRequest(OPEN_QUERY_REQUEST) {}
1448	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1449
1450	Address		queryString;
1451	uint32		flags;
1452	port_id		port;
1453	uint32		token;
1454};
1455
1456// OpenQueryReply
1457class OpenQueryReply : public ReplyRequest {
1458public:
1459	OpenQueryReply() : ReplyRequest(OPEN_QUERY_REPLY) {}
1460
1461	void*		queryCookie;
1462};
1463
1464// CloseQueryRequest
1465class CloseQueryRequest : public QueryRequest {
1466public:
1467	CloseQueryRequest() : QueryRequest(CLOSE_QUERY_REQUEST) {}
1468};
1469
1470// CloseQueryReply
1471class CloseQueryReply : public ReplyRequest {
1472public:
1473	CloseQueryReply() : ReplyRequest(CLOSE_QUERY_REPLY) {}
1474};
1475
1476// FreeQueryCookieRequest
1477class FreeQueryCookieRequest : public QueryRequest {
1478public:
1479	FreeQueryCookieRequest() : QueryRequest(FREE_QUERY_COOKIE_REQUEST) {}
1480};
1481
1482// FreeQueryCookieReply
1483class FreeQueryCookieReply : public ReplyRequest {
1484public:
1485	FreeQueryCookieReply() : ReplyRequest(FREE_QUERY_COOKIE_REPLY) {}
1486};
1487
1488// ReadQueryRequest
1489class ReadQueryRequest : public QueryRequest {
1490public:
1491	ReadQueryRequest() : QueryRequest(READ_QUERY_REQUEST) {}
1492
1493	size_t		bufferSize;
1494	uint32		count;
1495};
1496
1497// ReadQueryReply
1498class ReadQueryReply : public ReplyRequest {
1499public:
1500	ReadQueryReply() : ReplyRequest(READ_QUERY_REPLY) {}
1501	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1502
1503	uint32		count;
1504	Address		buffer;
1505};
1506
1507// RewindQueryRequest
1508class RewindQueryRequest : public QueryRequest {
1509public:
1510	RewindQueryRequest() : QueryRequest(REWIND_QUERY_REQUEST) {}
1511};
1512
1513// RewindQueryReply
1514class RewindQueryReply : public ReplyRequest {
1515public:
1516	RewindQueryReply() : ReplyRequest(REWIND_QUERY_REPLY) {}
1517};
1518
1519
1520// #pragma mark ----- node monitoring -----
1521
1522
1523// NodeMonitoringEventRequest
1524class NodeMonitoringEventRequest : public KernelRequest {
1525public:
1526	NodeMonitoringEventRequest()
1527		: KernelRequest(NODE_MONITORING_EVENT_REQUEST) {}
1528	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1529
1530	void*		listener;
1531	Address		event;
1532};
1533
1534// NodeMonitoringEventReply
1535class NodeMonitoringEventReply : public ReplyRequest {
1536public:
1537	NodeMonitoringEventReply() : ReplyRequest(NODE_MONITORING_EVENT_REPLY) {}
1538};
1539
1540
1541// #pragma mark -
1542// #pragma mark ----- userland requests -----
1543
1544// #pragma mark -
1545// #pragma mark ----- notifications -----
1546
1547// NotifyListenerRequest
1548class NotifyListenerRequest : public Request {
1549public:
1550	NotifyListenerRequest() : Request(NOTIFY_LISTENER_REQUEST) {}
1551	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1552
1553	int32		operation;
1554	uint32		details;			// for B_STAT_CHANGED:statFields
1555									// and B_ATTRIBUTE_CHANGED:cause
1556	dev_t		device;
1557	ino_t		oldDirectory;
1558	ino_t		directory;
1559	ino_t		node;
1560	Address		oldName;
1561	Address		name;
1562};
1563
1564// NotifyListenerReply
1565class NotifyListenerReply : public ReplyRequest {
1566public:
1567	NotifyListenerReply() : ReplyRequest(NOTIFY_LISTENER_REPLY) {}
1568};
1569
1570// NotifySelectRequest
1571class NotifySelectEventRequest : public Request {
1572public:
1573	NotifySelectEventRequest() : Request(NOTIFY_SELECT_EVENT_REQUEST) {}
1574
1575	selectsync*	sync;
1576	uint8		event;
1577	bool		unspecifiedEvent;
1578};
1579
1580// NotifySelectEventReply
1581class NotifySelectEventReply : public ReplyRequest {
1582public:
1583	NotifySelectEventReply() : ReplyRequest(NOTIFY_SELECT_EVENT_REPLY) {}
1584};
1585
1586// NotifyQueryRequest
1587class NotifyQueryRequest : public Request {
1588public:
1589	NotifyQueryRequest() : Request(NOTIFY_QUERY_REQUEST) {}
1590	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1591
1592	port_id		port;
1593	int32		token;
1594	int32		operation;			// B_ENTRY_{CREATED,REMOVED}
1595	dev_t		device;
1596	ino_t		directory;
1597	ino_t		node;
1598	Address		name;
1599};
1600
1601// NotifyQueryReply
1602class NotifyQueryReply : public ReplyRequest {
1603public:
1604	NotifyQueryReply() : ReplyRequest(NOTIFY_QUERY_REPLY) {}
1605};
1606
1607
1608// #pragma mark -
1609// #pragma mark ----- vnodes -----
1610
1611// GetVNodeRequest
1612class GetVNodeRequest : public Request {
1613public:
1614	GetVNodeRequest() : Request(GET_VNODE_REQUEST) {}
1615
1616	dev_t		nsid;
1617	ino_t		vnid;
1618};
1619
1620// GetVNodeReply
1621class GetVNodeReply : public ReplyRequest {
1622public:
1623	GetVNodeReply() : ReplyRequest(GET_VNODE_REPLY) {}
1624
1625	void*		node;
1626};
1627
1628// PutVNodeRequest
1629class PutVNodeRequest : public Request {
1630public:
1631	PutVNodeRequest() : Request(PUT_VNODE_REQUEST) {}
1632
1633	dev_t		nsid;
1634	ino_t		vnid;
1635};
1636
1637// PutVNodeReply
1638class PutVNodeReply : public ReplyRequest {
1639public:
1640	PutVNodeReply() : ReplyRequest(PUT_VNODE_REPLY) {}
1641};
1642
1643// AcquireVNodeRequest
1644class AcquireVNodeRequest : public Request {
1645public:
1646	AcquireVNodeRequest() : Request(ACQUIRE_VNODE_REQUEST) {}
1647
1648	dev_t		nsid;
1649	ino_t		vnid;
1650};
1651
1652// AcquireVNodeReply
1653class AcquireVNodeReply : public ReplyRequest {
1654public:
1655	AcquireVNodeReply() : ReplyRequest(ACQUIRE_VNODE_REPLY) {}
1656};
1657
1658// NewVNodeRequest
1659class NewVNodeRequest : public Request {
1660public:
1661	NewVNodeRequest() : Request(NEW_VNODE_REQUEST) {}
1662
1663	dev_t				nsid;
1664	ino_t				vnid;
1665	void*				node;
1666	FSVNodeCapabilities	capabilities;
1667};
1668
1669// NewVNodeReply
1670class NewVNodeReply : public ReplyRequest {
1671public:
1672	NewVNodeReply() : ReplyRequest(NEW_VNODE_REPLY) {}
1673};
1674
1675// PublishVNodeRequest
1676class PublishVNodeRequest : public Request {
1677public:
1678	PublishVNodeRequest() : Request(PUBLISH_VNODE_REQUEST) {}
1679
1680	dev_t				nsid;
1681	ino_t				vnid;
1682	void*				node;
1683	int					type;
1684	uint32				flags;
1685	FSVNodeCapabilities	capabilities;
1686};
1687
1688// PublishVNodeReply
1689class PublishVNodeReply : public ReplyRequest {
1690public:
1691	PublishVNodeReply() : ReplyRequest(PUBLISH_VNODE_REPLY) {}
1692};
1693
1694// RemoveVNodeRequest
1695class RemoveVNodeRequest : public Request {
1696public:
1697	RemoveVNodeRequest() : Request(REMOVE_VNODE_REQUEST) {}
1698
1699	dev_t		nsid;
1700	ino_t		vnid;
1701};
1702
1703// RemoveVNodeReply
1704class RemoveVNodeReply : public ReplyRequest {
1705public:
1706	RemoveVNodeReply() : ReplyRequest(REMOVE_VNODE_REPLY) {}
1707};
1708
1709// UnremoveVNodeRequest
1710class UnremoveVNodeRequest : public Request {
1711public:
1712	UnremoveVNodeRequest() : Request(UNREMOVE_VNODE_REQUEST) {}
1713
1714	dev_t		nsid;
1715	ino_t		vnid;
1716};
1717
1718// UnremoveVNodeReply
1719class UnremoveVNodeReply : public ReplyRequest {
1720public:
1721	UnremoveVNodeReply() : ReplyRequest(UNREMOVE_VNODE_REPLY) {}
1722};
1723
1724// GetVNodeRemovedRequest
1725class GetVNodeRemovedRequest : public Request {
1726public:
1727	GetVNodeRemovedRequest() : Request(GET_VNODE_REMOVED_REQUEST) {}
1728
1729	dev_t		nsid;
1730	ino_t		vnid;
1731};
1732
1733// GetVNodeRemovedReply
1734class GetVNodeRemovedReply : public ReplyRequest {
1735public:
1736	GetVNodeRemovedReply() : ReplyRequest(GET_VNODE_REMOVED_REPLY) {}
1737
1738	bool		removed;
1739};
1740
1741
1742// #pragma mark - file cache
1743
1744
1745// FileCacheCreateRequest
1746class FileCacheCreateRequest : public FileCacheRequest {
1747public:
1748	FileCacheCreateRequest() : FileCacheRequest(FILE_CACHE_CREATE_REQUEST) {}
1749
1750	off_t		size;
1751};
1752
1753// FileCacheCreateReply
1754class FileCacheCreateReply : public ReplyRequest {
1755public:
1756	FileCacheCreateReply() : ReplyRequest(FILE_CACHE_CREATE_REPLY) {}
1757};
1758
1759// FileCacheDeleteRequest
1760class FileCacheDeleteRequest : public FileCacheRequest {
1761public:
1762	FileCacheDeleteRequest() : FileCacheRequest(FILE_CACHE_DELETE_REQUEST) {}
1763};
1764
1765// FileCacheDeleteReply
1766class FileCacheDeleteReply : public ReplyRequest {
1767public:
1768	FileCacheDeleteReply() : ReplyRequest(FILE_CACHE_DELETE_REPLY) {}
1769};
1770
1771// FileCacheSetEnabledRequest
1772class FileCacheSetEnabledRequest : public FileCacheRequest {
1773public:
1774	FileCacheSetEnabledRequest()
1775		: FileCacheRequest(FILE_CACHE_SET_ENABLED_REQUEST) {}
1776
1777	bool		enabled;
1778};
1779
1780// FileCacheSetEnabledReply
1781class FileCacheSetEnabledReply : public ReplyRequest {
1782public:
1783	FileCacheSetEnabledReply() : ReplyRequest(FILE_CACHE_SET_ENABLED_REPLY) {}
1784};
1785
1786// FileCacheSetSizeRequest
1787class FileCacheSetSizeRequest : public FileCacheRequest {
1788public:
1789	FileCacheSetSizeRequest() : FileCacheRequest(FILE_CACHE_SET_SIZE_REQUEST) {}
1790
1791	size_t		size;
1792};
1793
1794// FileCacheSetSizeReply
1795class FileCacheSetSizeReply : public ReplyRequest {
1796public:
1797	FileCacheSetSizeReply() : ReplyRequest(FILE_CACHE_SET_SIZE_REPLY) {}
1798};
1799
1800
1801// FileCacheSyncRequest
1802class FileCacheSyncRequest : public FileCacheRequest {
1803public:
1804	FileCacheSyncRequest() : FileCacheRequest(FILE_CACHE_SYNC_REQUEST) {}
1805};
1806
1807// FileCacheSyncReply
1808class FileCacheSyncReply : public ReplyRequest {
1809public:
1810	FileCacheSyncReply() : ReplyRequest(FILE_CACHE_SYNC_REPLY) {}
1811};
1812
1813
1814// FileCacheReadRequest
1815class FileCacheReadRequest : public FileCacheRequest {
1816public:
1817	FileCacheReadRequest() : FileCacheRequest(FILE_CACHE_READ_REQUEST) {}
1818
1819	void*		cookie;
1820	off_t		pos;
1821	size_t		size;
1822};
1823
1824// FileCacheReadReply
1825class FileCacheReadReply : public ReplyRequest {
1826public:
1827	FileCacheReadReply() : ReplyRequest(FILE_CACHE_READ_REPLY) {}
1828	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1829
1830	Address		buffer;
1831	size_t		bytesRead;
1832};
1833
1834// FileCacheWriteRequest
1835class FileCacheWriteRequest : public FileCacheRequest {
1836public:
1837	FileCacheWriteRequest() : FileCacheRequest(FILE_CACHE_WRITE_REQUEST) {}
1838	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1839
1840	void*		cookie;
1841	Address		buffer;
1842	size_t		size;
1843	off_t		pos;
1844};
1845
1846// FileCacheWriteReply
1847class FileCacheWriteReply : public ReplyRequest {
1848public:
1849	FileCacheWriteReply() : ReplyRequest(FILE_CACHE_WRITE_REPLY) {}
1850
1851	size_t		bytesWritten;
1852};
1853
1854
1855// #pragma mark - I/O
1856
1857
1858// DoIterativeFDIORequest
1859class DoIterativeFDIORequest : public Request {
1860public:
1861	DoIterativeFDIORequest() : Request(DO_ITERATIVE_FD_IO_REQUEST) {}
1862
1863	enum { MAX_VECS = 8 };
1864
1865	dev_t		nsid;
1866	int			fd;
1867	int32		request;
1868	void*		cookie;
1869	file_io_vec	vecs[MAX_VECS];
1870	uint32		vecCount;
1871};
1872
1873// DoIterativeFDIOReply
1874class DoIterativeFDIOReply : public ReplyRequest {
1875public:
1876	DoIterativeFDIOReply() : ReplyRequest(DO_ITERATIVE_FD_IO_REPLY) {}
1877};
1878
1879// ReadFromIORequestRequest
1880class ReadFromIORequestRequest : public IORequestRequest {
1881public:
1882	ReadFromIORequestRequest()
1883		: IORequestRequest(READ_FROM_IO_REQUEST_REQUEST) {}
1884
1885	size_t		size;
1886};
1887
1888// ReadFromIORequestReply
1889class ReadFromIORequestReply : public ReplyRequest {
1890public:
1891	ReadFromIORequestReply() : ReplyRequest(READ_FROM_IO_REQUEST_REPLY) {}
1892	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1893
1894	Address		buffer;
1895};
1896
1897// WriteToIORequestRequest
1898class WriteToIORequestRequest : public IORequestRequest {
1899public:
1900	WriteToIORequestRequest() : IORequestRequest(WRITE_TO_IO_REQUEST_REQUEST) {}
1901	status_t GetAddressInfos(AddressInfo* infos, int32* count);
1902
1903	Address		buffer;
1904};
1905
1906// WriteToIORequestReply
1907class WriteToIORequestReply : public ReplyRequest {
1908public:
1909	WriteToIORequestReply() : ReplyRequest(WRITE_TO_IO_REQUEST_REPLY) {}
1910};
1911
1912// NotifyIORequestRequest
1913class NotifyIORequestRequest : public IORequestRequest {
1914public:
1915	NotifyIORequestRequest() : IORequestRequest(NOTIFY_IO_REQUEST_REQUEST) {}
1916
1917	enum { MAX_VECS = 8 };
1918
1919	status_t	status;
1920};
1921
1922// NotifyIORequestReply
1923class NotifyIORequestReply : public ReplyRequest {
1924public:
1925	NotifyIORequestReply() : ReplyRequest(NOTIFY_IO_REQUEST_REPLY) {}
1926};
1927
1928
1929// #pragma mark - node monitoring
1930
1931
1932// AddNodeListenerRequest
1933class AddNodeListenerRequest : public Request {
1934public:
1935	AddNodeListenerRequest() : Request(ADD_NODE_LISTENER_REQUEST) {}
1936
1937	dev_t		device;
1938	ino_t		node;
1939	uint32		flags;
1940	void*		listener;
1941};
1942
1943// AddNodeListenerReply
1944class AddNodeListenerReply : public ReplyRequest {
1945public:
1946	AddNodeListenerReply() : ReplyRequest(ADD_NODE_LISTENER_REPLY) {}
1947};
1948
1949// RemoveNodeListenerRequest
1950class RemoveNodeListenerRequest : public Request {
1951public:
1952	RemoveNodeListenerRequest() : Request(REMOVE_NODE_LISTENER_REQUEST) {}
1953
1954	dev_t		device;
1955	ino_t		node;
1956	void*		listener;
1957};
1958
1959// RemoveNodeListenerReply
1960class RemoveNodeListenerReply : public ReplyRequest {
1961public:
1962	RemoveNodeListenerReply() : ReplyRequest(REMOVE_NODE_LISTENER_REPLY) {}
1963};
1964
1965
1966//////////////////
1967// General Reply
1968
1969// ReceiptAckReply
1970class ReceiptAckReply : public ReplyRequest {
1971public:
1972	ReceiptAckReply() : ReplyRequest(RECEIPT_ACK_REPLY) {}
1973};
1974
1975
1976///////////////////
1977// Request Checks
1978
1979// do_for_request
1980template<class Task>
1981static
1982status_t
1983do_for_request(Request* request, Task& task)
1984{
1985	if (!request)
1986		return B_BAD_VALUE;
1987	switch (request->GetType()) {
1988		// kernel -> userland requests
1989		// administrative
1990		case UFS_DISCONNECT_REQUEST:
1991			return task((UFSDisconnectRequest*)request);
1992		case FS_CONNECT_REQUEST:
1993			return task((FSConnectRequest*)request);
1994		case FS_CONNECT_REPLY:
1995			return task((FSConnectReply*)request);
1996		// FS
1997		case MOUNT_VOLUME_REQUEST:
1998			return task((MountVolumeRequest*)request);
1999		case MOUNT_VOLUME_REPLY:
2000			return task((MountVolumeReply*)request);
2001		case UNMOUNT_VOLUME_REQUEST:
2002			return task((UnmountVolumeRequest*)request);
2003		case UNMOUNT_VOLUME_REPLY:
2004			return task((UnmountVolumeReply*)request);
2005//		case INITIALIZE_VOLUME_REQUEST:
2006//			return task((InitializeVolumeRequest*)request);
2007//		case INITIALIZE_VOLUME_REPLY:
2008//			return task((InitializeVolumeReply*)request);
2009		case SYNC_VOLUME_REQUEST:
2010			return task((SyncVolumeRequest*)request);
2011		case SYNC_VOLUME_REPLY:
2012			return task((SyncVolumeReply*)request);
2013		case READ_FS_INFO_REQUEST:
2014			return task((ReadFSInfoRequest*)request);
2015		case READ_FS_INFO_REPLY:
2016			return task((ReadFSInfoReply*)request);
2017		case WRITE_FS_INFO_REQUEST:
2018			return task((WriteFSInfoRequest*)request);
2019		case WRITE_FS_INFO_REPLY:
2020			return task((WriteFSInfoReply*)request);
2021		// vnodes
2022		case LOOKUP_REQUEST:
2023			return task((LookupRequest*)request);
2024		case LOOKUP_REPLY:
2025			return task((LookupReply*)request);
2026		case GET_VNODE_NAME_REQUEST:
2027			return task((GetVNodeNameRequest*)request);
2028		case GET_VNODE_NAME_REPLY:
2029			return task((GetVNodeNameReply*)request);
2030		case READ_VNODE_REQUEST:
2031			return task((ReadVNodeRequest*)request);
2032		case READ_VNODE_REPLY:
2033			return task((ReadVNodeReply*)request);
2034		case WRITE_VNODE_REQUEST:
2035			return task((WriteVNodeRequest*)request);
2036		case WRITE_VNODE_REPLY:
2037			return task((WriteVNodeReply*)request);
2038		case FS_REMOVE_VNODE_REQUEST:
2039			return task((FSRemoveVNodeRequest*)request);
2040		case FS_REMOVE_VNODE_REPLY:
2041			return task((FSRemoveVNodeReply*)request);
2042		// asynchronous I/O
2043		case DO_IO_REQUEST:
2044			return task((DoIORequest*)request);
2045		case DO_IO_REPLY:
2046			return task((DoIOReply*)request);
2047		case CANCEL_IO_REQUEST:
2048			return task((CancelIORequest*)request);
2049		case CANCEL_IO_REPLY:
2050			return task((CancelIOReply*)request);
2051		case ITERATIVE_IO_GET_VECS_REQUEST:
2052			return task((IterativeIOGetVecsRequest*)request);
2053		case ITERATIVE_IO_GET_VECS_REPLY:
2054			return task((IterativeIOGetVecsReply*)request);
2055		case ITERATIVE_IO_FINISHED_REQUEST:
2056			return task((IterativeIOFinishedRequest*)request);
2057		case ITERATIVE_IO_FINISHED_REPLY:
2058			return task((IterativeIOFinishedReply*)request);
2059		// nodes
2060		case IOCTL_REQUEST:
2061			return task((IOCtlRequest*)request);
2062		case IOCTL_REPLY:
2063			return task((IOCtlReply*)request);
2064		case SET_FLAGS_REQUEST:
2065			return task((SetFlagsRequest*)request);
2066		case SET_FLAGS_REPLY:
2067			return task((SetFlagsReply*)request);
2068		case SELECT_REQUEST:
2069			return task((SelectRequest*)request);
2070		case SELECT_REPLY:
2071			return task((SelectReply*)request);
2072		case DESELECT_REQUEST:
2073			return task((DeselectRequest*)request);
2074		case DESELECT_REPLY:
2075			return task((DeselectReply*)request);
2076		case FSYNC_REQUEST:
2077			return task((FSyncRequest*)request);
2078		case FSYNC_REPLY:
2079			return task((FSyncReply*)request);
2080		case READ_SYMLINK_REQUEST:
2081			return task((ReadSymlinkRequest*)request);
2082		case READ_SYMLINK_REPLY:
2083			return task((ReadSymlinkReply*)request);
2084		case CREATE_SYMLINK_REQUEST:
2085			return task((CreateSymlinkRequest*)request);
2086		case CREATE_SYMLINK_REPLY:
2087			return task((CreateSymlinkReply*)request);
2088		case LINK_REQUEST:
2089			return task((LinkRequest*)request);
2090		case LINK_REPLY:
2091			return task((LinkReply*)request);
2092		case UNLINK_REQUEST:
2093			return task((UnlinkRequest*)request);
2094		case UNLINK_REPLY:
2095			return task((UnlinkReply*)request);
2096		case RENAME_REQUEST:
2097			return task((RenameRequest*)request);
2098		case RENAME_REPLY:
2099			return task((RenameReply*)request);
2100		case ACCESS_REQUEST:
2101			return task((AccessRequest*)request);
2102		case ACCESS_REPLY:
2103			return task((AccessReply*)request);
2104		case READ_STAT_REQUEST:
2105			return task((ReadStatRequest*)request);
2106		case READ_STAT_REPLY:
2107			return task((ReadStatReply*)request);
2108		case WRITE_STAT_REQUEST:
2109			return task((WriteStatRequest*)request);
2110		case WRITE_STAT_REPLY:
2111			return task((WriteStatReply*)request);
2112		// files
2113		case CREATE_REQUEST:
2114			return task((CreateRequest*)request);
2115		case CREATE_REPLY:
2116			return task((CreateReply*)request);
2117		case OPEN_REQUEST:
2118			return task((OpenRequest*)request);
2119		case OPEN_REPLY:
2120			return task((OpenReply*)request);
2121		case CLOSE_REQUEST:
2122			return task((CloseRequest*)request);
2123		case CLOSE_REPLY:
2124			return task((CloseReply*)request);
2125		case FREE_COOKIE_REQUEST:
2126			return task((FreeCookieRequest*)request);
2127		case FREE_COOKIE_REPLY:
2128			return task((FreeCookieReply*)request);
2129		case READ_REQUEST:
2130			return task((ReadRequest*)request);
2131		case READ_REPLY:
2132			return task((ReadReply*)request);
2133		case WRITE_REQUEST:
2134			return task((WriteRequest*)request);
2135		case WRITE_REPLY:
2136			return task((WriteReply*)request);
2137		// directories
2138		case CREATE_DIR_REQUEST:
2139			return task((CreateDirRequest*)request);
2140		case CREATE_DIR_REPLY:
2141			return task((CreateDirReply*)request);
2142		case REMOVE_DIR_REQUEST:
2143			return task((RemoveDirRequest*)request);
2144		case REMOVE_DIR_REPLY:
2145			return task((RemoveDirReply*)request);
2146		case OPEN_DIR_REQUEST:
2147			return task((OpenDirRequest*)request);
2148		case OPEN_DIR_REPLY:
2149			return task((OpenDirReply*)request);
2150		case CLOSE_DIR_REQUEST:
2151			return task((CloseDirRequest*)request);
2152		case CLOSE_DIR_REPLY:
2153			return task((CloseDirReply*)request);
2154		case FREE_DIR_COOKIE_REQUEST:
2155			return task((FreeDirCookieRequest*)request);
2156		case FREE_DIR_COOKIE_REPLY:
2157			return task((FreeDirCookieReply*)request);
2158		case READ_DIR_REQUEST:
2159			return task((ReadDirRequest*)request);
2160		case READ_DIR_REPLY:
2161			return task((ReadDirReply*)request);
2162		case REWIND_DIR_REQUEST:
2163			return task((RewindDirRequest*)request);
2164		case REWIND_DIR_REPLY:
2165			return task((RewindDirReply*)request);
2166		// attribute directories
2167		case OPEN_ATTR_DIR_REQUEST:
2168			return task((OpenAttrDirRequest*)request);
2169		case OPEN_ATTR_DIR_REPLY:
2170			return task((OpenAttrDirReply*)request);
2171		case CLOSE_ATTR_DIR_REQUEST:
2172			return task((CloseAttrDirRequest*)request);
2173		case CLOSE_ATTR_DIR_REPLY:
2174			return task((CloseAttrDirReply*)request);
2175		case FREE_ATTR_DIR_COOKIE_REQUEST:
2176			return task((FreeAttrDirCookieRequest*)request);
2177		case FREE_ATTR_DIR_COOKIE_REPLY:
2178			return task((FreeAttrDirCookieReply*)request);
2179		case READ_ATTR_DIR_REQUEST:
2180			return task((ReadAttrDirRequest*)request);
2181		case READ_ATTR_DIR_REPLY:
2182			return task((ReadAttrDirReply*)request);
2183		case REWIND_ATTR_DIR_REQUEST:
2184			return task((RewindAttrDirRequest*)request);
2185		case REWIND_ATTR_DIR_REPLY:
2186			return task((RewindAttrDirReply*)request);
2187		// attributes
2188		case CREATE_ATTR_REQUEST:
2189			return task((CreateAttrRequest*)request);
2190		case CREATE_ATTR_REPLY:
2191			return task((CreateAttrReply*)request);
2192		case OPEN_ATTR_REQUEST:
2193			return task((OpenAttrRequest*)request);
2194		case OPEN_ATTR_REPLY:
2195			return task((OpenAttrReply*)request);
2196		case CLOSE_ATTR_REQUEST:
2197			return task((CloseAttrRequest*)request);
2198		case CLOSE_ATTR_REPLY:
2199			return task((CloseAttrReply*)request);
2200		case FREE_ATTR_COOKIE_REQUEST:
2201			return task((FreeAttrCookieRequest*)request);
2202		case FREE_ATTR_COOKIE_REPLY:
2203			return task((FreeAttrCookieReply*)request);
2204		case READ_ATTR_REQUEST:
2205			return task((ReadAttrRequest*)request);
2206		case READ_ATTR_REPLY:
2207			return task((ReadAttrReply*)request);
2208		case WRITE_ATTR_REQUEST:
2209			return task((WriteAttrRequest*)request);
2210		case WRITE_ATTR_REPLY:
2211			return task((WriteAttrReply*)request);
2212		case READ_ATTR_STAT_REQUEST:
2213			return task((ReadAttrStatRequest*)request);
2214		case READ_ATTR_STAT_REPLY:
2215			return task((ReadAttrStatReply*)request);
2216		case WRITE_ATTR_STAT_REQUEST:
2217			return task((WriteAttrStatRequest*)request);
2218		case WRITE_ATTR_STAT_REPLY:
2219			return task((WriteAttrStatReply*)request);
2220		case RENAME_ATTR_REQUEST:
2221			return task((RenameAttrRequest*)request);
2222		case RENAME_ATTR_REPLY:
2223			return task((RenameAttrReply*)request);
2224		case REMOVE_ATTR_REQUEST:
2225			return task((RemoveAttrRequest*)request);
2226		case REMOVE_ATTR_REPLY:
2227			return task((RemoveAttrReply*)request);
2228		// indices
2229		case OPEN_INDEX_DIR_REQUEST:
2230			return task((OpenIndexDirRequest*)request);
2231		case OPEN_INDEX_DIR_REPLY:
2232			return task((OpenIndexDirReply*)request);
2233		case CLOSE_INDEX_DIR_REQUEST:
2234			return task((CloseIndexDirRequest*)request);
2235		case CLOSE_INDEX_DIR_REPLY:
2236			return task((CloseIndexDirReply*)request);
2237		case FREE_INDEX_DIR_COOKIE_REQUEST:
2238			return task((FreeIndexDirCookieRequest*)request);
2239		case FREE_INDEX_DIR_COOKIE_REPLY:
2240			return task((FreeIndexDirCookieReply*)request);
2241		case READ_INDEX_DIR_REQUEST:
2242			return task((ReadIndexDirRequest*)request);
2243		case READ_INDEX_DIR_REPLY:
2244			return task((ReadIndexDirReply*)request);
2245		case REWIND_INDEX_DIR_REQUEST:
2246			return task((RewindIndexDirRequest*)request);
2247		case REWIND_INDEX_DIR_REPLY:
2248			return task((RewindIndexDirReply*)request);
2249		case CREATE_INDEX_REQUEST:
2250			return task((CreateIndexRequest*)request);
2251		case CREATE_INDEX_REPLY:
2252			return task((CreateIndexReply*)request);
2253		case REMOVE_INDEX_REQUEST:
2254			return task((RemoveIndexRequest*)request);
2255		case REMOVE_INDEX_REPLY:
2256			return task((RemoveIndexReply*)request);
2257		case READ_INDEX_STAT_REQUEST:
2258			return task((ReadIndexStatRequest*)request);
2259		case READ_INDEX_STAT_REPLY:
2260			return task((ReadIndexStatReply*)request);
2261		// queries
2262		case OPEN_QUERY_REQUEST:
2263			return task((OpenQueryRequest*)request);
2264		case OPEN_QUERY_REPLY:
2265			return task((OpenQueryReply*)request);
2266		case CLOSE_QUERY_REQUEST:
2267			return task((CloseQueryRequest*)request);
2268		case CLOSE_QUERY_REPLY:
2269			return task((CloseQueryReply*)request);
2270		case FREE_QUERY_COOKIE_REQUEST:
2271			return task((FreeQueryCookieRequest*)request);
2272		case FREE_QUERY_COOKIE_REPLY:
2273			return task((FreeQueryCookieReply*)request);
2274		case READ_QUERY_REQUEST:
2275			return task((ReadQueryRequest*)request);
2276		case READ_QUERY_REPLY:
2277			return task((ReadQueryReply*)request);
2278		case REWIND_QUERY_REQUEST:
2279			return task((RewindQueryRequest*)request);
2280		case REWIND_QUERY_REPLY:
2281			return task((RewindQueryReply*)request);
2282		// node monitoring
2283		case NODE_MONITORING_EVENT_REQUEST:
2284			return task((NodeMonitoringEventRequest*)request);
2285		case NODE_MONITORING_EVENT_REPLY:
2286			return task((NodeMonitoringEventReply*)request);
2287
2288		// userland -> kernel requests
2289		// notifications
2290		case NOTIFY_LISTENER_REQUEST:
2291			return task((NotifyListenerRequest*)request);
2292		case NOTIFY_LISTENER_REPLY:
2293			return task((NotifyListenerReply*)request);
2294		case NOTIFY_SELECT_EVENT_REQUEST:
2295			return task((NotifySelectEventRequest*)request);
2296		case NOTIFY_SELECT_EVENT_REPLY:
2297			return task((NotifySelectEventReply*)request);
2298		case NOTIFY_QUERY_REQUEST:
2299			return task((NotifyQueryRequest*)request);
2300		case NOTIFY_QUERY_REPLY:
2301			return task((NotifyQueryReply*)request);
2302		// vnodes
2303		case GET_VNODE_REQUEST:
2304			return task((GetVNodeRequest*)request);
2305		case GET_VNODE_REPLY:
2306			return task((GetVNodeReply*)request);
2307		case PUT_VNODE_REQUEST:
2308			return task((PutVNodeRequest*)request);
2309		case PUT_VNODE_REPLY:
2310			return task((PutVNodeReply*)request);
2311		case ACQUIRE_VNODE_REQUEST:
2312			return task((PutVNodeRequest*)request);
2313		case ACQUIRE_VNODE_REPLY:
2314			return task((AcquireVNodeReply*)request);
2315		case NEW_VNODE_REQUEST:
2316			return task((NewVNodeRequest*)request);
2317		case NEW_VNODE_REPLY:
2318			return task((NewVNodeReply*)request);
2319		case PUBLISH_VNODE_REQUEST:
2320			return task((PublishVNodeRequest*)request);
2321		case PUBLISH_VNODE_REPLY:
2322			return task((PublishVNodeReply*)request);
2323		case REMOVE_VNODE_REQUEST:
2324			return task((RemoveVNodeRequest*)request);
2325		case REMOVE_VNODE_REPLY:
2326			return task((RemoveVNodeReply*)request);
2327		case UNREMOVE_VNODE_REQUEST:
2328			return task((UnremoveVNodeRequest*)request);
2329		case UNREMOVE_VNODE_REPLY:
2330			return task((UnremoveVNodeReply*)request);
2331		case GET_VNODE_REMOVED_REQUEST:
2332			return task((GetVNodeRemovedRequest*)request);
2333		case GET_VNODE_REMOVED_REPLY:
2334			return task((GetVNodeRemovedReply*)request);
2335		// file cache
2336		case FILE_CACHE_CREATE_REQUEST:
2337			return task((FileCacheCreateRequest*)request);
2338		case FILE_CACHE_CREATE_REPLY:
2339			return task((FileCacheCreateReply*)request);
2340		case FILE_CACHE_DELETE_REQUEST:
2341			return task((FileCacheDeleteRequest*)request);
2342		case FILE_CACHE_DELETE_REPLY:
2343			return task((FileCacheDeleteReply*)request);
2344		case FILE_CACHE_SET_ENABLED_REQUEST:
2345			return task((FileCacheSetEnabledRequest*)request);
2346		case FILE_CACHE_SET_ENABLED_REPLY:
2347			return task((FileCacheSetEnabledReply*)request);
2348		case FILE_CACHE_SET_SIZE_REQUEST:
2349			return task((FileCacheSetSizeRequest*)request);
2350		case FILE_CACHE_SET_SIZE_REPLY:
2351			return task((FileCacheSetSizeReply*)request);
2352		case FILE_CACHE_SYNC_REQUEST:
2353			return task((FileCacheSyncRequest*)request);
2354		case FILE_CACHE_SYNC_REPLY:
2355			return task((FileCacheSyncReply*)request);
2356		case FILE_CACHE_READ_REQUEST:
2357			return task((FileCacheReadRequest*)request);
2358		case FILE_CACHE_READ_REPLY:
2359			return task((FileCacheReadReply*)request);
2360		case FILE_CACHE_WRITE_REQUEST:
2361			return task((FileCacheWriteRequest*)request);
2362		case FILE_CACHE_WRITE_REPLY:
2363			return task((FileCacheWriteReply*)request);
2364		// I/O
2365		case DO_ITERATIVE_FD_IO_REQUEST:
2366			return task((DoIterativeFDIORequest*)request);
2367		case DO_ITERATIVE_FD_IO_REPLY:
2368			return task((DoIterativeFDIOReply*)request);
2369		case READ_FROM_IO_REQUEST_REQUEST:
2370			return task((ReadFromIORequestRequest*)request);
2371		case READ_FROM_IO_REQUEST_REPLY:
2372			return task((ReadFromIORequestReply*)request);
2373		case WRITE_TO_IO_REQUEST_REQUEST:
2374			return task((WriteToIORequestRequest*)request);
2375		case WRITE_TO_IO_REQUEST_REPLY:
2376			return task((WriteToIORequestReply*)request);
2377		case NOTIFY_IO_REQUEST_REQUEST:
2378			return task((NotifyIORequestRequest*)request);
2379		case NOTIFY_IO_REQUEST_REPLY:
2380			return task((NotifyIORequestReply*)request);
2381		// node monitoring
2382		case ADD_NODE_LISTENER_REQUEST:
2383			return task((AddNodeListenerRequest*)request);
2384		case ADD_NODE_LISTENER_REPLY:
2385			return task((AddNodeListenerReply*)request);
2386		case REMOVE_NODE_LISTENER_REQUEST:
2387			return task((RemoveNodeListenerRequest*)request);
2388		case REMOVE_NODE_LISTENER_REPLY:
2389			return task((RemoveNodeListenerReply*)request);
2390		// general reply
2391		case RECEIPT_ACK_REPLY:
2392			return task((ReceiptAckReply*)request);
2393		default:
2394			return B_BAD_DATA;
2395	}
2396}
2397
2398status_t get_request_address_infos(Request* request, AddressInfo* infos,
2399	int32* count);
2400status_t check_request(Request* request);
2401status_t relocate_request(Request* request, int32 requestBufferSize,
2402	area_id* areas, int32* count);
2403
2404}	// namespace UserlandFSUtil
2405
2406using UserlandFSUtil::ReplyRequest;
2407using UserlandFSUtil::KernelRequest;
2408using UserlandFSUtil::VolumeRequest;
2409using UserlandFSUtil::NodeRequest;
2410using UserlandFSUtil::FileRequest;
2411using UserlandFSUtil::DirRequest;
2412using UserlandFSUtil::AttrDirRequest;
2413using UserlandFSUtil::IndexDirRequest;
2414
2415// kernel -> userland requests
2416// administrative
2417using UserlandFSUtil::UFSDisconnectRequest;
2418using UserlandFSUtil::FSConnectRequest;
2419using UserlandFSUtil::FSConnectReply;
2420// FS
2421using UserlandFSUtil::MountVolumeRequest;
2422using UserlandFSUtil::MountVolumeReply;
2423using UserlandFSUtil::UnmountVolumeRequest;
2424using UserlandFSUtil::UnmountVolumeReply;
2425//using UserlandFSUtil::InitializeVolumeRequest;
2426//using UserlandFSUtil::InitializeVolumeReply;
2427using UserlandFSUtil::SyncVolumeRequest;
2428using UserlandFSUtil::SyncVolumeReply;
2429using UserlandFSUtil::ReadFSInfoRequest;
2430using UserlandFSUtil::ReadFSInfoReply;
2431using UserlandFSUtil::WriteFSInfoRequest;
2432using UserlandFSUtil::WriteFSInfoReply;
2433// vnodes
2434using UserlandFSUtil::LookupRequest;
2435using UserlandFSUtil::LookupReply;
2436using UserlandFSUtil::GetVNodeNameRequest;
2437using UserlandFSUtil::GetVNodeNameReply;
2438using UserlandFSUtil::ReadVNodeRequest;
2439using UserlandFSUtil::ReadVNodeReply;
2440using UserlandFSUtil::WriteVNodeRequest;
2441using UserlandFSUtil::WriteVNodeReply;
2442using UserlandFSUtil::FSRemoveVNodeRequest;
2443using UserlandFSUtil::FSRemoveVNodeReply;
2444// asynchronous I/O
2445using UserlandFSUtil::DoIORequest;
2446using UserlandFSUtil::DoIOReply;
2447using UserlandFSUtil::CancelIORequest;
2448using UserlandFSUtil::CancelIOReply;
2449using UserlandFSUtil::IterativeIOGetVecsRequest;
2450using UserlandFSUtil::IterativeIOGetVecsReply;
2451using UserlandFSUtil::IterativeIOFinishedRequest;
2452using UserlandFSUtil::IterativeIOFinishedReply;
2453// nodes
2454using UserlandFSUtil::IOCtlRequest;
2455using UserlandFSUtil::IOCtlReply;
2456using UserlandFSUtil::SetFlagsRequest;
2457using UserlandFSUtil::SetFlagsReply;
2458using UserlandFSUtil::SelectRequest;
2459using UserlandFSUtil::SelectReply;
2460using UserlandFSUtil::DeselectRequest;
2461using UserlandFSUtil::DeselectReply;
2462using UserlandFSUtil::FSyncRequest;
2463using UserlandFSUtil::FSyncReply;
2464using UserlandFSUtil::ReadSymlinkRequest;
2465using UserlandFSUtil::ReadSymlinkReply;
2466using UserlandFSUtil::CreateSymlinkRequest;
2467using UserlandFSUtil::CreateSymlinkReply;
2468using UserlandFSUtil::LinkRequest;
2469using UserlandFSUtil::LinkReply;
2470using UserlandFSUtil::UnlinkRequest;
2471using UserlandFSUtil::UnlinkReply;
2472using UserlandFSUtil::RenameRequest;
2473using UserlandFSUtil::RenameReply;
2474using UserlandFSUtil::AccessRequest;
2475using UserlandFSUtil::AccessReply;
2476using UserlandFSUtil::ReadStatRequest;
2477using UserlandFSUtil::ReadStatReply;
2478using UserlandFSUtil::WriteStatRequest;
2479using UserlandFSUtil::WriteStatReply;
2480// files
2481using UserlandFSUtil::CreateRequest;
2482using UserlandFSUtil::CreateReply;
2483using UserlandFSUtil::OpenRequest;
2484using UserlandFSUtil::OpenReply;
2485using UserlandFSUtil::CloseRequest;
2486using UserlandFSUtil::CloseReply;
2487using UserlandFSUtil::FreeCookieRequest;
2488using UserlandFSUtil::FreeCookieReply;
2489using UserlandFSUtil::ReadRequest;
2490using UserlandFSUtil::ReadReply;
2491using UserlandFSUtil::WriteRequest;
2492using UserlandFSUtil::WriteReply;
2493// directories
2494using UserlandFSUtil::CreateDirRequest;
2495using UserlandFSUtil::CreateDirReply;
2496using UserlandFSUtil::RemoveDirRequest;
2497using UserlandFSUtil::RemoveDirReply;
2498using UserlandFSUtil::OpenDirRequest;
2499using UserlandFSUtil::OpenDirReply;
2500using UserlandFSUtil::CloseDirRequest;
2501using UserlandFSUtil::CloseDirReply;
2502using UserlandFSUtil::FreeDirCookieRequest;
2503using UserlandFSUtil::FreeDirCookieReply;
2504using UserlandFSUtil::ReadDirRequest;
2505using UserlandFSUtil::ReadDirReply;
2506using UserlandFSUtil::RewindDirRequest;
2507using UserlandFSUtil::RewindDirReply;
2508// attribute directories
2509using UserlandFSUtil::OpenAttrDirRequest;
2510using UserlandFSUtil::OpenAttrDirReply;
2511using UserlandFSUtil::CloseAttrDirRequest;
2512using UserlandFSUtil::CloseAttrDirReply;
2513using UserlandFSUtil::FreeAttrDirCookieRequest;
2514using UserlandFSUtil::FreeAttrDirCookieReply;
2515using UserlandFSUtil::ReadAttrDirRequest;
2516using UserlandFSUtil::ReadAttrDirReply;
2517using UserlandFSUtil::RewindAttrDirRequest;
2518using UserlandFSUtil::RewindAttrDirReply;
2519// attributes
2520using UserlandFSUtil::CreateAttrRequest;
2521using UserlandFSUtil::CreateAttrReply;
2522using UserlandFSUtil::OpenAttrRequest;
2523using UserlandFSUtil::OpenAttrReply;
2524using UserlandFSUtil::CloseAttrRequest;
2525using UserlandFSUtil::CloseAttrReply;
2526using UserlandFSUtil::FreeAttrCookieRequest;
2527using UserlandFSUtil::FreeAttrCookieReply;
2528using UserlandFSUtil::ReadAttrRequest;
2529using UserlandFSUtil::ReadAttrReply;
2530using UserlandFSUtil::WriteAttrRequest;
2531using UserlandFSUtil::WriteAttrReply;
2532using UserlandFSUtil::ReadAttrStatRequest;
2533using UserlandFSUtil::ReadAttrStatReply;
2534using UserlandFSUtil::WriteAttrStatRequest;
2535using UserlandFSUtil::WriteAttrStatReply;
2536using UserlandFSUtil::RenameAttrRequest;
2537using UserlandFSUtil::RenameAttrReply;
2538using UserlandFSUtil::RemoveAttrRequest;
2539using UserlandFSUtil::RemoveAttrReply;
2540// indices
2541using UserlandFSUtil::OpenIndexDirRequest;
2542using UserlandFSUtil::OpenIndexDirReply;
2543using UserlandFSUtil::CloseIndexDirRequest;
2544using UserlandFSUtil::CloseIndexDirReply;
2545using UserlandFSUtil::FreeIndexDirCookieRequest;
2546using UserlandFSUtil::FreeIndexDirCookieReply;
2547using UserlandFSUtil::ReadIndexDirRequest;
2548using UserlandFSUtil::ReadIndexDirReply;
2549using UserlandFSUtil::RewindIndexDirRequest;
2550using UserlandFSUtil::RewindIndexDirReply;
2551using UserlandFSUtil::CreateIndexRequest;
2552using UserlandFSUtil::CreateIndexReply;
2553using UserlandFSUtil::RemoveIndexRequest;
2554using UserlandFSUtil::RemoveIndexReply;
2555using UserlandFSUtil::ReadIndexStatRequest;
2556using UserlandFSUtil::ReadIndexStatReply;
2557// queries
2558using UserlandFSUtil::OpenQueryRequest;
2559using UserlandFSUtil::OpenQueryReply;
2560using UserlandFSUtil::CloseQueryRequest;
2561using UserlandFSUtil::CloseQueryReply;
2562using UserlandFSUtil::FreeQueryCookieRequest;
2563using UserlandFSUtil::FreeQueryCookieReply;
2564using UserlandFSUtil::ReadQueryRequest;
2565using UserlandFSUtil::ReadQueryReply;
2566using UserlandFSUtil::RewindQueryRequest;
2567using UserlandFSUtil::RewindQueryReply;
2568// node monitoring
2569using UserlandFSUtil::NodeMonitoringEventRequest;
2570using UserlandFSUtil::NodeMonitoringEventReply;
2571
2572// userland -> kernel requests
2573// notifications
2574using UserlandFSUtil::NotifyListenerRequest;
2575using UserlandFSUtil::NotifyListenerReply;
2576using UserlandFSUtil::NotifySelectEventRequest;
2577using UserlandFSUtil::NotifySelectEventReply;
2578using UserlandFSUtil::NotifyQueryRequest;
2579using UserlandFSUtil::NotifyQueryReply;
2580// vnodes
2581using UserlandFSUtil::GetVNodeRequest;
2582using UserlandFSUtil::GetVNodeReply;
2583using UserlandFSUtil::PutVNodeRequest;
2584using UserlandFSUtil::PutVNodeReply;
2585using UserlandFSUtil::AcquireVNodeRequest;
2586using UserlandFSUtil::AcquireVNodeReply;
2587using UserlandFSUtil::NewVNodeRequest;
2588using UserlandFSUtil::NewVNodeReply;
2589using UserlandFSUtil::PublishVNodeRequest;
2590using UserlandFSUtil::PublishVNodeReply;
2591using UserlandFSUtil::RemoveVNodeRequest;
2592using UserlandFSUtil::RemoveVNodeReply;
2593using UserlandFSUtil::UnremoveVNodeRequest;
2594using UserlandFSUtil::UnremoveVNodeReply;
2595using UserlandFSUtil::GetVNodeRemovedRequest;
2596using UserlandFSUtil::GetVNodeRemovedReply;
2597// file cache
2598using UserlandFSUtil::FileCacheCreateRequest;
2599using UserlandFSUtil::FileCacheCreateReply;
2600using UserlandFSUtil::FileCacheDeleteRequest;
2601using UserlandFSUtil::FileCacheDeleteReply;
2602using UserlandFSUtil::FileCacheSetEnabledRequest;
2603using UserlandFSUtil::FileCacheSetEnabledReply;
2604using UserlandFSUtil::FileCacheSetSizeRequest;
2605using UserlandFSUtil::FileCacheSetSizeReply;
2606using UserlandFSUtil::FileCacheSyncRequest;
2607using UserlandFSUtil::FileCacheSyncReply;
2608using UserlandFSUtil::FileCacheReadRequest;
2609using UserlandFSUtil::FileCacheReadReply;
2610using UserlandFSUtil::FileCacheWriteRequest;
2611using UserlandFSUtil::FileCacheWriteReply;
2612// I/O
2613using UserlandFSUtil::DoIterativeFDIORequest;
2614using UserlandFSUtil::DoIterativeFDIOReply;
2615using UserlandFSUtil::ReadFromIORequestRequest;
2616using UserlandFSUtil::ReadFromIORequestReply;
2617using UserlandFSUtil::WriteToIORequestRequest;
2618using UserlandFSUtil::WriteToIORequestReply;
2619using UserlandFSUtil::NotifyIORequestRequest;
2620using UserlandFSUtil::NotifyIORequestReply;
2621		// node monitoring
2622using UserlandFSUtil::AddNodeListenerRequest;
2623using UserlandFSUtil::AddNodeListenerReply;
2624using UserlandFSUtil::RemoveNodeListenerRequest;
2625using UserlandFSUtil::RemoveNodeListenerReply;
2626// general reply
2627using UserlandFSUtil::ReceiptAckReply;
2628
2629using UserlandFSUtil::do_for_request;
2630using UserlandFSUtil::get_request_address_infos;
2631using UserlandFSUtil::check_request;
2632using UserlandFSUtil::relocate_request;
2633
2634#endif	// USERLAND_FS_REQUESTS_H
2635