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:
patacongo
2012-06-09 00:08:18 +00:00
parent ad13bd3827
commit 44d6f19868
4 changed files with 332 additions and 135 deletions
+26 -9
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+19 -19
View File
@@ -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;