summaryrefslogtreecommitdiffstats
path: root/qemu/roms/ipxe/src/include/ipxe/nfs.h
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/ipxe/src/include/ipxe/nfs.h')
-rw-r--r--qemu/roms/ipxe/src/include/ipxe/nfs.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/qemu/roms/ipxe/src/include/ipxe/nfs.h b/qemu/roms/ipxe/src/include/ipxe/nfs.h
new file mode 100644
index 000000000..498ed5a27
--- /dev/null
+++ b/qemu/roms/ipxe/src/include/ipxe/nfs.h
@@ -0,0 +1,157 @@
+#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 );
+
+/** 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 */