#ifndef	__EXPORTER__
#define	__EXPORTER__

#define NFS_NOBODY      -2	/* maps Nfs's "nobody" but since not declared by some systems (i.e. Ultrix) we use a constant  */
#define	RMTUSER_REQ		0xabc
#define	AFS_XLATOR_MAGIC	0x87654321

struct	exporterops {
    int	    (*export_reqhandler)();
    int	    (*export_hold)();
    int	    (*export_rele)();
    int	    (*export_sysname)();
    int	    (*export_garbagecollect)();
    int	    (*export_statistics)();
};

struct exporterstats {
    long calls;			/* # of calls to the exporter */
    long rejectedcalls;		/* # of afs rejected  calls */
    long nopag;			/* # of unpagged remote calls */
    long invalidpag;		/* # of invalid pag calls */
};

struct afs_exporter {
    struct  afs_exporter   *exp_next;
    struct  exporterops	    *exp_op;
    long		    exp_states;
    long		    exp_type;
    struct  exporterstats   exp_stats;
    char		    *exp_data;
};

/* exp_type values */
#define	EXP_NULL    0	    /* Undefined */
#define	EXP_NFS	    1	    /* Nfs/Afs translator */

/* exp_states values */
#define	EXP_EXPORTED	1
#define	EXP_UNIXMODE	2
#define	EXP_PWSYNC	4
#define	EXP_SUBMOUNTS	8


#define	AFS_NFSFULLFID	1

#define	EXP_REQHANDLER(EXP, CRED, HOST, PAG, EXPP) \
        (*(EXP)->exp_op->export_reqhandler)(EXP, CRED, HOST, PAG, EXPP)
#define	EXP_HOLD(EXP)	\
        (*(EXP)->exp_op->export_hold)(EXP)
#define	EXP_RELE(EXP)	\
        (*(EXP)->exp_op->export_rele)(EXP)
#define	EXP_SYSNAME(EXP, INNAME, OUTNAME)   \
        (*(EXP)->exp_op->export_sysname)(EXP, INNAME, OUTNAME)
#define	EXP_GC(EXP, param)	\
        (*(EXP)->exp_op->export_garbagecollect)(EXP, param)
#define	EXP_STATISTICS(EXP)	\
        (*(EXP)->exp_op->export_statistics)(EXP)

struct Sfid {
    u_long padding;
    u_long Cell;
    u_long Volume;
    u_long Vnode;
    u_long Unique;
#ifdef	AFS_SUN5_ENV
    struct cred *credp;
#endif
};


#endif /* __EXPORTER__ */
