227 lines
5.5 KiB
C
227 lines
5.5 KiB
C
/*
|
|
* Copyright 2016 Jakub Klama <jceel@FreeBSD.org>
|
|
* All rights reserved
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted providing that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Based on libixp code: ©2007-2010 Kris Maglione <maglione.k at Gmail>
|
|
*/
|
|
|
|
#ifndef LIB9P_FCALL_H
|
|
#define LIB9P_FCALL_H
|
|
|
|
#define L9P_MAX_WELEM 256
|
|
|
|
enum l9p_ftype {
|
|
L9P_TVERSION = 100,
|
|
L9P_RVERSION,
|
|
L9P_TAUTH = 102,
|
|
L9P_RAUTH,
|
|
L9P_TATTACH = 104,
|
|
L9P_RATTACH,
|
|
L9P_TERROR = 106, /* illegal */
|
|
L9P_RERROR,
|
|
L9P_TFLUSH = 108,
|
|
L9P_RFLUSH,
|
|
L9P_TWALK = 110,
|
|
L9P_RWALK,
|
|
L9P_TOPEN = 112,
|
|
L9P_ROPEN,
|
|
L9P_TCREATE = 114,
|
|
L9P_RCREATE,
|
|
L9P_TREAD = 116,
|
|
L9P_RREAD,
|
|
L9P_TWRITE = 118,
|
|
L9P_RWRITE,
|
|
L9P_TCLUNK = 120,
|
|
L9P_RCLUNK,
|
|
L9P_TREMOVE = 122,
|
|
L9P_RREMOVE,
|
|
L9P_TSTAT = 124,
|
|
L9P_RSTAT,
|
|
L9P_TWSTAT = 126,
|
|
L9P_RWSTAT,
|
|
};
|
|
|
|
enum l9p_qid_type
|
|
{
|
|
L9P_QTDIR = 0x80, /* type bit for directories */
|
|
L9P_QTAPPEND = 0x40,/* type bit for append only files */
|
|
L9P_QTEXCL = 0x20, /* type bit for exclusive use files */
|
|
L9P_QTMOUNT = 0x10, /* type bit for mounted channel */
|
|
L9P_QTAUTH = 0x08, /* type bit for authentication file */
|
|
L9P_QTTMP = 0x04, /* type bit for non-backed-up file */
|
|
L9P_QTSYMLINK = 0x02,/* type bit for symbolic link */
|
|
L9P_QTFILE = 0x00 /* type bits for plain file */
|
|
};
|
|
|
|
#define P9_DMDIR 0x80000000 /* mode bit for directories */
|
|
#define P9_DMAPPEND 0x40000000 /* mode bit for append only files */
|
|
#define P9_DMEXCL 0x20000000 /* mode bit for exclusive use files */
|
|
#define P9_DMMOUNT 0x10000000 /* mode bit for mounted channel */
|
|
#define P9_DMAUTH 0x08000000 /* mode bit for authentication file */
|
|
#define P9_DMTMP 0x04000000 /* mode bit for non-backed-up file */
|
|
#define P9_DMSYMLINK 0x02000000 /* mode bit for symbolic link (Unix, 9P2000.u) */
|
|
#define P9_DMDEVICE 0x00800000 /* mode bit for device file (Unix, 9P2000.u) */
|
|
#define P9_DMNAMEDPIPE 0x00200000 /* mode bit for named pipe (Unix, 9P2000.u) */
|
|
#define P9_DMSOCKET 0x00100000 /* mode bit for socket (Unix, 9P2000.u) */
|
|
#define P9_DMSETUID 0x00080000 /* mode bit for setuid (Unix, 9P2000.u) */
|
|
#define P9_DMSETGID 0x00040000 /* mode bit for setgid (Unix, 9P2000.u) */
|
|
|
|
struct l9p_hdr
|
|
{
|
|
uint8_t type;
|
|
uint16_t tag;
|
|
uint32_t fid;
|
|
};
|
|
|
|
struct l9p_qid
|
|
{
|
|
enum l9p_qid_type type;
|
|
uint32_t version;
|
|
uint64_t path;
|
|
};
|
|
|
|
struct l9p_stat
|
|
{
|
|
uint16_t type;
|
|
uint32_t dev;
|
|
struct l9p_qid qid;
|
|
uint32_t mode;
|
|
uint32_t atime;
|
|
uint32_t mtime;
|
|
uint64_t length;
|
|
char *name;
|
|
char *uid;
|
|
char *gid;
|
|
char *muid;
|
|
};
|
|
|
|
struct l9p_f_version
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint32_t msize;
|
|
char *version;
|
|
};
|
|
|
|
struct l9p_f_tflush
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint16_t oldtag;
|
|
};
|
|
|
|
struct l9p_f_error
|
|
{
|
|
struct l9p_hdr hdr;
|
|
char *ename;
|
|
};
|
|
|
|
struct l9p_f_ropen
|
|
{
|
|
struct l9p_hdr hdr;
|
|
struct l9p_qid qid;
|
|
uint32_t iounit;
|
|
};
|
|
|
|
struct l9p_f_rauth
|
|
{
|
|
struct l9p_hdr hdr;
|
|
struct l9p_qid aqid;
|
|
};
|
|
|
|
struct l9p_f_attach
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint32_t afid;
|
|
char *uname;
|
|
char *aname;
|
|
};
|
|
|
|
struct l9p_f_tcreate
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint32_t perm;
|
|
char *name;
|
|
uint8_t mode; /* +Topen */
|
|
};
|
|
|
|
struct l9p_f_twalk
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint32_t newfid;
|
|
uint16_t nwname;
|
|
char *wname[L9P_MAX_WELEM];
|
|
};
|
|
|
|
struct l9p_f_rwalk
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint16_t nwqid;
|
|
struct l9p_qid wqid[L9P_MAX_WELEM];
|
|
};
|
|
|
|
struct l9p_f_io
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint64_t offset; /* Tread, Twrite */
|
|
uint32_t count; /* Tread, Twrite, Rread */
|
|
char *data; /* Twrite, Rread */
|
|
};
|
|
|
|
struct l9p_f_rstat
|
|
{
|
|
struct l9p_hdr hdr;
|
|
uint16_t nstat;
|
|
uint8_t *stat;
|
|
};
|
|
|
|
struct l9p_f_twstat
|
|
{
|
|
struct l9p_hdr hdr;
|
|
struct l9p_stat stat;
|
|
};
|
|
|
|
union l9p_fcall
|
|
{
|
|
struct l9p_hdr hdr;
|
|
struct l9p_f_version version;
|
|
struct l9p_f_tflush tflush;
|
|
struct l9p_f_ropen ropen;
|
|
struct l9p_f_ropen rcreate;
|
|
struct l9p_f_ropen rattach;
|
|
struct l9p_f_error error;
|
|
struct l9p_f_rauth rauth;
|
|
struct l9p_f_attach tattach;
|
|
struct l9p_f_attach tauth;
|
|
struct l9p_f_tcreate tcreate;
|
|
struct l9p_f_tcreate topen;
|
|
struct l9p_f_twalk twalk;
|
|
struct l9p_f_rwalk rwalk;
|
|
struct l9p_f_twstat twstat;
|
|
struct l9p_f_rstat rstat;
|
|
struct l9p_f_io io;
|
|
};
|
|
|
|
#endif //LIB9P_FCALL_H
|