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 89e82cf6aSEric Van Hensbergen * it under the terms of the GNU General Public License as published by 99e82cf6aSEric Van Hensbergen * the Free Software Foundation; either version 2 of the License, or 109e82cf6aSEric Van Hensbergen * (at your option) any later version. 119e82cf6aSEric Van Hensbergen * 129e82cf6aSEric Van Hensbergen * This program is distributed in the hope that it will be useful, 139e82cf6aSEric Van Hensbergen * but WITHOUT ANY WARRANTY; without even the implied warranty of 149e82cf6aSEric Van Hensbergen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 159e82cf6aSEric Van Hensbergen * GNU General Public License for more details. 169e82cf6aSEric Van Hensbergen * 179e82cf6aSEric Van Hensbergen * You should have received a copy of the GNU General Public License 189e82cf6aSEric Van Hensbergen * along with this program; if not, write to: 199e82cf6aSEric Van Hensbergen * Free Software Foundation 209e82cf6aSEric Van Hensbergen * 51 Franklin Street, Fifth Floor 219e82cf6aSEric Van Hensbergen * Boston, MA 02111-1301 USA 229e82cf6aSEric Van Hensbergen * 239e82cf6aSEric Van Hensbergen */ 249e82cf6aSEric Van Hensbergen 259e82cf6aSEric Van Hensbergen /* 269e82cf6aSEric Van Hensbergen * Idpool structure provides lock and id management 279e82cf6aSEric Van Hensbergen * 289e82cf6aSEric Van Hensbergen */ 299e82cf6aSEric Van Hensbergen 309e82cf6aSEric Van Hensbergen struct v9fs_idpool { 319e82cf6aSEric Van Hensbergen struct semaphore lock; 329e82cf6aSEric Van Hensbergen struct idr pool; 339e82cf6aSEric Van Hensbergen }; 349e82cf6aSEric Van Hensbergen 359e82cf6aSEric Van Hensbergen /* 369e82cf6aSEric Van Hensbergen * Session structure provides information for an opened session 379e82cf6aSEric Van Hensbergen * 389e82cf6aSEric Van Hensbergen */ 399e82cf6aSEric Van Hensbergen 409e82cf6aSEric Van Hensbergen struct v9fs_session_info { 419e82cf6aSEric Van Hensbergen /* options */ 429e82cf6aSEric Van Hensbergen unsigned int maxdata; 439e82cf6aSEric Van Hensbergen unsigned char extended; /* set to 1 if we are using UNIX extensions */ 449e82cf6aSEric Van Hensbergen unsigned char nodev; /* set to 1 if no disable device mapping */ 459e82cf6aSEric Van Hensbergen unsigned short port; /* port to connect to */ 469e82cf6aSEric Van Hensbergen unsigned short debug; /* debug level */ 479e82cf6aSEric Van Hensbergen unsigned short proto; /* protocol to use */ 489e82cf6aSEric Van Hensbergen unsigned int afid; /* authentication fid */ 499e82cf6aSEric Van Hensbergen unsigned int rfdno; /* read file descriptor number */ 509e82cf6aSEric Van Hensbergen unsigned int wfdno; /* write file descriptor number */ 519e82cf6aSEric Van Hensbergen 529e82cf6aSEric Van Hensbergen 539e82cf6aSEric Van Hensbergen char *name; /* user name to mount as */ 549e82cf6aSEric Van Hensbergen char *remotename; /* name of remote hierarchy being mounted */ 559e82cf6aSEric Van Hensbergen unsigned int uid; /* default uid/muid for legacy support */ 569e82cf6aSEric Van Hensbergen unsigned int gid; /* default gid for legacy support */ 579e82cf6aSEric Van Hensbergen 589e82cf6aSEric Van Hensbergen /* book keeping */ 599e82cf6aSEric Van Hensbergen struct v9fs_idpool fidpool; /* The FID pool for file descriptors */ 609e82cf6aSEric Van Hensbergen struct v9fs_idpool tidpool; /* The TID pool for transactions ids */ 619e82cf6aSEric Van Hensbergen 629e82cf6aSEric Van Hensbergen /* transport information */ 639e82cf6aSEric Van Hensbergen struct v9fs_transport *transport; 649e82cf6aSEric Van Hensbergen 659e82cf6aSEric Van Hensbergen int inprogress; /* session in progress => true */ 669e82cf6aSEric Van Hensbergen int shutdown; /* session shutting down. no more attaches. */ 679e82cf6aSEric Van Hensbergen unsigned char session_hung; 689e82cf6aSEric Van Hensbergen 699e82cf6aSEric Van Hensbergen /* mux private data */ 709e82cf6aSEric Van Hensbergen struct v9fs_fcall *curfcall; 719e82cf6aSEric Van Hensbergen wait_queue_head_t read_wait; 729e82cf6aSEric Van Hensbergen struct completion fcread; 739e82cf6aSEric Van Hensbergen struct completion proccmpl; 749e82cf6aSEric Van Hensbergen struct task_struct *recvproc; 759e82cf6aSEric Van Hensbergen 769e82cf6aSEric Van Hensbergen spinlock_t muxlock; 779e82cf6aSEric Van Hensbergen struct list_head mux_fcalls; 789e82cf6aSEric Van Hensbergen }; 799e82cf6aSEric Van Hensbergen 809e82cf6aSEric Van Hensbergen /* possible values of ->proto */ 819e82cf6aSEric Van Hensbergen enum { 829e82cf6aSEric Van Hensbergen PROTO_TCP, 839e82cf6aSEric Van Hensbergen PROTO_UNIX, 849e82cf6aSEric Van Hensbergen PROTO_FD, 859e82cf6aSEric Van Hensbergen }; 869e82cf6aSEric Van Hensbergen 879e82cf6aSEric Van Hensbergen int v9fs_session_init(struct v9fs_session_info *, const char *, char *); 889e82cf6aSEric Van Hensbergen struct v9fs_session_info *v9fs_inode2v9ses(struct inode *); 899e82cf6aSEric Van Hensbergen void v9fs_session_close(struct v9fs_session_info *v9ses); 909e82cf6aSEric Van Hensbergen int v9fs_get_idpool(struct v9fs_idpool *p); 919e82cf6aSEric Van Hensbergen void v9fs_put_idpool(int id, struct v9fs_idpool *p); 929e82cf6aSEric Van Hensbergen int v9fs_get_option(char *opts, char *name, char *buf, int buflen); 939e82cf6aSEric Van Hensbergen long long v9fs_get_int_option(char *opts, char *name, long long dflt); 949e82cf6aSEric Van Hensbergen int v9fs_parse_tcp_devname(const char *devname, char **addr, char **remotename); 959e82cf6aSEric Van Hensbergen 969e82cf6aSEric Van Hensbergen #define V9FS_MAGIC 0x01021997 979e82cf6aSEric Van Hensbergen 989e82cf6aSEric Van Hensbergen /* other default globals */ 999e82cf6aSEric Van Hensbergen #define V9FS_PORT 564 1009e82cf6aSEric Van Hensbergen #define V9FS_DEFUSER "nobody" 1019e82cf6aSEric Van Hensbergen #define V9FS_DEFANAME "" 1029e82cf6aSEric Van Hensbergen 1039e82cf6aSEric Van Hensbergen /* inital pool sizes for fids and tags */ 1049e82cf6aSEric Van Hensbergen #define V9FS_START_FIDS 8192 1059e82cf6aSEric Van Hensbergen #define V9FS_START_TIDS 256 106