19e82cf6aSEric Van Hensbergen /* 29e82cf6aSEric Van Hensbergen * V9FS definitions. 39e82cf6aSEric Van Hensbergen * 49e82cf6aSEric Van Hensbergen * Copyright (C) 2004 by Eric Van Hensbergen <ericvh@gmail.com> 59e82cf6aSEric Van Hensbergen * Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov> 69e82cf6aSEric Van Hensbergen * 79e82cf6aSEric Van Hensbergen * This program is free software; you can redistribute it and/or modify 842e8c509SEric Van Hensbergen * it under the terms of the GNU General Public License version 2 942e8c509SEric Van Hensbergen * as published by the Free Software Foundation. 109e82cf6aSEric Van Hensbergen * 119e82cf6aSEric Van Hensbergen * This program is distributed in the hope that it will be useful, 129e82cf6aSEric Van Hensbergen * but WITHOUT ANY WARRANTY; without even the implied warranty of 139e82cf6aSEric Van Hensbergen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 149e82cf6aSEric Van Hensbergen * GNU General Public License for more details. 159e82cf6aSEric Van Hensbergen * 169e82cf6aSEric Van Hensbergen * You should have received a copy of the GNU General Public License 179e82cf6aSEric Van Hensbergen * along with this program; if not, write to: 189e82cf6aSEric Van Hensbergen * Free Software Foundation 199e82cf6aSEric Van Hensbergen * 51 Franklin Street, Fifth Floor 209e82cf6aSEric Van Hensbergen * Boston, MA 02111-1301 USA 219e82cf6aSEric Van Hensbergen * 229e82cf6aSEric Van Hensbergen */ 239e82cf6aSEric Van Hensbergen 249e82cf6aSEric Van Hensbergen /* 259e82cf6aSEric Van Hensbergen * Session structure provides information for an opened session 269e82cf6aSEric Van Hensbergen * 279e82cf6aSEric Van Hensbergen */ 289e82cf6aSEric Van Hensbergen 299e82cf6aSEric Van Hensbergen struct v9fs_session_info { 309e82cf6aSEric Van Hensbergen /* options */ 319e82cf6aSEric Van Hensbergen unsigned int maxdata; 322405669bSLatchesar Ionkov unsigned char flags; /* session flags */ 339e82cf6aSEric Van Hensbergen unsigned char nodev; /* set to 1 if no disable device mapping */ 349e82cf6aSEric Van Hensbergen unsigned short debug; /* debug level */ 359e82cf6aSEric Van Hensbergen unsigned int afid; /* authentication fid */ 36e03abc0cSEric Van Hensbergen unsigned int cache; /* cache mode */ 379e82cf6aSEric Van Hensbergen 38a80d923eSEric Van Hensbergen char *options; /* copy of mount options */ 39ba17674fSLatchesar Ionkov char *uname; /* user name to mount as */ 40ba17674fSLatchesar Ionkov char *aname; /* name of remote hierarchy being mounted */ 41bd32b82dSLatchesar Ionkov unsigned int dfltuid; /* default uid/muid for legacy support */ 42bd32b82dSLatchesar Ionkov unsigned int dfltgid; /* default gid for legacy support */ 43ba17674fSLatchesar Ionkov u32 uid; /* if ACCESS_SINGLE, the uid that has access */ 44a80d923eSEric Van Hensbergen struct p9_trans_module *trans; /* 9p transport */ 45bd238fb4SLatchesar Ionkov struct p9_client *clnt; /* 9p client */ 463cf6429aSLatchesar Ionkov struct dentry *debugfs_dir; 479e82cf6aSEric Van Hensbergen }; 489e82cf6aSEric Van Hensbergen 492405669bSLatchesar Ionkov /* session flags */ 502405669bSLatchesar Ionkov enum { 51ba17674fSLatchesar Ionkov V9FS_EXTENDED = 0x01, /* 9P2000.u */ 52ba17674fSLatchesar Ionkov V9FS_ACCESS_MASK = 0x06, /* access mask */ 53ba17674fSLatchesar Ionkov V9FS_ACCESS_SINGLE = 0x02, /* only one user can access the files */ 54ba17674fSLatchesar Ionkov V9FS_ACCESS_USER = 0x04, /* attache per user */ 55ba17674fSLatchesar Ionkov V9FS_ACCESS_ANY = 0x06, /* use the same attach for all users */ 562405669bSLatchesar Ionkov }; 572405669bSLatchesar Ionkov 58e03abc0cSEric Van Hensbergen /* possible values of ->cache */ 59e03abc0cSEric Van Hensbergen /* eventually support loose, tight, time, session, default always none */ 60e03abc0cSEric Van Hensbergen enum { 61e03abc0cSEric Van Hensbergen CACHE_NONE, /* default */ 62e03abc0cSEric Van Hensbergen CACHE_LOOSE, /* no consistency */ 63e03abc0cSEric Van Hensbergen }; 64e03abc0cSEric Van Hensbergen 653cf6429aSLatchesar Ionkov extern struct dentry *v9fs_debugfs_root; 663cf6429aSLatchesar Ionkov 67bd238fb4SLatchesar Ionkov struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *, 68bd238fb4SLatchesar Ionkov char *); 699e82cf6aSEric Van Hensbergen void v9fs_session_close(struct v9fs_session_info *v9ses); 70322b329aSEric Van Hensbergen void v9fs_session_cancel(struct v9fs_session_info *v9ses); 719e82cf6aSEric Van Hensbergen 729e82cf6aSEric Van Hensbergen #define V9FS_MAGIC 0x01021997 739e82cf6aSEric Van Hensbergen 749e82cf6aSEric Van Hensbergen /* other default globals */ 759e82cf6aSEric Van Hensbergen #define V9FS_PORT 564 769e82cf6aSEric Van Hensbergen #define V9FS_DEFUSER "nobody" 779e82cf6aSEric Van Hensbergen #define V9FS_DEFANAME "" 78bd32b82dSLatchesar Ionkov #define V9FS_DEFUID (-2) 79bd32b82dSLatchesar Ionkov #define V9FS_DEFGID (-2) 809e82cf6aSEric Van Hensbergen 81bd238fb4SLatchesar Ionkov static inline struct v9fs_session_info *v9fs_inode2v9ses(struct inode *inode) 82bd238fb4SLatchesar Ionkov { 83bd238fb4SLatchesar Ionkov return (inode->i_sb->s_fs_info); 84bd238fb4SLatchesar Ionkov } 852405669bSLatchesar Ionkov 862405669bSLatchesar Ionkov static inline int v9fs_extended(struct v9fs_session_info *v9ses) 872405669bSLatchesar Ionkov { 882405669bSLatchesar Ionkov return v9ses->flags & V9FS_EXTENDED; 892405669bSLatchesar Ionkov } 90