2. RPC 信息 (RPC Information)
2.1 认证 (Authentication)
NFS 服务在 NULL 过程中使用 AUTH_NONE。所有其他过程使用 AUTH_UNIX、AUTH_DES 或 AUTH_KERB。未来可能支持其他认证类型。
2.2 常量 (Constants)
以下是调用 NFS 版本 3 服务所需的 RPC 常量。它们以十进制形式给出。
PROGRAM 100003
VERSION 3
2.3 传输地址 (Transport address)
NFS 协议通常在 TCP 和 UDP 协议上受支持。它使用端口 2049,与 NFS 版本 2 协议相同。
2.4 大小 (Sizes)
以下是 NFS 版本 3 协议中使用的各种 XDR 结构的大小,以十进制字节为单位:
NFS3_FHSIZE 64
- 不透明文件句柄 (file handle) 的最大大小(字节)。
NFS3_COOKIEVERFSIZE 8
- READDIR 和 READDIRPLUS 传递的不透明 cookie 验证器的大小(字节)。
NFS3_CREATEVERFSIZE 8
- 用于独占 CREATE 的不透明验证器的大小(字节)。
NFS3_WRITEVERFSIZE 8
- 用于异步 WRITE 的不透明验证器的大小(字节)。
2.5 基本数据类型 (Basic Data Types)
以下 XDR 定义是在其他结构中使用的基本定义。
uint64
typedef unsigned hyper uint64;
int64
typedef hyper int64;
uint32
typedef unsigned long uint32;
int32
typedef long int32;
filename3
typedef string filename3<>;
nfspath3
typedef string nfspath3<>;
fileid3
typedef uint64 fileid3;
cookie3
typedef uint64 cookie3;
cookieverf3
typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
createverf3
typedef opaque createverf3[NFS3_CREATEVERFSIZE];
writeverf3
typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
uid3
typedef uint32 uid3;
gid3
typedef uint32 gid3;
size3
typedef uint64 size3;
offset3
typedef uint64 offset3;
mode3
typedef uint32 mode3;
count3
typedef uint32 count3;
nfsstat3
enum nfsstat3 {
NFS3_OK = 0,
NFS3ERR_PERM = 1,
NFS3ERR_NOENT = 2,
NFS3ERR_IO = 5,
NFS3ERR_NXIO = 6,
NFS3ERR_ACCES = 13,
NFS3ERR_EXIST = 17,
NFS3ERR_XDEV = 18,
NFS3ERR_NODEV = 19,
NFS3ERR_NOTDIR = 20,
NFS3ERR_ISDIR = 21,
NFS3ERR_INVAL = 22,
NFS3ERR_FBIG = 27,
NFS3ERR_NOSPC = 28,
NFS3ERR_ROFS = 30,
NFS3ERR_MLINK = 31,
NFS3ERR_NAMETOOLONG = 63,
NFS3ERR_NOTEMPTY = 66,
NFS3ERR_DQUOT = 69,
NFS3ERR_STALE = 70,
NFS3ERR_REMOTE = 71,
NFS3ERR_BADHANDLE = 10001,
NFS3ERR_NOT_SYNC = 10002,
NFS3ERR_BAD_COOKIE = 10003,
NFS3ERR_NOTSUPP = 10004,
NFS3ERR_TOOSMALL = 10005,
NFS3ERR_SERVERFAULT = 10006,
NFS3ERR_BADTYPE = 10007,
NFS3ERR_JUKEBOX = 10008
};
2.6 定义的错误号 (Defined Error Numbers)
NFS3_OK = 0
- 表示调用成功完成,服务器承诺执行了与该调用关联的所有语义。
NFS3ERR_PERM = 1
- 不允许操作。
NFS3ERR_NOENT = 2
- 没有这样的文件或目录。指定的文件或目录不存在。
NFS3ERR_IO = 5
- 某种形式的硬件 I/O 错误发生。
NFS3ERR_NXIO = 6
- 没有这样的设备或地址。
NFS3ERR_ACCES = 13
- 权限被拒绝。调用者没有正确的权限来执行请求的操作。
NFS3ERR_EXIST = 17
- 文件已存在。
NFS3ERR_XDEV = 18
- 尝试跨设备硬链接。
NFS3ERR_NODEV = 19
- 没有这样的设备。
NFS3ERR_NOTDIR = 20
- 不是目录。调用者指定了一个非目录,而需要一个目录。
NFS3ERR_ISDIR = 21
- 是目录。调用者指定了一个目录,而需要一个非目录对象。
NFS3ERR_INVAL = 22
- 无效的参数或不支持的参数用于操作。
NFS3ERR_FBIG = 27
- 文件太大。操作会导致文件增长超过服务器对文件大小的限制。
NFS3ERR_NOSPC = 28
- 设备上没有剩余空间。操作会导致服务器超出其对文件系统可用的存储空间的限制。
NFS3ERR_ROFS = 30
- 只读文件系统。尝试写入只读文件系统。
NFS3ERR_MLINK = 31
- 太多链接。
NFS3ERR_NAMETOOLONG = 63
- 文件名太长。返回的名称对于客户端来说太长了。
NFS3ERR_NOTEMPTY = 66
- 目录不为空。
NFS3ERR_DQUOT = 69
- 超出资源(配额)限制。
NFS3ERR_STALE = 70
- 无效的文件句柄。服务器收到的文件句柄无效。
NFS3ERR_REMOTE = 71
- 对象是远程的。
NFS3ERR_BADHANDLE = 10001
- 非法 NFS 文件句柄。服务器无法解释文件句柄。
NFS3ERR_NOT_SYNC = 10002
- SETATTR 上的更新同步不匹配。
NFS3ERR_BAD_COOKIE = 10003
- READDIR 或 READDIRPLUS cookie 无效。
NFS3ERR_NOTSUPP = 10004
- 不支持操作。
NFS3ERR_TOOSMALL = 10005
- 缓冲区或请求太小。
NFS3ERR_SERVERFAULT = 10006
- 服务器出错。服务器遇到了错误。此错误应该在临时错误情况下使用,其中用户可以重试请求。
NFS3ERR_BADTYPE = 10007
- 对象类型不正确。
NFS3ERR_JUKEBOX = 10008
- 服务器启动了检索过程,但尚未完成。客户端应该在延迟后重试请求。