RUMP_ETFS(3) | NetBSD Library Functions Manual | RUMP_ETFS(3)

# NAME

rump_etfs — rump host file system interface

# LIBRARY

rump kernel (librump, -lrump)

# SYNOPSIS

#include <rump/rump.h>

int
rump_pub_etfs_register(const char *key, const char *hostpath, enum rump_etfs_type ftype);

int
rump_pub_etfs_register_withsize(const char *key, const char *hostpath, enum rump_etfs_type ftype, uint64_t begin, uint64_t size);

int
rump_pub_etfs_remove(const char *key);

# DESCRIPTION

The rump ExtraTerrestrial File System (rump_etfs) is used to provide access to the host file system namespace within a rump kernel.

The operation is based on registered key values which each map to a hostpath. A key must be an absolute path (i.e. begin with “/”). Multiple leading slashes are collapsed to one (i.e. “/key” is the same as “//key”). The rest of the path, including slashes, is compared verbatim (i.e. “/key/path” does not match “/key//path”).

The hostpath is interpreted in host system context for the current working directory and can be either absolute or relative.

The ftype parameter specifies how etfs file will be presented and does not have to match the host type, although some limitations apply. Possible values are:

RUMP_ETFS_REG
  regular file.
RUMP_ETFS_BLK
  block device. This is often used when mapping file system images.
RUMP_ETFS_CHR
  character device.
RUMP_ETFS_DIR
  directory. This option is valid only when hostpath is a directory. The immediate children of the host directory will be accessible inside a rump kernel.
RUMP_ETFS_DIR_SUBDIRS
  directory. This option is valid only when hostpath is a directory. This option recursively applies to all subdirectories, and allows a rump kernel to access an entire directory tree.

The interfaces are:

rump_pub_etfs_register(key, hostpath, ftype)
  Map key to a file of type ftype with the contents of hostpath.
rump_pub_etfs_register_withsize(key, hostpath, ftype, begin, size)
  Like the above, but map only [begin, begin+size] from hostpath. This is useful when mapping disk images where only one partition is relevant to the application. If size is given the special value RUMP_ETFS_SIZE_ENDOFF, the underlying file is mapped from begin to the end of the file.
rump_pub_etfs_remove(key)
  Remove etfs mapping for key. This routine may be called only if the file related to the mapping is not in use.

# EXAMPLES

Map a host image file to a mountable /dev/harddisk path using window offsets from the disklabel.

    rump_pub_etfs_register_withsize("/dev/harddisk", "disk.img",
        RUMP_ETFS_BLK,
        pp->p_offset << DEV_BSHIFT, pp->p_size << DEV_BSHIFT);

Make the host kernel module directory hierarchy available within the rump kernel.

    rump_pub_etfs_register("/stand/i386/5.99.41",
        "/stand/i386/5.99.41", RUMP_ETFS_DIR_SUBDIRS);

# SEE ALSO

rump(3)

# HISTORY

rump_etfs first appeared in NetBSD 6.0.

February 3, 2011 | NetBSD 5.99