2. RPC Information (RPC 信息)
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
- 服务器启动了检索过程, 但尚未完成. 客户端应该在延迟后重试请求.