Home | History | Annotate | Line # | Download | only in rump
      1 /*	$NetBSD: rump.h,v 1.73 2020/11/04 22:06:38 christos Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
     16  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     18  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     21  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     25  * SUCH DAMAGE.
     26  */
     27 
     28 #ifndef _RUMP_RUMP_H_
     29 #define _RUMP_RUMP_H_
     30 
     31 /*
     32  * NOTE: do not #include anything from <sys> here.  Otherwise this
     33  * has no chance of working on non-NetBSD platforms.
     34  */
     35 
     36 struct mount;
     37 struct vnode;
     38 struct vattr;
     39 struct componentname;
     40 struct vfsops;
     41 struct fid;
     42 struct statvfs;
     43 struct stat;
     44 struct kauth_cred;
     45 struct lwp;
     46 struct modinfo;
     47 struct uio;
     48 
     49 #if !defined(RUMP_REGISTER_T)
     50 # define RUMP_REGISTER_T long
     51 # if !defined(_KERNEL) && !defined(_KMEMUSER) &&  \
     52     !defined(_KERNTYPES) && !defined(_STANDALONE)
     53 typedef RUMP_REGISTER_T register_t;
     54 # endif
     55 #endif
     56 
     57 #include <rump/rumpdefs.h>
     58 
     59 /* rumpkern */
     60 enum rump_uiorw { RUMPUIO_READ, RUMPUIO_WRITE };
     61 
     62 enum rump_sigmodel {
     63 	RUMP_SIGMODEL_PANIC,
     64 	RUMP_SIGMODEL_IGNORE,
     65 	RUMP_SIGMODEL__HOST_NOTANYMORE,
     66 	RUMP_SIGMODEL_RAISE,
     67 	RUMP_SIGMODEL_RECORD
     68 };
     69 
     70 /* flags to rump_lwproc_rfork */
     71 #define RUMP_RFFDG	0x01
     72 #define RUMP_RFCFDG	0x02
     73 /* slightly-easier-to-parse aliases for the above */
     74 #define RUMP_RFFD_SHARE 0x00 /* lossage */
     75 #define RUMP_RFFD_COPY	RUMP_RFFDG
     76 #define RUMP_RFFD_CLEAR	RUMP_RFCFDG
     77 
     78 /* rumpvfs */
     79 #define RUMPCN_FREECRED  0x02
     80 #define RUMP_ETFS_SIZE_ENDOFF ((uint64_t)-1)
     81 enum rump_etfs_type {
     82 	RUMP_ETFS_REG,
     83 	RUMP_ETFS_BLK,
     84 	RUMP_ETFS_CHR,
     85 	RUMP_ETFS_DIR,		/* only the registered directory */
     86 	RUMP_ETFS_DIR_SUBDIRS	/* dir + subdirectories (recursive) */
     87 };
     88 
     89 #if defined(__cplusplus)
     90 extern "C" {
     91 #endif
     92 
     93 int	rump_getversion(void);
     94 int	rump_pub_getversion(void); /* compat */
     95 int	rump_nativeabi_p(void);
     96 
     97 int	rump_boot_gethowto(void);
     98 void	rump_boot_sethowto(int);
     99 void	rump_boot_setsigmodel(enum rump_sigmodel);
    100 
    101 struct rump_boot_etfs {
    102 	/* client initializes */
    103 	const char *eb_key;
    104 	const char *eb_hostpath;
    105 	enum rump_etfs_type eb_type;
    106 	uint64_t eb_begin;
    107 	uint64_t eb_size;
    108 
    109 	/* rump kernel initializes */
    110 	struct rump_boot_etfs *_eb_next;
    111 	int eb_status;
    112 };
    113 void	rump_boot_etfs_register(struct rump_boot_etfs *);
    114 
    115 void	rump_schedule(void);
    116 void	rump_unschedule(void);
    117 
    118 void	rump_printevcnts(void);
    119 
    120 int	rump_daemonize_begin(void);
    121 int	rump_init_callback(void (*)(void));
    122 int	rump_init(void);
    123 int	rump_init_server(const char *);
    124 int	rump_daemonize_done(int);
    125 #define RUMP_DAEMONIZE_SUCCESS 0
    126 
    127 #ifndef _KERNEL
    128 #include <rump/rumpkern_if_pub.h>
    129 #include <rump/rumpvfs_if_pub.h>
    130 #include <rump/rumpnet_if_pub.h>
    131 #endif
    132 
    133 #if defined(__cplusplus)
    134 }
    135 #endif
    136 
    137 #endif /* _RUMP_RUMP_H_ */
    138