154946Sheideman /* 263248Sbostic * Copyright (c) 1992, 1993 363248Sbostic * The Regents of the University of California. All rights reserved. 454946Sheideman * All rights reserved. 554946Sheideman * 654946Sheideman * This code is derived from software donated to Berkeley by 754957Sheideman * the UCLA Ficus project. 854946Sheideman * 954957Sheideman * %sccs.include.redist.c% 1054946Sheideman * 11*65491Spendry * @(#)umap.h 8.2 (Berkeley) 01/05/94 1254946Sheideman * 1354957Sheideman * @(#)null_vnops.c 1.5 (Berkeley) 7/10/92 1454946Sheideman */ 1554946Sheideman 1654946Sheideman #define MAPFILEENTRIES 64 1754946Sheideman #define GMAPFILEENTRIES 16 1854946Sheideman #define NOBODY 32767 1954957Sheideman #define NULLGROUP 65534 2054946Sheideman 2154946Sheideman struct umap_args { 2254946Sheideman char *target; /* Target of loopback */ 2354946Sheideman int nentries; /* # of entries in user map array */ 2454946Sheideman int gnentries; /* # of entries in group map array */ 25*65491Spendry u_long (*mapdata)[2]; /* pointer to array of user mappings */ 26*65491Spendry u_long (*gmapdata)[2]; /* pointer to array of group mappings */ 2754946Sheideman }; 2854946Sheideman 2954946Sheideman struct umap_mount { 3054946Sheideman struct mount *umapm_vfs; 3154946Sheideman struct vnode *umapm_rootvp; /* Reference to root umap_node */ 3254946Sheideman int info_nentries; /* number of uid mappings */ 33*65491Spendry int info_gnentries; /* number of gid mappings */ 34*65491Spendry u_long info_mapdata[MAPFILEENTRIES][2]; /* mapping data for 3554946Sheideman user mapping in ficus */ 36*65491Spendry u_long info_gmapdata[GMAPFILEENTRIES][2]; /*mapping data for 3754946Sheideman group mapping in ficus */ 3854946Sheideman }; 3954946Sheideman 4054946Sheideman #ifdef KERNEL 4154946Sheideman /* 4254946Sheideman * A cache of vnode references 4354946Sheideman */ 4454946Sheideman struct umap_node { 4554946Sheideman struct umap_node *umap_forw; /* Hash chain */ 4654946Sheideman struct umap_node *umap_back; 4754946Sheideman struct vnode *umap_lowervp; /* Aliased vnode - VREFed once */ 4854946Sheideman struct vnode *umap_vnode; /* Back pointer to vnode/umap_node */ 4954946Sheideman }; 5054946Sheideman 5154946Sheideman extern int umap_node_create __P((struct mount *mp, struct vnode *target, struct vnode **vpp)); 52*65491Spendry extern u_long umap_reverse_findid __P((u_long id, u_long map[][2], int nentries)); 53*65491Spendry extern void umap_mapids __P((struct mount *v_mount, struct ucred *credp)); 5454946Sheideman 5554946Sheideman #define MOUNTTOUMAPMOUNT(mp) ((struct umap_mount *)((mp)->mnt_data)) 5654946Sheideman #define VTOUMAP(vp) ((struct umap_node *)(vp)->v_data) 5754957Sheideman #define UMAPTOV(xp) ((xp)->umap_vnode) 5854946Sheideman #ifdef UMAPFS_DIAGNOSTIC 5954946Sheideman extern struct vnode *umap_checkvp __P((struct vnode *vp, char *fil, int lno)); 6054946Sheideman #define UMAPVPTOLOWERVP(vp) umap_checkvp((vp), __FILE__, __LINE__) 6154946Sheideman #else 6254946Sheideman #define UMAPVPTOLOWERVP(vp) (VTOUMAP(vp)->umap_lowervp) 6354946Sheideman #endif 6454946Sheideman 6554946Sheideman extern int (**umap_vnodeop_p)(); 6654946Sheideman extern struct vfsops umap_vfsops; 6754946Sheideman #endif /* KERNEL */ 68