9p: Implement TMKNOD
[cascardo/linux.git] / include / net / 9p / 9p.h
index a7fb548..ff32091 100644 (file)
@@ -86,6 +86,14 @@ do { \
 
 /**
  * enum p9_msg_t - 9P message types
+ * @P9_TSTATFS: file system status request
+ * @P9_RSTATFS: file system status response
+ * @P9_TSYMLINK: make symlink request
+ * @P9_RSYMLINK: make symlink response
+ * @P9_TMKNOD: create a special file object request
+ * @P9_RMKNOD: create a special file object response
+ * @P9_TRENAME: rename request
+ * @P9_RRENAME: rename response
  * @P9_TVERSION: version handshake request
  * @P9_RVERSION: version handshake response
  * @P9_TAUTH: request to establish authentication channel
@@ -125,6 +133,22 @@ do { \
  */
 
 enum p9_msg_t {
+       P9_TSTATFS = 8,
+       P9_RSTATFS,
+       P9_TSYMLINK = 16,
+       P9_RSYMLINK,
+       P9_TMKNOD = 18,
+       P9_RMKNOD,
+       P9_TRENAME = 20,
+       P9_RRENAME,
+       P9_TGETATTR = 24,
+       P9_RGETATTR,
+       P9_TSETATTR = 26,
+       P9_RSETATTR,
+       P9_TREADDIR = 40,
+       P9_RREADDIR,
+       P9_TLINK = 70,
+       P9_RLINK,
        P9_TVERSION = 100,
        P9_RVERSION,
        P9_TAUTH = 102,
@@ -267,6 +291,9 @@ enum p9_qid_t {
 /* ample room for Twrite/Rread header */
 #define P9_IOHDRSZ     24
 
+/* Room for readdir header */
+#define P9_READDIRHDRSZ        24
+
 /**
  * struct p9_str - length prefixed string type
  * @len: length of the string
@@ -349,7 +376,100 @@ struct p9_wstat {
        u32 n_muid;             /* 9p2000.u extensions */
 };
 
+struct p9_stat_dotl {
+       u64 st_result_mask;
+       struct p9_qid qid;
+       u32 st_mode;
+       u32 st_uid;
+       u32 st_gid;
+       u64 st_nlink;
+       u64 st_rdev;
+       u64 st_size;
+       u64 st_blksize;
+       u64 st_blocks;
+       u64 st_atime_sec;
+       u64 st_atime_nsec;
+       u64 st_mtime_sec;
+       u64 st_mtime_nsec;
+       u64 st_ctime_sec;
+       u64 st_ctime_nsec;
+       u64 st_btime_sec;
+       u64 st_btime_nsec;
+       u64 st_gen;
+       u64 st_data_version;
+};
+
+#define P9_STATS_MODE          0x00000001ULL
+#define P9_STATS_NLINK         0x00000002ULL
+#define P9_STATS_UID           0x00000004ULL
+#define P9_STATS_GID           0x00000008ULL
+#define P9_STATS_RDEV          0x00000010ULL
+#define P9_STATS_ATIME         0x00000020ULL
+#define P9_STATS_MTIME         0x00000040ULL
+#define P9_STATS_CTIME         0x00000080ULL
+#define P9_STATS_INO           0x00000100ULL
+#define P9_STATS_SIZE          0x00000200ULL
+#define P9_STATS_BLOCKS                0x00000400ULL
+
+#define P9_STATS_BTIME         0x00000800ULL
+#define P9_STATS_GEN           0x00001000ULL
+#define P9_STATS_DATA_VERSION  0x00002000ULL
+
+#define P9_STATS_BASIC         0x000007ffULL /* Mask for fields up to BLOCKS */
+#define P9_STATS_ALL           0x00003fffULL /* Mask for All fields above */
+
+/**
+ * struct p9_iattr_dotl - P9 inode attribute for setattr
+ * @valid: bitfield specifying which fields are valid
+ *         same as in struct iattr
+ * @mode: File permission bits
+ * @uid: user id of owner
+ * @gid: group id
+ * @size: File size
+ * @atime_sec: Last access time, seconds
+ * @atime_nsec: Last access time, nanoseconds
+ * @mtime_sec: Last modification time, seconds
+ * @mtime_nsec: Last modification time, nanoseconds
+ */
+
+struct p9_iattr_dotl {
+       u32 valid;
+       u32 mode;
+       u32 uid;
+       u32 gid;
+       u64 size;
+       u64 atime_sec;
+       u64 atime_nsec;
+       u64 mtime_sec;
+       u64 mtime_nsec;
+};
+
 /* Structures for Protocol Operations */
+struct p9_tstatfs {
+       u32 fid;
+};
+
+struct p9_rstatfs {
+       u32 type;
+       u32 bsize;
+       u64 blocks;
+       u64 bfree;
+       u64 bavail;
+       u64 files;
+       u64 ffree;
+       u64 fsid;
+       u32 namelen;
+};
+
+struct p9_trename {
+       u32 fid;
+       u32 newdirfid;
+       struct p9_str name;
+};
+
+struct p9_rrename {
+};
+
 struct p9_tversion {
        u32 msize;
        struct p9_str version;
@@ -452,6 +572,18 @@ struct p9_rwrite {
        u32 count;
 };
 
+struct p9_treaddir {
+       u32 fid;
+       u64 offset;
+       u32 count;
+};
+
+struct p9_rreaddir {
+       u32 count;
+       u8 *data;
+};
+
+
 struct p9_tclunk {
        u32 fid;
 };