root/usr.sbin/puffs/mount_9p/nineproto.h
/*      $NetBSD: nineproto.h,v 1.2 2019/05/17 08:48:04 ozaki-r Exp $    */

/*
 * Copyright (c) 2007  Antti Kantee.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided 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 OR CONTRIBUTORS 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.
 */

#ifndef PUFFS9P_9PROTO_H_
#define PUFFS9P_9PROTO_H_

#include <stdint.h>

#define P9PROTO_VERSION         0
#define P9PROTO_VERSION_U       1

#define P9PROTO_VERSTR          "9P2000"
#define P9PROTO_VERSTR_U        "9P2000.u"
#define P9PROTO_VERSTR_MAXLEN   (sizeof(P9PROTO_VERSTR_U))

#define P9PROTO_T_VERSION       100
#define P9PROTO_R_VERSION       101
#define P9PROTO_T_AUTH          102
#define P9PROTO_R_AUTH          103
#define P9PROTO_T_ATTACH        104
#define P9PROTO_R_ATTACH        105
#define P9PROTO_T_ERROR         106
#define P9PROTO_R_ERROR         107
#define P9PROTO_T_FLUSH         108
#define P9PROTO_R_FLUSH         109
#define P9PROTO_T_WALK          110
#define P9PROTO_R_WALK          111
#define P9PROTO_T_OPEN          112
#define P9PROTO_R_OPEN          113
#define P9PROTO_T_CREATE        114
#define P9PROTO_R_CREATE        115
#define P9PROTO_T_READ          116
#define P9PROTO_R_READ          117
#define P9PROTO_T_WRITE         118
#define P9PROTO_R_WRITE         119
#define P9PROTO_T_CLUNK         120
#define P9PROTO_R_CLUNK         121
#define P9PROTO_T_REMOVE        122
#define P9PROTO_R_REMOVE        123
#define P9PROTO_T_STAT          124
#define P9PROTO_R_STAT          125
#define P9PROTO_T_WSTAT         126
#define P9PROTO_R_WSTAT         127
#define P9PROTO_MIN             9PROTO_T_VERSION
#define P9PROTO_MAX             9PROTO_R_MAX

#define P9PROTO_NOFID           (uint32_t)~0
#define P9PROTO_NOTAG           (uint16_t)~0

#define P9PROTO_NUNAME_UNSPECIFIED      (uint16_t)~0

/* type field in a qid */
#define P9PROTO_QID_TYPE_DIR    0x80
#define P9PROTO_QID_TYPE_APPEND 0x40
#define P9PROTO_QID_TYPE_EXCL   0x20
#define P9PROTO_QID_TYPE_MOUNT  0x10
#define P9PROTO_QID_TYPE_AUTH   0x08
/* P92000.u extensions */
#define P9PROTO_QID_TYPE_TMP    0x04
#define P9PROTO_QID_TYPE_LINK   0x02
#define P9PROTO_QID_TYPE_FILE   0x00

/* mode in open */
#define P9PROTO_OMODE_READ      0x00
#define P9PROTO_OMODE_WRITE     0x01
#define P9PROTO_OMODE_RDWR      0x02
#define P9PROTO_OMODE_EXEC      0x03
#define P9PROTO_OMODE_TRUNC     0x10
#define P9PROTO_OMODE_RMCLOSE   0x40

/* for creating directories */
#define P9PROTO_CPERM_DIR       0x80000000
#define P9PROTO_CPERM_APPEND    0x40000000
#define P9PROTO_CPERM_EXCL      0x20000000
#define P9PROTO_CPERM_MOUNT     0x10000000
#define P9PROTO_CPERM_AUTH      0x08000000
#define P9PROTO_CPERM_TMP       0x04000000
#define P9PROTO_CPERM_SYMLINK   0x02000000
/* P92000.u extensions */
#define P9PROTO_CPERM_DEVICE    0x00800000
#define P9PROTO_CPERM_NAMEDPIPE 0x00200000
#define P9PROTO_CPERM_SOCKET    0x00100000
#define P9PROTO_CPERM_SETUID    0x00080000
#define P9PROTO_CPERM_SETGID    0x00040000

/* stat non-values */
#define P9PROTO_STAT_NOVAL1     (uint8_t)~0
#define P9PROTO_STAT_NOVAL2     (uint16_t)~0
#define P9PROTO_STAT_NOVAL4     (uint32_t)~0
#define P9PROTO_STAT_NOVAL8     (uint64_t)~0
#define P9PROTO_STAT_NOSTR      ""

#endif /* PUFFS9P_PROTO_H_ */