154946Sheideman /* 263248Sbostic * Copyright (c) 1992, 1993 363248Sbostic * The Regents of the University of California. All rights reserved. 454946Sheideman * 554946Sheideman * This code is derived from software donated to Berkeley by 654957Sheideman * the UCLA Ficus project. 754946Sheideman * 854957Sheideman * %sccs.include.redist.c% 954946Sheideman * 10*67717Smckusick * @(#)umap.h 8.4 (Berkeley) 08/20/94 1154946Sheideman * 1254957Sheideman * @(#)null_vnops.c 1.5 (Berkeley) 7/10/92 1354946Sheideman */ 1454946Sheideman 1554946Sheideman #define MAPFILEENTRIES 64 1654946Sheideman #define GMAPFILEENTRIES 16 1754946Sheideman #define NOBODY 32767 1854957Sheideman #define NULLGROUP 65534 1954946Sheideman 2054946Sheideman struct umap_args { 2154946Sheideman char *target; /* Target of loopback */ 2254946Sheideman int nentries; /* # of entries in user map array */ 2354946Sheideman int gnentries; /* # of entries in group map array */ 2465491Spendry u_long (*mapdata)[2]; /* pointer to array of user mappings */ 2565491Spendry u_long (*gmapdata)[2]; /* pointer to array of group mappings */ 2654946Sheideman }; 2754946Sheideman 2854946Sheideman struct umap_mount { 2954946Sheideman struct mount *umapm_vfs; 3054946Sheideman struct vnode *umapm_rootvp; /* Reference to root umap_node */ 3154946Sheideman int info_nentries; /* number of uid mappings */ 3265491Spendry int info_gnentries; /* number of gid mappings */ 3365491Spendry u_long info_mapdata[MAPFILEENTRIES][2]; /* mapping data for 3454946Sheideman user mapping in ficus */ 3565491Spendry u_long info_gmapdata[GMAPFILEENTRIES][2]; /*mapping data for 3654946Sheideman group mapping in ficus */ 3754946Sheideman }; 3854946Sheideman 3954946Sheideman #ifdef KERNEL 4054946Sheideman /* 4154946Sheideman * A cache of vnode references 4254946Sheideman */ 4354946Sheideman struct umap_node { 44*67717Smckusick LIST_ENTRY(umap_node) umap_hash; /* Hash list */ 4554946Sheideman struct vnode *umap_lowervp; /* Aliased vnode - VREFed once */ 4654946Sheideman struct vnode *umap_vnode; /* Back pointer to vnode/umap_node */ 4754946Sheideman }; 4854946Sheideman 4954946Sheideman extern int umap_node_create __P((struct mount *mp, struct vnode *target, struct vnode **vpp)); 5065491Spendry extern u_long umap_reverse_findid __P((u_long id, u_long map[][2], int nentries)); 5165491Spendry extern void umap_mapids __P((struct mount *v_mount, struct ucred *credp)); 5254946Sheideman 5354946Sheideman #define MOUNTTOUMAPMOUNT(mp) ((struct umap_mount *)((mp)->mnt_data)) 5454946Sheideman #define VTOUMAP(vp) ((struct umap_node *)(vp)->v_data) 5554957Sheideman #define UMAPTOV(xp) ((xp)->umap_vnode) 5654946Sheideman #ifdef UMAPFS_DIAGNOSTIC 5754946Sheideman extern struct vnode *umap_checkvp __P((struct vnode *vp, char *fil, int lno)); 5854946Sheideman #define UMAPVPTOLOWERVP(vp) umap_checkvp((vp), __FILE__, __LINE__) 5954946Sheideman #else 6054946Sheideman #define UMAPVPTOLOWERVP(vp) (VTOUMAP(vp)->umap_lowervp) 6154946Sheideman #endif 6254946Sheideman 6354946Sheideman extern int (**umap_vnodeop_p)(); 6454946Sheideman extern struct vfsops umap_vfsops; 6554946Sheideman #endif /* KERNEL */ 66