Found wdiff, but it reported no recognisable version. Falling back to builtin diff colouring...
draft-20-pre-ch3.txt | draft-ietf-nfsv4-minorversion1-20.txt | |||
---|---|---|---|---|
NFSv4 S. Shepler | NFSv4 S. Shepler | |||
Internet-Draft M. Eisler | Internet-Draft M. Eisler | |||
Intended status: Standards Track D. Noveck | Intended status: Standards Track D. Noveck | |||
Expires: August 22, 2008 Editors | Expires: August 23, 2008 Editors | |||
February 19, 2008 | February 20, 2008 | |||
NFS Version 4 Minor Version 1 | NFS Version 4 Minor Version 1 | |||
draft-ietf-nfsv4-minorversion1-20.txt | draft-ietf-nfsv4-minorversion1-20.txt | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
skipping to change at page 1, line 35 | skipping to change at page 1, line 35 | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on August 22, 2008. | This Internet-Draft will expire on August 23, 2008. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The IETF Trust (2008). | Copyright (C) The IETF Trust (2008). | |||
Abstract | Abstract | |||
This Internet-Draft describes NFS version 4 minor version one, | This Internet-Draft describes NFS version 4 minor version one, | |||
including features retained from the base protocol and protocol | including features retained from the base protocol and protocol | |||
extensions made subsequently. Major extensions introduced in NFS | extensions made subsequently. Major extensions introduced in NFS | |||
skipping to change at page 3, line 21 | skipping to change at page 3, line 21 | |||
2.10.11. Parallel NFS and Sessions . . . . . . . . . . . . . 75 | 2.10.11. Parallel NFS and Sessions . . . . . . . . . . . . . 75 | |||
3. Protocol Constants and Data Types . . . . . . . . . . . . . . 76 | 3. Protocol Constants and Data Types . . . . . . . . . . . . . . 76 | |||
3.1. Basic Constants . . . . . . . . . . . . . . . . . . . . 76 | 3.1. Basic Constants . . . . . . . . . . . . . . . . . . . . 76 | |||
3.2. Basic Data Types . . . . . . . . . . . . . . . . . . . . 77 | 3.2. Basic Data Types . . . . . . . . . . . . . . . . . . . . 77 | |||
3.3. Structured Data Types . . . . . . . . . . . . . . . . . 78 | 3.3. Structured Data Types . . . . . . . . . . . . . . . . . 78 | |||
4. Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . 88 | 4. Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . 88 | |||
4.1. Obtaining the First Filehandle . . . . . . . . . . . . . 88 | 4.1. Obtaining the First Filehandle . . . . . . . . . . . . . 88 | |||
4.1.1. Root Filehandle . . . . . . . . . . . . . . . . . . 88 | 4.1.1. Root Filehandle . . . . . . . . . . . . . . . . . . 88 | |||
4.1.2. Public Filehandle . . . . . . . . . . . . . . . . . 89 | 4.1.2. Public Filehandle . . . . . . . . . . . . . . . . . 89 | |||
4.2. Filehandle Types . . . . . . . . . . . . . . . . . . . . 89 | 4.2. Filehandle Types . . . . . . . . . . . . . . . . . . . . 89 | |||
4.2.1. General Properties of a Filehandle . . . . . . . . . 89 | 4.2.1. General Properties of a Filehandle . . . . . . . . . 90 | |||
4.2.2. Persistent Filehandle . . . . . . . . . . . . . . . 90 | 4.2.2. Persistent Filehandle . . . . . . . . . . . . . . . 90 | |||
4.2.3. Volatile Filehandle . . . . . . . . . . . . . . . . 90 | 4.2.3. Volatile Filehandle . . . . . . . . . . . . . . . . 91 | |||
4.3. One Method of Constructing a Volatile Filehandle . . . . 92 | 4.3. One Method of Constructing a Volatile Filehandle . . . . 92 | |||
4.4. Client Recovery from Filehandle Expiration . . . . . . . 92 | 4.4. Client Recovery from Filehandle Expiration . . . . . . . 92 | |||
5. File Attributes . . . . . . . . . . . . . . . . . . . . . . . 93 | 5. File Attributes . . . . . . . . . . . . . . . . . . . . . . . 93 | |||
5.1. REQUIRED Attributes . . . . . . . . . . . . . . . . . . 94 | 5.1. REQUIRED Attributes . . . . . . . . . . . . . . . . . . 95 | |||
5.2. RECOMMENDED Attributes . . . . . . . . . . . . . . . . . 95 | 5.2. RECOMMENDED Attributes . . . . . . . . . . . . . . . . . 95 | |||
5.3. Named Attributes . . . . . . . . . . . . . . . . . . . . 95 | 5.3. Named Attributes . . . . . . . . . . . . . . . . . . . . 95 | |||
5.4. Classification of Attributes . . . . . . . . . . . . . . 97 | 5.4. Classification of Attributes . . . . . . . . . . . . . . 97 | |||
5.5. REQUIRED Attributes - List and Definition References . . 98 | 5.5. REQUIRED Attributes - List and Definition References . . 98 | |||
5.6. RECOMMENDED Attributes - List and Definition | 5.6. RECOMMENDED Attributes - List and Definition | |||
References . . . . . . . . . . . . . . . . . . . . . . . 98 | References . . . . . . . . . . . . . . . . . . . . . . . 98 | |||
5.7. Attribute Definitions . . . . . . . . . . . . . . . . . 100 | 5.7. Attribute Definitions . . . . . . . . . . . . . . . . . 100 | |||
5.7.1. Definitions of REQUIRED Attributes . . . . . . . . . 100 | 5.7.1. Definitions of REQUIRED Attributes . . . . . . . . . 100 | |||
5.7.2. Definitions of Uncategorized RECOMMENDED | 5.7.2. Definitions of Uncategorized RECOMMENDED | |||
Attributes . . . . . . . . . . . . . . . . . . . . . 102 | Attributes . . . . . . . . . . . . . . . . . . . . . 102 | |||
skipping to change at page 77, line 21 | skipping to change at page 77, line 21 | |||
These are the base NFSv4.1 data types. | These are the base NFSv4.1 data types. | |||
+---------------+---------------------------------------------------+ | +---------------+---------------------------------------------------+ | |||
| Data Type | Definition | | | Data Type | Definition | | |||
+---------------+---------------------------------------------------+ | +---------------+---------------------------------------------------+ | |||
| int32_t | typedef int int32_t; | | | int32_t | typedef int int32_t; | | |||
| uint32_t | typedef unsigned int uint32_t; | | | uint32_t | typedef unsigned int uint32_t; | | |||
| int64_t | typedef hyper int64_t; | | | int64_t | typedef hyper int64_t; | | |||
| uint64_t | typedef unsigned hyper uint64_t; | | | uint64_t | typedef unsigned hyper uint64_t; | | |||
| attrlist4 | typedef opaque attrlist4<>; | | | attrlist4 | typedef opaque attrlist4<>; | | |||
| | Used for file/directory attributes | | | | Used for file/directory attributes. | | |||
| bitmap4 | typedef uint32_t bitmap4<>; | | | bitmap4 | typedef uint32_t bitmap4<>; | | |||
| | Used in attribute array encoding. | | | | Used in attribute array encoding. | | |||
| changeid4 | typedef uint64_t changeid4; | | | changeid4 | typedef uint64_t changeid4; | | |||
| | Used in definition of change_info | | | | Used in the definition of change_info4. | | |||
| clientid4 | typedef uint64_t clientid4; | | | clientid4 | typedef uint64_t clientid4; | | |||
| | Shorthand reference to client identification | | | | Shorthand reference to client identification. | | |||
| count4 | typedef uint32_t count4; | | | count4 | typedef uint32_t count4; | | |||
| | Various count parameters (READ, WRITE, COMMIT) | | | | Various count parameters (READ, WRITE, COMMIT). | | |||
| length4 | typedef uint64_t length4; | | | length4 | typedef uint64_t length4; | | |||
| | Describes LOCK lengths | | | | Describes LOCK lengths. | | |||
| mode4 | typedef uint32_t mode4; | | | mode4 | typedef uint32_t mode4; | | |||
| | Mode attribute data type | | | | Mode attribute data type. | | |||
| nfs_cookie4 | typedef uint64_t nfs_cookie4; | | | nfs_cookie4 | typedef uint64_t nfs_cookie4; | | |||
| | Opaque cookie value for READDIR | | | | Opaque cookie value for READDIR. | | |||
| nfs_fh4 | typedef opaque nfs_fh4<NFS4_FHSIZE>; | | | nfs_fh4 | typedef opaque nfs_fh4<NFS4_FHSIZE>; | | |||
| | Filehandle definition | | | | Filehandle definition. | | |||
| nfs_ftype4 | enum nfs_ftype4; | | | nfs_ftype4 | enum nfs_ftype4; | | |||
| | Various defined file types | | | | Various defined file types. | | |||
| nfsstat4 | enum nfsstat4; | | | nfsstat4 | enum nfsstat4; | | |||
| | Return value for operations | | | | Return value for operations. | | |||
| offset4 | typedef uint64_t offset4; | | | offset4 | typedef uint64_t offset4; | | |||
| | Various offset designations (READ, WRITE, LOCK, | | | | Various offset designations (READ, WRITE, LOCK, | | |||
| | COMMIT) | | | | COMMIT). | | |||
| qop4 | typedef uint32_t qop4; | | | qop4 | typedef uint32_t qop4; | | |||
| | Quality of protection designation in SECINFO | | | | Quality of protection designation in SECINFO. | | |||
| sec_oid4 | typedef opaque sec_oid4<>; | | | sec_oid4 | typedef opaque sec_oid4<>; | | |||
| | Security Object Identifier. The sec_oid4 data | | | | Security Object Identifier. The sec_oid4 data | | |||
| | type is not really opaque. Instead it contains an | | | | type is not really opaque. Instead it contains an | | |||
| | ASN.1 OBJECT IDENTIFIER as used by GSS-API in the | | | | ASN.1 OBJECT IDENTIFIER as used by GSS-API in the | | |||
| | mech_type argument to GSS_Init_sec_context. See | | | | mech_type argument to GSS_Init_sec_context. See | | |||
| | [7] for details. | | | | [7] for details. | | |||
| sequenceid4 | typedef uint32_t sequenceid4; | | | sequenceid4 | typedef uint32_t sequenceid4; | | |||
| | sequence number used for various session | | | | Sequence number used for various session | | |||
| | operations (EXCHANGE_ID, CREATE_SESSION, | | | | operations (EXCHANGE_ID, CREATE_SESSION, | | |||
| | SEQUENCE, CB_SEQUENCE). | | | | SEQUENCE, CB_SEQUENCE). | | |||
| seqid4 | typedef uint32_t seqid4; | | | seqid4 | typedef uint32_t seqid4; | | |||
| | Sequence identifier used for file locking | | | | Sequence identifier used for file locking. | | |||
| sessionid4 | typedef opaque sessionid4[NFS4_SESSIONID_SIZE]; | | | sessionid4 | typedef opaque sessionid4[NFS4_SESSIONID_SIZE]; | | |||
| | Session identifier | | | | Session identifier. | | |||
| slotid4 | typedef uint32_t slotid4; | | | slotid4 | typedef uint32_t slotid4; | | |||
| | sequencing artifact for various session | | | | Sequencing artifact for various session | | |||
| | operations (SEQUENCE, CB_SEQUENCE). | | | | operations (SEQUENCE, CB_SEQUENCE). | | |||
| utf8string | typedef opaque utf8string<>; | | | utf8string | typedef opaque utf8string<>; | | |||
| | UTF-8 encoding for strings | | | | UTF-8 encoding for strings. | | |||
| utf8str_cis | typedef utf8string utf8str_cis; | | | utf8str_cis | typedef utf8string utf8str_cis; | | |||
| | Case-insensitive UTF-8 string | | | | Case-insensitive UTF-8 string. | | |||
| utf8str_cs | typedef utf8string utf8str_cs; | | | utf8str_cs | typedef utf8string utf8str_cs; | | |||
| | Case-sensitive UTF-8 string | | | | Case-sensitive UTF-8 string. | | |||
| utf8str_mixed | typedef utf8string utf8str_mixed; | | | utf8str_mixed | typedef utf8string utf8str_mixed; | | |||
| | UTF-8 strings with a case sensitive prefix and a | | | | UTF-8 strings with a case sensitive prefix and a | | |||
| | case insensitive suffix. | | | | case insensitive suffix. | | |||
| component4 | typedef utf8str_cs component4; | | | component4 | typedef utf8str_cs component4; | | |||
| | Represents path name components | | | | Represents path name components. | | |||
| linktext4 | typedef utf8str_cs linktext4; | | | linktext4 | typedef utf8str_cs linktext4; | | |||
| | Symbolic link contents | | | | Symbolic link contents. | | |||
| pathname4 | typedef component4 pathname4<>; | | | pathname4 | typedef component4 pathname4<>; | | |||
| | Represents path name for fs_locations | | | | Represents path name for fs_locations. | | |||
| verifier4 | typedef opaque verifier4[NFS4_VERIFIER_SIZE]; | | | verifier4 | typedef opaque verifier4[NFS4_VERIFIER_SIZE]; | | |||
| | Verifier used for various operations (COMMIT, | | | | Verifier used for various operations (COMMIT, | | |||
| | CREATE, EXCHANGE_ID, OPEN, READDIR, WRITE) | | | | CREATE, EXCHANGE_ID, OPEN, READDIR, WRITE) | | |||
| | NFS4_VERIFIER_SIZE is defined as 8. | | | | NFS4_VERIFIER_SIZE is defined as 8. | | |||
+---------------+---------------------------------------------------+ | +---------------+---------------------------------------------------+ | |||
End of Base Data Types | End of Base Data Types | |||
Table 1 | Table 1 | |||
3.3. Structured Data Types | 3.3. Structured Data Types | |||
3.3.1. nfstime4 | 3.3.1. nfstime4 | |||
struct nfstime4 { | struct nfstime4 { | |||
int64_t seconds; | int64_t seconds; | |||
uint32_t nseconds; | uint32_t nseconds; | |||
}; | }; | |||
The nfstime4 structure gives the number of seconds and nanoseconds | The nfstime4 data type gives the number of seconds and nanoseconds | |||
since midnight or 0 hour January 1, 1970 Coordinated Universal Time | since midnight or 0 hour January 1, 1970 Coordinated Universal Time | |||
(UTC). Values greater than zero for the seconds field denote dates | (UTC). Values greater than zero for the seconds field denote dates | |||
after the 0 hour January 1, 1970. Values less than zero for the | after the 0 hour January 1, 1970. Values less than zero for the | |||
seconds field denote dates before the 0 hour January 1, 1970. In | seconds field denote dates before the 0 hour January 1, 1970. In | |||
both cases, the nseconds field is to be added to the seconds field | both cases, the nseconds field is to be added to the seconds field | |||
for the final time representation. For example, if the time to be | for the final time representation. For example, if the time to be | |||
represented is one-half second before 0 hour January 1, 1970, the | represented is one-half second before 0 hour January 1, 1970, the | |||
seconds field would have a value of negative one (-1) and the | seconds field would have a value of negative one (-1) and the | |||
nseconds fields would have a value of one-half second (500000000). | nseconds fields would have a value of one-half second (500000000). | |||
Values greater than 999,999,999 for nseconds are considered invalid. | Values greater than 999,999,999 for nseconds are invalid. | |||
This data type is used to pass time and date information. A server | This data type is used to pass time and date information. A server | |||
converts to and from its local representation of time when processing | converts to and from its local representation of time when processing | |||
time values, preserving as much accuracy as possible. If the | time values, preserving as much accuracy as possible. If the | |||
precision of timestamps stored for a file system object is less than | precision of timestamps stored for a file system object is less than | |||
defined, loss of precision can occur. An adjunct time maintenance | defined, loss of precision can occur. An adjunct time maintenance | |||
protocol is RECOMMENDED to reduce client and server time skew. | protocol is RECOMMENDED to reduce client and server time skew. | |||
3.3.2. time_how4 | 3.3.2. time_how4 | |||
skipping to change at page 79, line 36 | skipping to change at page 79, line 36 | |||
3.3.3. settime4 | 3.3.3. settime4 | |||
union settime4 switch (time_how4 set_it) { | union settime4 switch (time_how4 set_it) { | |||
case SET_TO_CLIENT_TIME4: | case SET_TO_CLIENT_TIME4: | |||
nfstime4 time; | nfstime4 time; | |||
default: | default: | |||
void; | void; | |||
}; | }; | |||
The above definitions are used as the attribute definitions to set | The time_how4 and settime4 data types are used for setting timestamps | |||
time values. If set_it is SET_TO_SERVER_TIME4, then the server uses | in file object attributes. If set_it is SET_TO_SERVER_TIME4, then | |||
its local representation of time for the time value. | the server uses its local representation of time for the time value. | |||
3.3.4. specdata4 | 3.3.4. specdata4 | |||
struct specdata4 { | struct specdata4 { | |||
uint32_t specdata1; /* major device number */ | uint32_t specdata1; /* major device number */ | |||
uint32_t specdata2; /* minor device number */ | uint32_t specdata2; /* minor device number */ | |||
}; | }; | |||
This data type represents additional information for the device file | This data type represents the device numbers for the device file | |||
types NF4CHR and NF4BLK. | types NF4CHR and NF4BLK. | |||
3.3.5. fsid4 | 3.3.5. fsid4 | |||
struct fsid4 { | struct fsid4 { | |||
uint64_t major; | uint64_t major; | |||
uint64_t minor; | uint64_t minor; | |||
}; | }; | |||
3.3.6. chg_policy4 | 3.3.6. chg_policy4 | |||
skipping to change at page 80, line 34 | skipping to change at page 80, line 34 | |||
id and the second to be incremented non-persistently, within a given | id and the second to be incremented non-persistently, within a given | |||
server instance. | server instance. | |||
3.3.7. fattr4 | 3.3.7. fattr4 | |||
struct fattr4 { | struct fattr4 { | |||
bitmap4 attrmask; | bitmap4 attrmask; | |||
attrlist4 attr_vals; | attrlist4 attr_vals; | |||
}; | }; | |||
The fattr4 structure is used to represent file and directory | The fattr4 data type is used to represent file and directory | |||
attributes. | attributes. | |||
The bitmap is a counted array of 32 bit integers used to contain bit | The bitmap is a counted array of 32 bit integers used to contain bit | |||
values. The position of the integer in the array that contains bit n | values. The position of the integer in the array that contains bit n | |||
can be computed from the expression (n / 32) and its bit within that | can be computed from the expression (n / 32) and its bit within that | |||
integer is (n mod 32). | integer is (n mod 32). | |||
0 1 | 0 1 | |||
+-----------+-----------+-----------+-- | +-----------+-----------+-----------+-- | |||
| count | 31 .. 0 | 63 .. 32 | | | count | 31 .. 0 | 63 .. 32 | | |||
+-----------+-----------+-----------+-- | +-----------+-----------+-----------+-- | |||
3.3.8. change_info4 | 3.3.8. change_info4 | |||
struct change_info4 { | struct change_info4 { | |||
bool atomic; | bool atomic; | |||
changeid4 before; | changeid4 before; | |||
changeid4 after; | changeid4 after; | |||
}; | }; | |||
This structure is used with the CREATE, LINK, REMOVE, RENAME | This data type is used with the CREATE, LINK, OPEN, REMOVE, and | |||
operations to let the client know the value of the change attribute | RENAME operations to let the client know the value of the change | |||
for the directory in which the target file system object resides. | attribute for the directory in which the target file system object | |||
resides. | ||||
3.3.9. netaddr4 | 3.3.9. netaddr4 | |||
struct netaddr4 { | struct netaddr4 { | |||
/* see struct rpcb in RFC 1833 */ | /* see struct rpcb in RFC 1833 */ | |||
string na_r_netid<>; /* network id */ | string na_r_netid<>; /* network id */ | |||
string na_r_addr<>; /* universal address */ | string na_r_addr<>; /* universal address */ | |||
}; | }; | |||
The netaddr4 structure is used to identify TCP/IP based endpoints. | The netaddr4 data type is used to identify TCP/IP based endpoints. | |||
The r_netid and r_addr fields are specified in RFC1833 [26], but they | The r_netid and r_addr fields are specified in RFC1833 [26], but they | |||
are underspecified in RFC1833 [26] as far as what they should look | are underspecified in RFC1833 [26] as far as what they should look | |||
like for specific protocols. | like for specific protocols. The next section clarifies this. | |||
3.3.9.1. Format of netaddr4 for TCP and UDP over IPv4 | 3.3.9.1. Format of netaddr4 for TCP and UDP over IPv4 | |||
For TCP over IPv4 and for UDP over IPv4, the format of r_addr is the | For TCP over IPv4 and for UDP over IPv4, the format of r_addr is the | |||
US-ASCII string: | US-ASCII string: | |||
h1.h2.h3.h4.p1.p2 | h1.h2.h3.h4.p1.p2 | |||
The prefix, "h1.h2.h3.h4", is the standard textual form for | The prefix, "h1.h2.h3.h4", is the standard textual form for | |||
representing an IPv4 address, which is always four bytes long. | representing an IPv4 address, which is always four bytes long. | |||
Assuming big-endian ordering, h1, h2, h3, and h4, are respectively, | Assuming big-endian ordering, h1, h2, h3, and h4, are respectively, | |||
the first through fourth bytes each converted to ASCII-decimal. | the first through fourth bytes each converted to ASCII-decimal. The | |||
Assuming big-endian ordering, p1 and p2 are, respectively, the first | suffix, "p1.p2", is a textual form for representing a TCP and UDP | |||
and second bytes each converted to ASCII-decimal. For example, if a | service port. Assuming big-endian ordering, p1 and p2 are, | |||
host, in big-endian order, has an address of 0x0A010307 and there is | respectively, the first and second bytes each converted to ASCII- | |||
a service listening on, in big endian order, port 0x020F (decimal | decimal. For example, if a host, in big-endian order, has an address | |||
527), then complete universal address is "10.1.3.7.2.15". | of 0x0A010307 and there is a service listening on, in big endian | |||
order, port 0x020F (decimal 527), then the complete universal address | ||||
is "10.1.3.7.2.15". | ||||
For TCP over IPv4 the value of r_netid is the string "tcp". For UDP | For TCP over IPv4 the value of r_netid is the string "tcp". For UDP | |||
over IPv4 the value of r_netid is the string "udp". That this | over IPv4 the value of r_netid is the string "udp". That this | |||
document specifies the universal address and netid for UDP/IPv6 does | document specifies the universal address and netid for UDP/IPv6 does | |||
not imply that UDP/IPv4 is a legal transport for NFSv4.1 (see | not imply that UDP/IPv4 is a legal transport for NFSv4.1 (see | |||
Section 2.9). | Section 2.9). | |||
3.3.9.2. Format of netaddr4 for TCP and UDP over IPv6 | 3.3.9.2. Format of netaddr4 for TCP and UDP over IPv6 | |||
For TCP over IPv6 and for UDP over IPv6, the format of r_addr is the | For TCP over IPv6 and for UDP over IPv6, the format of r_addr is the | |||
skipping to change at page 82, line 40 | skipping to change at page 82, line 42 | |||
}; | }; | |||
typedef state_owner4 open_owner4; | typedef state_owner4 open_owner4; | |||
typedef state_owner4 lock_owner4; | typedef state_owner4 lock_owner4; | |||
The state_owner4 data type is the base type for the open_owner4 | The state_owner4 data type is the base type for the open_owner4 | |||
Section 3.3.10.1 and lock_owner4 Section 3.3.10.2. | Section 3.3.10.1 and lock_owner4 Section 3.3.10.2. | |||
3.3.10.1. open_owner4 | 3.3.10.1. open_owner4 | |||
This structure is used to identify the owner of open state. | This data type is used to identify the owner of open state. | |||
3.3.10.2. lock_owner4 | 3.3.10.2. lock_owner4 | |||
This structure is used to identify the owner of file locking state. | This data type is used to identify the owner of file locking state. | |||
3.3.11. open_to_lock_owner4 | 3.3.11. open_to_lock_owner4 | |||
struct open_to_lock_owner4 { | struct open_to_lock_owner4 { | |||
seqid4 open_seqid; | seqid4 open_seqid; | |||
stateid4 open_stateid; | stateid4 open_stateid; | |||
seqid4 lock_seqid; | seqid4 lock_seqid; | |||
lock_owner4 lock_owner; | lock_owner4 lock_owner; | |||
}; | }; | |||
This structure is used for the first LOCK operation done for an | This data type is used for the first LOCK operation done for an | |||
open_owner4. It provides both the open_stateid and lock_owner such | open_owner4. It provides both the open_stateid and lock_owner such | |||
that the transition is made from a valid open_stateid sequence to | that the transition is made from a valid open_stateid sequence to | |||
that of the new lock_stateid sequence. Using this mechanism avoids | that of the new lock_stateid sequence. Using this mechanism avoids | |||
the confirmation of the lock_owner/lock_seqid pair since it is tied | the confirmation of the lock_owner/lock_seqid pair since it is tied | |||
to established state in the form of the open_stateid/open_seqid. | to established state in the form of the open_stateid/open_seqid. | |||
3.3.12. stateid4 | 3.3.12. stateid4 | |||
struct stateid4 { | struct stateid4 { | |||
uint32_t seqid; | uint32_t seqid; | |||
opaque other[12]; | opaque other[12]; | |||
}; | }; | |||
This structure is used for the various state sharing mechanisms | This data type is used for the various state sharing mechanisms | |||
between the client and server. For the client, this data structure | between the client and server. The client never modifies a value of | |||
is read-only. The starting value of the seqid field is undefined. | data type stateid. The starting value of the seqid field is | |||
The server is required to increment the seqid field monotonically at | undefined. The server is required to increment the seqid field by | |||
each transition of the stateid. This is important since the client | one (1) at each transition of the stateid. This is important since | |||
will inspect the seqid in OPEN stateids to determine the order of | the client will inspect the seqid in OPEN stateids to determine the | |||
OPEN processing done by the server. | order of OPEN processing done by the server. | |||
3.3.13. layouttype4 | 3.3.13. layouttype4 | |||
enum layouttype4 { | enum layouttype4 { | |||
LAYOUT4_NFSV4_1_FILES = 1, | LAYOUT4_NFSV4_1_FILES = 0x1, | |||
LAYOUT4_OSD2_OBJECTS = 2, | LAYOUT4_OSD2_OBJECTS = 0x2, | |||
LAYOUT4_BLOCK_VOLUME = 3 | LAYOUT4_BLOCK_VOLUME = 0x3 | |||
}; | }; | |||
This data type indicates what type of layout is being used. The file | This data type indicates what type of layout is being used. The file | |||
server advertises the layout types it supports through the | server advertises the layout types it supports through the | |||
fs_layout_type file system attribute (Section 5.11.1). A client asks | fs_layout_type file system attribute (Section 5.11.1). A client asks | |||
for layouts of a particular type in LAYOUTGET, and processes those | for layouts of a particular type in LAYOUTGET, and processes those | |||
layouts in its layout-type-specific logic. | layouts in its layout-type-specific logic. | |||
The layouttype4 structure is 32 bits in length. The range | The layouttype4 data type is 32 bits in length. The range | |||
represented by the layout type is split into three parts. Type 0x0 | represented by the layout type is split into three parts. Type 0x0 | |||
is reserved. Types within the range 0x00000001-0x7FFFFFFF are | is reserved. Types within the range 0x00000001-0x7FFFFFFF are | |||
globally unique and are assigned according to the description in | globally unique and are assigned according to the description in | |||
Section 22.4; they are maintained by IANA. Types within the range | Section 22.4; they are maintained by IANA. Types within the range | |||
0x80000000-0xFFFFFFFF are site specific and for "private use" only. | 0x80000000-0xFFFFFFFF are site specific and for private use only. | |||
The LAYOUT4_NFSV4_1_FILES enumeration specifies that the NFSv4.1 file | The LAYOUT4_NFSV4_1_FILES enumeration specifies that the NFSv4.1 file | |||
layout type is to be used. The LAYOUT4_OSD2_OBJECTS enumeration | layout type, as defined in Section 13, is to be used. The | |||
specifies that the object layout, as defined in [30], is to be used. | LAYOUT4_OSD2_OBJECTS enumeration specifies that the object layout, as | |||
Similarly, the LAYOUT4_BLOCK_VOLUME enumeration that the block/volume | defined in [30], is to be used. Similarly, the LAYOUT4_BLOCK_VOLUME | |||
layout, as defined in [31], is to be used. | enumeration specifies that the block/volume layout, as defined in | |||
[31], is to be used. | ||||
3.3.14. deviceid4 | 3.3.14. deviceid4 | |||
const NFS4_DEVICEID4_SIZE = 16; | const NFS4_DEVICEID4_SIZE = 16; | |||
typedef opaque deviceid4[NFS4_DEVICEID4_SIZE]; | typedef opaque deviceid4[NFS4_DEVICEID4_SIZE]; | |||
Layout information includes device IDs that specify a storage device | Layout information includes device IDs that specify a storage device | |||
through a compact handle. Addressing and type information is | through a compact handle. Addressing and type information is | |||
obtained with the GETDEVICEINFO operation. A client must not assume | obtained with the GETDEVICEINFO operation. Device IDs are not | |||
that device IDs are valid across metadata server reboots. The device | guaranteed to be valid across metadata server reboots. A device ID | |||
ID is qualified by the layout type and are unique per file system | is unique per client ID and layout type. See Section 12.2.10 for | |||
(FSID). See Section 12.2.10 for more details. | more details. | |||
3.3.15. device_addr4 | 3.3.15. device_addr4 | |||
struct device_addr4 { | struct device_addr4 { | |||
layouttype4 da_layout_type; | layouttype4 da_layout_type; | |||
opaque da_addr_body<>; | opaque da_addr_body<>; | |||
}; | }; | |||
The device address is used to set up a communication channel with the | The device address is used to set up a communication channel with the | |||
storage device. Different layout types will require different types | storage device. Different layout types will require different data | |||
of structures to define how they communicate with storage devices. | types to define how they communicate with storage devices. The | |||
The opaque da_addr_body field must be interpreted based on the | opaque da_addr_body field must be interpreted based on the specified | |||
specified da_layout_type field. | da_layout_type field. | |||
This document defines the device address for the NFSv4.1 file layout | This document defines the device address for the NFSv4.1 file layout | |||
(see Section 13.3), which identifies a storage device by network IP | (see Section 13.3), which identifies a storage device by network IP | |||
address and port number. This is sufficient for the clients to | address and port number. This is sufficient for the clients to | |||
communicate with the NFSv4.1 storage devices, and may be sufficient | communicate with the NFSv4.1 storage devices, and may be sufficient | |||
for other layout types as well. Device types for object storage | for other layout types as well. Device types for object storage | |||
devices and block storage devices (e.g., SCSI volume labels) will be | devices and block storage devices (e.g., SCSI volume labels) will be | |||
defined by their respective layout specifications. | defined by their respective layout specifications. | |||
3.3.16. layout_content4 | 3.3.16. layout_content4 | |||
skipping to change at page 85, line 25 | skipping to change at page 85, line 25 | |||
3.3.17. layout4 | 3.3.17. layout4 | |||
struct layout4 { | struct layout4 { | |||
offset4 lo_offset; | offset4 lo_offset; | |||
length4 lo_length; | length4 lo_length; | |||
layoutiomode4 lo_iomode; | layoutiomode4 lo_iomode; | |||
layout_content4 lo_content; | layout_content4 lo_content; | |||
}; | }; | |||
The layout4 structure defines a layout for a file. The layout type | The layout4 data type defines a layout for a file. The layout type | |||
specific data is opaque within lo_content. Since layouts are sub- | specific data is opaque within lo_content. Since layouts are sub- | |||
dividable, the offset and length together with the file's filehandle, | dividable, the offset and length together with the file's filehandle, | |||
the client ID, iomode, and layout type, identify the layout. | the client ID, iomode, and layout type, identify the layout. | |||
3.3.18. layoutupdate4 | 3.3.18. layoutupdate4 | |||
struct layoutupdate4 { | struct layoutupdate4 { | |||
layouttype4 lou_type; | layouttype4 lou_type; | |||
opaque lou_body<>; | opaque lou_body<>; | |||
}; | }; | |||
The layoutupdate4 structure is used by the client to return 'updated' | The layoutupdate4 data type is used by the client to return updated | |||
layout information to the metadata server at LAYOUTCOMMIT time. This | layout information to the metadata server via the LAYOUTCOMMIT | |||
structure provides a channel to pass layout type specific information | (Section 18.42) operation. This data type provides a channel to pass | |||
(in field lou_body) back to the metadata server. E.g., for block/ | layout type specific information (in field lou_body) back to the | |||
volume layout types this could include the list of reserved blocks | metadata server. E.g., for the block/volume layout type this could | |||
that were written. The contents of the opaque lou_body argument are | include the list of reserved blocks that were written. The contents | |||
determined by the layout type and are defined in their context. The | of the opaque lou_body argument are determined by the layout type. | |||
NFSv4.1 file-based layout does not use this structure, thus the | The NFSv4.1 file-based layout does not use this data type; if | |||
lou_body field should have a zero length. | lou_type is LAYOUT4_NFSV4_1_FILES, the lou_body field MUST have a | |||
zero length. | ||||
3.3.19. layouthint4 | 3.3.19. layouthint4 | |||
struct layouthint4 { | struct layouthint4 { | |||
layouttype4 loh_type; | layouttype4 loh_type; | |||
opaque loh_body<>; | opaque loh_body<>; | |||
}; | }; | |||
The layouthint4 structure is used by the client to pass in a hint | ||||
The layouthint4 data type is used by the client to pass in a hint | ||||
about the type of layout it would like created for a particular file. | about the type of layout it would like created for a particular file. | |||
It is the structure specified by the layout_hint attribute described | It is the data type specified by the layout_hint attribute described | |||
in Section 5.11.4. The metadata server may ignore the hint, or may | in Section 5.11.4. The metadata server may ignore the hint, or may | |||
selectively ignore fields within the hint. This hint should be | selectively ignore fields within the hint. This hint should be | |||
provided at create time as part of the initial attributes within | provided at create time as part of the initial attributes within | |||
OPEN. The loh_body field is specific to the type of layout | OPEN. The loh_body field is specific to the type of layout | |||
(loh_type). The NFSv4.1 file-based layout uses the | (loh_type). The NFSv4.1 file-based layout uses the | |||
nfsv4_1_file_layouthint4 structure as defined in Section 13.3. | nfsv4_1_file_layouthint4 data type as defined in Section 13.3. | |||
3.3.20. layoutiomode4 | 3.3.20. layoutiomode4 | |||
enum layoutiomode4 { | enum layoutiomode4 { | |||
LAYOUTIOMODE4_READ = 1, | LAYOUTIOMODE4_READ = 1, | |||
LAYOUTIOMODE4_RW = 2, | LAYOUTIOMODE4_RW = 2, | |||
LAYOUTIOMODE4_ANY = 3 | LAYOUTIOMODE4_ANY = 3 | |||
}; | }; | |||
The iomode specifies whether the client intends to read or write | The iomode specifies whether the client intends to just read or both | |||
(with the possibility of reading) the data represented by the layout. | read and write the data represented by the layout. While the | |||
The ANY iomode MUST NOT be used for LAYOUTGET, however, it can be | LAYOUTIOMODE4_ANY iomode MUST NOT be used in the arguments to the | |||
used for LAYOUTRETURN and CB_LAYOUTRECALL. The ANY iomode specifies | LAYOUTGET operation, it MAY be used in the arguments to the | |||
that layouts pertaining to both READ and RW iomodes are being | LAYOUTRETURN and CB_LAYOUTRECALL operations. The LAYOUTIOMODE4_ANY | |||
returned or recalled, respectively. The metadata server's use of the | iomode specifies that layouts pertaining to both LAYOUTIOMODE4_READ | |||
iomode may depend on the layout type being used. The storage devices | and LAYOUTIOMODE4_RW iomodes are being returned or recalled, | |||
may validate I/O accesses against the iomode and reject invalid | respectively. The metadata server's use of the iomode may depend on | |||
accesses. | the layout type being used. The storage devices MAY validate I/O | |||
accesses against the iomode and reject invalid accesses. | ||||
3.3.21. nfs_impl_id4 | 3.3.21. nfs_impl_id4 | |||
struct nfs_impl_id4 { | struct nfs_impl_id4 { | |||
utf8str_cis nii_domain; | utf8str_cis nii_domain; | |||
utf8str_cs nii_name; | utf8str_cs nii_name; | |||
nfstime4 nii_date; | nfstime4 nii_date; | |||
}; | }; | |||
This structure is used to identify client and server implementation | This data type is used to identify client and server implementation | |||
detail. The nii_domain field is the DNS domain name that the | details. The nii_domain field is the DNS domain name that the | |||
implementer is associated with. The nii_name field is the product | implementer is associated with. The nii_name field is the product | |||
name of the implementation and is completely free form. It is | name of the implementation and is completely free form. It is | |||
RECOMMENDED that the nii_name be used to distinguish machine | RECOMMENDED that the nii_name be used to distinguish machine | |||
architecture, machine platforms, revisions, versions, and patch | architecture, machine platforms, revisions, versions, and patch | |||
levels. The nii_date field is the timestamp of when the software | levels. The nii_date field is the timestamp of when the software | |||
instance was published or built. | instance was published or built. | |||
3.3.22. threshold_item4 | 3.3.22. threshold_item4 | |||
struct threshold_item4 { | struct threshold_item4 { | |||
layouttype4 thi_layout_type; | layouttype4 thi_layout_type; | |||
bitmap4 thi_hintset; | bitmap4 thi_hintset; | |||
opaque thi_hintlist<>; | opaque thi_hintlist<>; | |||
}; | }; | |||
This structure contains a list of hints specific to a layout type for | This data type contains a list of hints specific to a layout type for | |||
helping the client determine when it should send I/O directly through | helping the client determine when it should send I/O directly through | |||
the metadata server vs. the data servers. The hint structure | the metadata server versus the storage devices. The data type | |||
consists of the layout type (thi_layout_type), a bitmap (thi_hintset) | consists of the layout type (thi_layout_type), a bitmap (thi_hintset) | |||
describing the set of hints supported by the server (they may differ | describing the set of hints supported by the server (they may differ | |||
based on the layout type), and a list of hints (thi_hintlist), whose | based on the layout type), and a list of hints (thi_hintlist), whose | |||
structure is determined by the hintset bitmap. See the mdsthreshold | content is determined by the hintset bitmap. See the mdsthreshold | |||
attribute for more details. | attribute for more details. | |||
The thi_hintset field is a bitmap of the following values: | The thi_hintset field is a bitmap of the following values: | |||
+-------------------------+---+---------+---------------------------+ | +-------------------------+---+---------+---------------------------+ | |||
| name | # | Data | Description | | | name | # | Data | Description | | |||
| | | Type | | | | | | Type | | | |||
+-------------------------+---+---------+---------------------------+ | +-------------------------+---+---------+---------------------------+ | |||
| threshold4_read_size | 0 | length4 | The file size below which | | | threshold4_read_size | 0 | length4 | The file size below which | | |||
| | | | it is RECOMMENDED to read | | | | | | it is RECOMMENDED to read | | |||
skipping to change at page 87, line 51 | skipping to change at page 88, line 11 | |||
| | | | RECOMMENDED to write data | | | | | | RECOMMENDED to write data | | |||
| | | | through the MDS | | | | | | through the MDS | | |||
+-------------------------+---+---------+---------------------------+ | +-------------------------+---+---------+---------------------------+ | |||
3.3.23. mdsthreshold4 | 3.3.23. mdsthreshold4 | |||
struct mdsthreshold4 { | struct mdsthreshold4 { | |||
threshold_item4 mth_hints<>; | threshold_item4 mth_hints<>; | |||
}; | }; | |||
This structure holds an array of threshold_item4 structures each of | This data type holds an array of elements of data type | |||
which is valid for a particular layout type. An array is necessary | threshold_item4, each of which is valid for a particular layout type. | |||
since a server can support multiple layout types for a single file. | An array is necessary because a server can support multiple layout | |||
types for a single file. | ||||
4. Filehandles | 4. Filehandles | |||
The filehandle in the NFS protocol is a per server unique identifier | The filehandle in the NFS protocol is a per server unique identifier | |||
for a file system object. The contents of the filehandle are opaque | for a file system object. The contents of the filehandle are opaque | |||
to the client. Therefore, the server is responsible for translating | to the client. Therefore, the server is responsible for translating | |||
the filehandle to an internal representation of the file system | the filehandle to an internal representation of the file system | |||
object. | object. | |||
4.1. Obtaining the First Filehandle | 4.1. Obtaining the First Filehandle | |||
End of changes. 57 change blocks. | ||||
103 lines changed or deleted | 111 lines changed or added | |||
This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |