mirror of
https://github.com/apache/nuttx.git
synced 2026-06-07 01:05:54 +08:00
NFS update
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4819 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
+26
-9
@@ -116,7 +116,7 @@
|
||||
|
||||
#define NFSX_UNSIGNED 4
|
||||
|
||||
/* specific to NFS Version 2 */
|
||||
/* Specific to NFS Version 2 */
|
||||
|
||||
#define NFSX_V2FH 32
|
||||
#define NFSX_V2FATTR 68
|
||||
@@ -124,7 +124,7 @@
|
||||
#define NFSX_V2COOKIE 4
|
||||
#define NFSX_V2STATFS 20
|
||||
|
||||
/* specific to NFS Version 3 */
|
||||
/* Specific to NFS Version 3 */
|
||||
|
||||
#define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */
|
||||
#define NFSX_V3FHMAX 64 /* max. allowed by protocol */
|
||||
@@ -285,6 +285,21 @@
|
||||
|
||||
#define NFS_MAXFHSIZE 64
|
||||
|
||||
/* Mode bit values */
|
||||
|
||||
#define NFSMMODE_IXOTH 0x00001 /* Execute permission for others on a file */
|
||||
#define NFSMMODE_IWOTH 0x00002 /* Write permission for others */
|
||||
#define NFSMMODE_IROTH 0x00004 /* Read permission for others */
|
||||
#define NFSMMODE_IXGRP 0x00008 /* Execute permission for group on a file */
|
||||
#define NFSMMODE_IWGRP 0x00010 /* Write permission for group */
|
||||
#define NFSMMODE_IRGRP 0x00020 /* Read permission for group */
|
||||
#define NFSMMODE_IXUSR 0x00040 /* Execute permission for owner on a file */
|
||||
#define NFSMMODE_IWUSR 0x00080 /* Write permission for owner */
|
||||
#define NFSMMODE_IRUSR 0x00100 /* Read permission for owner */
|
||||
#define NFSMMODE_SAVETEXT 0x00200 /* Save swapped text */
|
||||
#define NFSMMODE_ISGID 0x00400 /* Set group ID on execution */
|
||||
#define NFSMMODE_ISUID 0x00800 /* Set user ID on execution */
|
||||
|
||||
/* File identifier */
|
||||
|
||||
#define MAXFIDSZ 16
|
||||
@@ -297,13 +312,13 @@
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NFNON = 0,
|
||||
NFREG = 1,
|
||||
NFDIR = 2,
|
||||
NFBLK = 3,
|
||||
NFCHR = 4,
|
||||
NFLNK = 5,
|
||||
NFSOCK = 6,
|
||||
NFNON = 0, /* Unknown type */
|
||||
NFREG = 1, /* Regular file */
|
||||
NFDIR = 2, /* Directory */
|
||||
NFBLK = 3, /* Block special device file */
|
||||
NFCHR = 4, /* Characgter special device file */
|
||||
NFLNK = 5, /* Symbolic link */
|
||||
NFSOCK = 6, /* Socket */
|
||||
NFFIFO = 7
|
||||
} nfstype;
|
||||
|
||||
@@ -670,8 +685,10 @@ struct READDIR3args
|
||||
|
||||
struct READDIR3resok
|
||||
{
|
||||
uint32_t attributes_follow;
|
||||
struct nfs_fattr dir_attributes;
|
||||
uint8_t cookieverf[NFSX_V3COOKIEVERF];
|
||||
uint32_t value_follows;
|
||||
uint32_t reply[1]; /* Variable length reply begins here */
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -201,13 +201,13 @@ tryagain:
|
||||
goto out;
|
||||
}
|
||||
|
||||
bcopy(dataout, &replyh, sizeof(struct rpc_reply_header));
|
||||
memcpy(&replyh, dataout, sizeof(struct rpc_reply_header));
|
||||
|
||||
if (replyh.rpc_verfi.authtype != 0)
|
||||
{
|
||||
error = fxdr_unsigned(int, replyh.rpc_verfi.authtype);
|
||||
|
||||
if ((nmp->nm_flag & NFSMNT_NFSV3) && error == NFSERR_TRYLATER)
|
||||
if ((nmp->nm_flag & NFSMNT_NFSV3) && error == EAGAIN)
|
||||
{
|
||||
error = 0;
|
||||
trylater_delay *= NFS_TIMEOUTMUL;
|
||||
|
||||
+285
-105
File diff suppressed because it is too large
Load Diff
+19
-19
@@ -777,7 +777,7 @@ static int rpcclnt_reply(struct rpctask *myrep, int procid, int prog,
|
||||
return error;
|
||||
}
|
||||
|
||||
bcopy(reply, &replyheader, sizeof(struct rpc_reply_header));
|
||||
memcpy(&replyheader, reply, sizeof(struct rpc_reply_header));
|
||||
|
||||
/* Get the xid and check that it is an rpc replysvr */
|
||||
|
||||
@@ -1281,7 +1281,7 @@ int rpcclnt_connect(struct rpcclnt *rpc)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
bcopy(&mdata.mount.fhandle, &rpc->rc_fh, sizeof(nfsfh_t));
|
||||
memcpy(&rpc->rc_fh, &mdata.mount.fhandle, sizeof(nfsfh_t));
|
||||
|
||||
/* Do the RPC to get a dynamic bounding with the server using PMAP.
|
||||
* NFS port in the socket.
|
||||
@@ -1614,8 +1614,8 @@ int rpcclnt_request(struct rpcclnt *rpc, int procnum, int prog, int version,
|
||||
if (error == 0 || error == EPIPE)
|
||||
{
|
||||
error = rpcclnt_reply(task, procnum, prog, dataout, len);
|
||||
fvdbg("rpcclnt_reply returned: %d\n", error);
|
||||
}
|
||||
fvdbg("out for reply %d\n", error);
|
||||
|
||||
/* RPC done, unlink the request. */
|
||||
|
||||
@@ -1637,7 +1637,7 @@ int rpcclnt_request(struct rpcclnt *rpc, int procnum, int prog, int version,
|
||||
/* Break down the rpc header and check if ok */
|
||||
|
||||
memset(&replymgs, 0, sizeof(replymgs));
|
||||
bcopy(dataout, &replyheader, sizeof(struct rpc_reply_header));
|
||||
memcpy(&replyheader, dataout, sizeof(struct rpc_reply_header));
|
||||
replymgs.type = fxdr_unsigned(uint32_t, replyheader.type);
|
||||
if (replymgs.type == RPC_MSGDENIED)
|
||||
{
|
||||
@@ -1877,7 +1877,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
if (procid == PMAPPROC_GETPORT)
|
||||
{
|
||||
struct rpc_call_pmap *callmsg = (struct rpc_call_pmap *)dataout;
|
||||
bcopy(datain, &callmsg->pmap, sizeof(struct call_args_pmap));
|
||||
memcpy(&callmsg->pmap, datain, sizeof(struct call_args_pmap));
|
||||
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
@@ -1907,7 +1907,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
else if (procid == PMAPPROC_UNSET)
|
||||
{
|
||||
struct rpc_call_pmap *callmsg = (struct rpc_call_pmap *)dataout;;
|
||||
bcopy(datain, &callmsg->pmap, sizeof(struct call_args_pmap));
|
||||
memcpy(&callmsg->pmap, datain, sizeof(struct call_args_pmap));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -1939,7 +1939,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
if (procid == RPCMNT_UMOUNT)
|
||||
{
|
||||
struct rpc_call_mount *callmsg = (struct rpc_call_mount *)dataout;
|
||||
bcopy(datain, &callmsg->mount, sizeof(struct call_args_mount));
|
||||
memcpy(&callmsg->mount, datain, sizeof(struct call_args_mount));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -1968,7 +1968,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
else if (procid == RPCMNT_MOUNT)
|
||||
{
|
||||
struct rpc_call_mount *callmsg = (struct rpc_call_mount *)dataout;
|
||||
bcopy(datain, &callmsg->mount, sizeof(struct call_args_mount));
|
||||
memcpy(&callmsg->mount, datain, sizeof(struct call_args_mount));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2002,7 +2002,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_CREATE:
|
||||
{
|
||||
struct rpc_call_create *callmsg = (struct rpc_call_create *)dataout;
|
||||
bcopy(datain, &callmsg->create, sizeof(struct CREATE3args));
|
||||
memcpy(&callmsg->create, datain, sizeof(struct CREATE3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2032,7 +2032,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_READ:
|
||||
{
|
||||
struct rpc_call_read *callmsg = (struct rpc_call_read *)dataout;
|
||||
bcopy(datain, &callmsg->read, sizeof(struct READ3args));
|
||||
memcpy(&callmsg->read, datain, sizeof(struct READ3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2063,7 +2063,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_WRITE:
|
||||
{
|
||||
struct rpc_call_write *callmsg = (struct rpc_call_write *)dataout;
|
||||
bcopy(datain, &callmsg->write, sizeof(struct WRITE3args));
|
||||
memcpy(&callmsg->write, datain, sizeof(struct WRITE3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2094,7 +2094,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_READDIR:
|
||||
{
|
||||
struct rpc_call_readdir *callmsg = (struct rpc_call_readdir *)dataout;
|
||||
bcopy(datain, &callmsg->readdir, sizeof(struct READDIR3args));
|
||||
memcpy(&callmsg->readdir, datain, sizeof(struct READDIR3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2125,7 +2125,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_FSSTAT:
|
||||
{
|
||||
struct rpc_call_fs *callmsg = (struct rpc_call_fs *)dataout;
|
||||
bcopy(datain, &callmsg->fs, sizeof(struct FS3args));
|
||||
memcpy(&callmsg->fs, datain, sizeof(struct FS3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2156,7 +2156,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_REMOVE:
|
||||
{
|
||||
struct rpc_call_remove *callmsg = (struct rpc_call_remove *)dataout;
|
||||
bcopy(datain, &callmsg->remove, sizeof(struct REMOVE3args));
|
||||
memcpy(&callmsg->remove, datain, sizeof(struct REMOVE3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2187,7 +2187,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_GETATTR:
|
||||
{
|
||||
struct rpc_call_fs *callmsg = (struct rpc_call_fs *)dataout;
|
||||
bcopy(datain, &callmsg->fs, sizeof(struct FS3args));
|
||||
memcpy(&callmsg->fs, datain, sizeof(struct FS3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2218,7 +2218,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_MKDIR:
|
||||
{
|
||||
struct rpc_call_mkdir *callmsg = (struct rpc_call_mkdir *)dataout;
|
||||
bcopy(datain, &callmsg->mkdir, sizeof(struct MKDIR3args));
|
||||
memcpy(&callmsg->mkdir, datain, sizeof(struct MKDIR3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2249,7 +2249,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_RMDIR:
|
||||
{
|
||||
struct rpc_call_rmdir *callmsg = (struct rpc_call_rmdir *)dataout;
|
||||
bcopy(datain, &callmsg->rmdir, sizeof(struct RMDIR3args));
|
||||
memcpy(&callmsg->rmdir, datain, sizeof(struct RMDIR3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2280,7 +2280,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_RENAME:
|
||||
{
|
||||
struct rpc_call_rename *callmsg = (struct rpc_call_rename *)dataout;
|
||||
bcopy(datain, &callmsg->rename, sizeof(struct RENAME3args));
|
||||
memcpy(&callmsg->rename, datain, sizeof(struct RENAME3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
@@ -2311,7 +2311,7 @@ int rpcclnt_buildheader(struct rpcclnt *rpc, int procid, int prog, int vers,
|
||||
case NFSPROC_FSINFO:
|
||||
{
|
||||
struct rpc_call_fs *callmsg = (struct rpc_call_fs *)dataout;
|
||||
bcopy(datain, &callmsg->fs, sizeof(struct FS3args));
|
||||
memcpy(&callmsg->fs, datain, sizeof(struct FS3args));
|
||||
callmsg->ch.rp_xid = txdr_unsigned(rpcclnt_xid);
|
||||
value->xid = callmsg->ch.rp_xid;
|
||||
callmsg->ch.rp_direction = rpc_call;
|
||||
|
||||
Reference in New Issue
Block a user