Skip to main content

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

  • 服务器启动了检索过程,但尚未完成。客户端应该在延迟后重试请求。