123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #ifndef _IPXE_NFS_H
- #define _IPXE_NFS_H
-
- #include <stdint.h>
- #include <ipxe/oncrpc.h>
-
- /** @file
- *
- * Network File System protocol.
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- /** NFS protocol number */
- #define ONCRPC_NFS 100003
-
- /** NFS protocol version */
- #define NFS_VERS 3
-
- /** No error*/
- #define NFS3_OK 0
- /** Not owner */
- #define NFS3ERR_PERM 1
- /** No such file or directory */
- #define NFS3ERR_NOENT 2
- /** I/O error */
- #define NFS3ERR_IO 5
- /** No such device or address */
- #define NFS3ERR_NXIO 6
- /** Permission denied */
- #define NFS3ERR_ACCES 13
- /** The file specified already exists */
- #define NFS3ERR_EXIST 17
- /** Attempt to do a cross-device hard link */
- #define NFS3ERR_XDEV 18
- /** No such device */
- #define NFS3ERR_NODEV 19
- /** Not a directory */
- #define NFS3ERR_NOTDIR 20
- /**Is a directory */
- #define NFS3ERR_ISDIR 21
- /** Invalid argument */
- #define NFS3ERR_INVAL 22
- /** Filename too long */
- #define NFS3ERR_NAMETOOLONG 63
- /** Invalid file handle */
- #define NFS3ERR_STALE 70
- /** Too many levels of remote in path */
- #define NFS3ERR_REMOTE 71
- /** Illegal NFS file handle */
- #define NFS3ERR_BADHANDLE 10001
- /** READDIR or READDIRPLUS cookie is stale */
- #define NFS3ERR_BAD_COOKIE 10003
- /** Operation not supported */
- #define NFS3ERR_NOTSUPP 10004
- /** Buffer or request is too small */
- #define NFS3ERR_TOOSMALL 10005
- /** An error occurred on the server which does not map to any of the legal NFS
- * version 3 protocol error values */
- #define NFS3ERR_SERVERFAULT 10006
- /** The server initiated the request, but was not able to complete it in a
- * timely fashion */
- #define NFS3ERR_JUKEBOX 10008
-
- enum nfs_attr_type {
- NFS_ATTR_SYMLINK = 5,
- };
-
- /**
- * A NFS file handle
- *
- */
- struct nfs_fh {
- uint8_t fh[64];
- size_t size;
- };
-
- /**
- * A NFS LOOKUP reply
- *
- */
- struct nfs_lookup_reply {
- /** Reply status */
- uint32_t status;
- /** Entity type */
- enum nfs_attr_type ent_type;
- /** File handle */
- struct nfs_fh fh;
- };
-
- /**
- * A NFS READLINK reply
- *
- */
- struct nfs_readlink_reply {
- /** Reply status */
- uint32_t status;
- /** File path length */
- uint32_t path_len;
- /** File path */
- char *path;
- };
-
-
- /**
- * A NFS READ reply
- *
- */
- struct nfs_read_reply {
- /** Reply status */
- uint32_t status;
- /** File size */
- uint64_t filesize;
- /** Bytes read */
- uint32_t count;
- /** End-of-File indicator */
- uint32_t eof;
- /** Data length */
- uint32_t data_len;
- /** Data read */
- void *data;
- };
-
- size_t nfs_iob_get_fh ( struct io_buffer *io_buf, struct nfs_fh *fh );
- size_t nfs_iob_add_fh ( struct io_buffer *io_buf, const struct nfs_fh *fh );
-
- /**
- * Prepare an ONC RPC session to be used as a NFS session
- *
- * @v session ONC RPC session
- * @v credential ONC RPC credential
- *
- * The credential parameter must not be NULL, use 'oncrpc_auth_none' if you
- * don't want a particular scheme to be used.
- */
- static inline void nfs_init_session ( struct oncrpc_session *session,
- struct oncrpc_cred *credential ) {
- oncrpc_init_session ( session, credential, &oncrpc_auth_none,
- ONCRPC_NFS, NFS_VERS );
- }
-
- int nfs_lookup ( struct interface *intf, struct oncrpc_session *session,
- const struct nfs_fh *fh, const char *filename );
- int nfs_readlink ( struct interface *intf, struct oncrpc_session *session,
- const struct nfs_fh *fh );
- int nfs_read ( struct interface *intf, struct oncrpc_session *session,
- const struct nfs_fh *fh, uint64_t offset, uint32_t count );
-
- int nfs_get_lookup_reply ( struct nfs_lookup_reply *lookup_reply,
- struct oncrpc_reply *reply );
- int nfs_get_readlink_reply ( struct nfs_readlink_reply *readlink_reply,
- struct oncrpc_reply *reply );
- int nfs_get_read_reply ( struct nfs_read_reply *read_reply,
- struct oncrpc_reply *reply );
-
- #endif /* _IPXE_NFS_H */
|