iPXE
|
Network File System protocol. More...
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
#include <libgen.h>
#include <byteswap.h>
#include <ipxe/time.h>
#include <ipxe/socket.h>
#include <ipxe/tcpip.h>
#include <ipxe/in.h>
#include <ipxe/iobuf.h>
#include <ipxe/xfer.h>
#include <ipxe/open.h>
#include <ipxe/uri.h>
#include <ipxe/features.h>
#include <ipxe/nfs.h>
#include <ipxe/nfs_open.h>
#include <ipxe/oncrpc.h>
#include <ipxe/oncrpc_iob.h>
#include <ipxe/portmap.h>
#include <ipxe/mount.h>
#include <ipxe/nfs_uri.h>
Go to the source code of this file.
Data Structures | |
struct | nfs_request |
A NFS request. More... | |
Macros | |
#define | NFS_RSIZE 100000 |
Enumerations | |
enum | nfs_pm_state { NFS_PORTMAP_NONE = 0, NFS_PORTMAP_MOUNTPORT, NFS_PORTMAP_NFSPORT, MFS_PORTMAP_CLOSED } |
enum | nfs_mount_state { NFS_MOUNT_NONE = 0, NFS_MOUNT_MNT, NFS_MOUNT_UMNT, NFS_MOUNT_CLOSED } |
enum | nfs_state { NFS_NONE = 0, NFS_LOOKUP, NFS_LOOKUP_SENT, NFS_READLINK, NFS_READLINK_SENT, NFS_READ, NFS_READ_SENT, NFS_CLOSED } |
Functions | |
FEATURE (FEATURE_PROTOCOL, "NFS", DHCP_EB_FEATURE_NFS, 1) | |
static void | nfs_step (struct nfs_request *nfs) |
static void | nfs_free (struct refcnt *refcnt) |
Free NFS request. More... | |
static void | nfs_done (struct nfs_request *nfs, int rc) |
Mark NFS operation as complete. More... | |
static int | nfs_connect (struct interface *intf, uint16_t port, const char *hostname) |
static void | nfs_pm_step (struct nfs_request *nfs) |
static int | nfs_pm_deliver (struct nfs_request *nfs, struct io_buffer *io_buf, struct xfer_metadata *meta __unused) |
static void | nfs_mount_step (struct nfs_request *nfs) |
static int | nfs_mount_deliver (struct nfs_request *nfs, struct io_buffer *io_buf, struct xfer_metadata *meta __unused) |
static int | nfs_deliver (struct nfs_request *nfs, struct io_buffer *io_buf, struct xfer_metadata *meta __unused) |
static int | nfs_parse_uri (struct nfs_request *nfs, const struct uri *uri) |
static int | nfs_open (struct interface *xfer, struct uri *uri) |
Initiate a NFS connection. More... | |
Variables | |
static struct interface_operation | nfs_xfer_operations [] |
static struct interface_descriptor | nfs_xfer_desc |
NFS data transfer interface descriptor. More... | |
static struct interface_operation | nfs_pm_operations [] |
static struct interface_descriptor | nfs_pm_desc |
static struct interface_operation | nfs_mount_operations [] |
static struct interface_descriptor | nfs_mount_desc |
static struct interface_operation | nfs_operations [] |
static struct interface_descriptor | nfs_desc |
struct uri_opener nfs_uri_opener | __uri_opener |
NFS URI opener. More... | |
Network File System protocol.
Definition in file nfs_open.c.
#define NFS_RSIZE 100000 |
Definition at line 53 of file nfs_open.c.
enum nfs_pm_state |
Enumerator | |
---|---|
NFS_PORTMAP_NONE | |
NFS_PORTMAP_MOUNTPORT | |
NFS_PORTMAP_NFSPORT | |
MFS_PORTMAP_CLOSED |
Definition at line 55 of file nfs_open.c.
enum nfs_mount_state |
Enumerator | |
---|---|
NFS_MOUNT_NONE | |
NFS_MOUNT_MNT | |
NFS_MOUNT_UMNT | |
NFS_MOUNT_CLOSED |
Definition at line 62 of file nfs_open.c.
enum nfs_state |
Enumerator | |
---|---|
NFS_NONE | |
NFS_LOOKUP | |
NFS_LOOKUP_SENT | |
NFS_READLINK | |
NFS_READLINK_SENT | |
NFS_READ | |
NFS_READ_SENT | |
NFS_CLOSED |
Definition at line 69 of file nfs_open.c.
FEATURE | ( | FEATURE_PROTOCOL | , |
"NFS" | , | ||
DHCP_EB_FEATURE_NFS | , | ||
1 | |||
) |
|
static |
Definition at line 367 of file nfs_open.c.
References nfs_request::current_fh, DBGC, nfs_request::file_offset, nfs_done(), nfs_request::nfs_intf, NFS_LOOKUP, nfs_lookup(), NFS_READ, nfs_read(), NFS_READLINK, nfs_readlink(), NFS_RSIZE, nfs_request::nfs_session, nfs_request::nfs_state, nfs_uri_next_path_component(), rc, nfs_request::readlink_fh, nfs_request::uri, and xfer_window().
Referenced by nfs_deliver(), and nfs_mount_deliver().
|
static |
Free NFS request.
refcnt | Reference counter |
Definition at line 122 of file nfs_open.c.
References nfs_request::auth_sys, container_of, DBGC, free, oncrpc_cred_sys::hostname, nfs_request::hostname, nfs_uri_free(), and nfs_request::uri.
Referenced by nfs_open().
|
static |
Mark NFS operation as complete.
nfs | NFS request |
rc | Return status code |
Definition at line 141 of file nfs_open.c.
References DBGC, ECONNRESET, intf_shutdown(), nfs_request::mount_intf, NFS_CLOSED, nfs_request::nfs_intf, nfs_request::nfs_state, nfs_request::pm_intf, rc, strerror(), and nfs_request::xfer.
Referenced by nfs_deliver(), nfs_mount_deliver(), nfs_mount_step(), nfs_pm_deliver(), nfs_pm_step(), and nfs_step().
Definition at line 153 of file nfs_open.c.
References EINVAL, htons, memset(), peer, port, SOCK_STREAM, sockaddr_tcpip::st_flags, TCPIP_BIND_PRIVILEGED, and xfer_open_named_socket().
Referenced by nfs_open(), and nfs_pm_deliver().
|
static |
Definition at line 174 of file nfs_open.c.
References DBGC, MOUNT_VERS, nfs_done(), NFS_PORTMAP_NFSPORT, NFS_PORTMAP_NONE, NFS_VERS, ONCRPC_MOUNT, ONCRPC_NFS, nfs_request::pm_intf, nfs_request::pm_session, nfs_request::pm_state, portmap_getport(), PORTMAP_PROTO_TCP, rc, and xfer_window().
Referenced by nfs_pm_deliver().
|
static |
Definition at line 210 of file nfs_open.c.
References oncrpc_reply::accept_state, DBGC, done, EPROTO, free_iob(), nfs_request::hostname, intf_shutdown(), nfs_request::mount_intf, nfs_connect(), nfs_done(), nfs_request::nfs_intf, nfs_pm_step(), NFS_PORTMAP_MOUNTPORT, NFS_PORTMAP_NFSPORT, oncrpc_get_reply(), nfs_request::pm_intf, nfs_request::pm_session, nfs_request::pm_state, portmap_getport_reply::port, portmap_get_getport_reply(), and rc.
|
static |
Definition at line 268 of file nfs_open.c.
References DBGC, nfs_request::mount_intf, mount_mnt(), nfs_request::mount_session, nfs_request::mount_state, mount_umnt(), nfs_done(), NFS_MOUNT_NONE, NFS_MOUNT_UMNT, nfs_uri_mountpoint(), rc, nfs_request::uri, and xfer_window().
Referenced by nfs_deliver(), and nfs_mount_deliver().
|
static |
Definition at line 301 of file nfs_open.c.
References oncrpc_reply::accept_state, nfs_request::current_fh, DBGC, done, EPROTO, mount_mnt_reply::fh, free_iob(), MNT3ERR_ACCES, MNT3ERR_NOENT, MNT3ERR_NOTDIR, mount_get_mnt_reply(), nfs_request::mount_session, nfs_request::mount_state, nfs_done(), NFS_LOOKUP, NFS_MOUNT_MNT, nfs_mount_step(), NFS_MOUNT_UMNT, nfs_request::nfs_state, nfs_step(), nfs_uri_mountpoint(), nfs_uri_next_mountpoint(), oncrpc_get_reply(), rc, mount_mnt_reply::status, strcmp(), and nfs_request::uri.
|
static |
Definition at line 420 of file nfs_open.c.
References oncrpc_reply::accept_state, nfs_read_reply::count, nfs_request::current_fh, DBGC, DBGC2, done, EINVAL, ENOMEM, nfs_lookup_reply::ent_type, nfs_request::eof, nfs_read_reply::eof, EPROTO, nfs_lookup_reply::fh, nfs_request::file_offset, nfs_read_reply::filesize, free, free_iob(), intf_shutdown(), iob_disown, iob_len(), iob_unput, len, nfs_uri::lookup_pos, nfs_request::mount_state, NFS_ATTR_SYMLINK, nfs_done(), nfs_get_lookup_reply(), nfs_get_read_reply(), nfs_get_readlink_reply(), nfs_request::nfs_intf, NFS_LOOKUP, NFS_LOOKUP_SENT, nfs_mount_step(), NFS_READ, NFS_READ_SENT, NFS_READLINK, NFS_READLINK_SENT, nfs_request::nfs_session, nfs_request::nfs_state, nfs_step(), nfs_uri_symlink(), oncrpc_get_reply(), nfs_uri::path, nfs_readlink_reply::path, nfs_readlink_reply::path_len, rc, nfs_request::readlink_fh, nfs_request::remaining, strndup(), nfs_request::uri, nfs_request::xfer, xfer_deliver_iob(), and xfer_seek().
|
static |
Definition at line 599 of file nfs_open.c.
References DBGC, EINVAL, ENOMEM, uri::host, nfs_request::hostname, nfs_uri_free(), nfs_uri_init(), nfs_uri_mountpoint(), nfs_uri::path, uri::path, rc, strdup(), and nfs_request::uri.
Referenced by nfs_open().
Initiate a NFS connection.
xfer | Data transfer interface |
uri | Uniform Resource Identifier |
rc | Return status code |
Definition at line 630 of file nfs_open.c.
References nfs_request::auth_sys, oncrpc_cred_sys::credential, DBGC, ENOMEM, free, oncrpc_cred_sys::hostname, nfs_request::hostname, intf_init(), intf_plug_plug(), mount_init_session(), nfs_request::mount_intf, nfs_request::mount_session, nfs_connect(), nfs_desc, nfs_free(), nfs_init_session(), nfs_request::nfs_intf, nfs_mount_desc, nfs_parse_uri(), nfs_pm_desc, nfs_request::nfs_session, nfs_uri_free(), nfs_xfer_desc, oncrpc_init_cred_sys(), nfs_request::pm_intf, nfs_request::pm_session, portmap_init_session(), PORTMAP_PORT, rc, ref_init, ref_put, nfs_request::refcnt, nfs_request::uri, nfs_request::xfer, and zalloc().
|
static |
Definition at line 557 of file nfs_open.c.
|
static |
NFS data transfer interface descriptor.
Definition at line 562 of file nfs_open.c.
Referenced by nfs_open().
|
static |
Definition at line 565 of file nfs_open.c.
|
static |
Definition at line 571 of file nfs_open.c.
Referenced by nfs_open().
|
static |
Definition at line 574 of file nfs_open.c.
|
static |
Definition at line 580 of file nfs_open.c.
Referenced by nfs_open().
|
static |
Definition at line 583 of file nfs_open.c.
|
static |
Definition at line 589 of file nfs_open.c.
Referenced by nfs_open().
struct uri_opener nfs_uri_opener __uri_opener |
NFS URI opener.
Definition at line 680 of file nfs_open.c.