1.OPEN请求报文和应答报文中的数据
OPEN操作比较复杂,涉及到很多种特殊情况。按照RFC3530的规定,OPEN请求报文中需要包含下列数据:
struct OPEN4args {
seqid4 seqid; // 这是一个序号,保证请求能够序列化.
uint32_t share_access; // 这是用户请求的访问权限
uint32_t share_deny; // 一定不能有这些权限,Linux中固定设置为0.
open_owner4 owner; // clientid + 这次OPEN操作的名称.
openflag4 openhow; // 有两个取值:OPEN4_NOCREATE和OPEN4_CREATE
open_claim4 claim; // 有四个取值:CLAIM_NULL、CLAIM_PREVIOUS、CLAIM_DELEGATE_CUR、CLAIM_DELEGATE_PREV
};
owner包含两个字段:clientid和这次操作的名称, 服务器端可以根据clientid和OPEN操作的名称查找是否已经保存了这次操作的信息。seqid是OPEN操作的序号,保证多个OPEN操作序列化执行。share_access是用户打开文件时请求的访问权限,share_deny是为Windows share reservation设置的字段,Linux系统中这个字段固定为0。openhow表示如果文件不存在是否创建一个新文件。claim表示OPEN类型,按照按照claim值不同,OPEN操作分为四种类型。这篇文>章中,我们只讲解最常见的一种情况:打开服务器端存在的一个文件。这种请求中claim的类型是CLAIM_NULL。这种情况下,open_claim4中还包含了文件的名>称,这是我们要打开的文件。
按照RFC3530的规定,OPEN操作应答报文包含下列内容
struct OPEN4resok {
stateid4 stateid; /* Stateid for open */
change_info4 cinfo;

本文主要探讨了NFS协议中的OPEN请求与应答报文,包括OPEN操作的数据字段,如clientid、seqid、share_access等。介绍了OPEN的四种类型,重点关注CLAIM_NULL情况下的文件打开。同时,详细阐述了OPEN应答报文的内容,如OPEN4_RESULT_CONFIRM、OPEN_DELEGATE_READ和OPEN_DELEGATE_WRITE,并说明了Linux系统对此的支持情况。最后提到了客户端如何设置OPEN请求报文的函数nfs4_opendata_alloc()。
&spm=1001.2101.3001.5002&articleId=8570455&d=1&t=3&u=1275ee705dc94eeeb8ad5fc16d72f9c9)
2577

被折叠的 条评论
为什么被折叠?



