|
|
1.1 root 1: /*
2: * this is a copy of the V10 <sys/netb.h>
3: * it is here so that it is easy to find when carrying
4: * the library around
5: */
6:
7: /*
8: * network filesystem protocol
9: *
10: * messages are character arrays,
11: * encoding structures of characters,
12: * two-byte shorts, and four-byte longs.
13: * shorts and longs have a specific byte order,
14: * and should be accessed through the macros below.
15: */
16:
17: /*
18: * general numbers
19: */
20: #define NETB 2 /* protocol version */
21: #define NBMAXMSG (5*1024) /* max message size */
22: #define NBROOTTAG 0 /* i_tag assumed for the root */
23:
24:
25: /*
26: * turn network numbers into host numbers
27: * unsigned char *p
28: */
29: #define frnetlong(p, off) (p[off+0]+(p[off+1]<<8)+((long)p[off+2]<<16)+((long)p[off+3]<<24))
30: #define frnetshort(p, off) (p[off+0]+(p[off+1]<<8))
31: #define frnetchar(p, off) p[off]
32:
33: /*
34: * turn host numbers to network numbers
35: */
36:
37: #define tonetlong(p, off, l) (p[off+0]=(l), p[off+1]=(l)>>8, p[off+2]=(l)>>16, p[off+3]=(l)>>24)
38: #define tonetshort(p, off, s) (p[off+0]=(s), p[off+1]=(s)>>8)
39: #define tonetchar(p, off, c) (p[off]=c)
40:
41: /*
42: * messages from client to server
43: */
44:
45: /*
46: * general header
47: */
48:
49: #define SNB_VERSION 0 /* (char) version */
50: #define SNB_CMD 1 /* (char) command; see below */
51: #define SNB_FLAGS 2 /* (char) mostly for nami */
52: /* one byte of padding */
53: #define SNB_TRANNUM 4 /* (long) unique transaction ID */
54: #define SNB_LEN 8 /* (long) including header and any data */
55: #define SNB_TAG 12 /* (long) which file this is about */
56: #define SNB_UID 16 /* (short) who wants to do IO */
57: #define SNB_GID 18 /* (short) ditto */
58: /* four more bytes of junk */
59: #define SNBSIZE 24
60:
61: /*
62: * commands
63: */
64: #define NBPUT 1 /* put file */
65: /* 2 was NAGET */
66: #define NBUPD 3 /* update attributes */
67: #define NBREAD 4 /* read data */
68: #define NBWRT 5 /* write data */
69: #define NBNAMI 6 /* translate name (with many side effects) */
70: #define NBSTAT 7 /* read file status */
71: #define NBIOCTL 8 /* ioctl */
72: #define NBTRNC 9 /* truncate */
73: #define NBDIR 10 /* directory read */
74:
75: /*
76: * flags, for namei sub-function code,
77: * are defined in inode.h
78: * should they be here too?
79: */
80:
81: /*
82: * additional data for each command
83: */
84:
85: /*
86: * update
87: */
88: #define SUP_MODE (SNBSIZE+0) /* (short) new mode */
89: /* two bytes for raw device (mknod) */
90: /* four bytes of junk */
91: #define SUP_ATIME (SNBSIZE+8) /* (long) access time */
92: #define SUP_MTIME (SNBSIZE+12) /* (long) mod time */
93: #define SUPSIZE (SNBSIZE+16)
94:
95: /*
96: * read, dirread
97: */
98: #define SRD_LEN (SNBSIZE+0) /* (long) how much to read */
99: #define SRD_OFFSET (SNBSIZE+4) /* (long) file offset */
100: #define SRDSIZE (SNBSIZE+8)
101:
102: /*
103: * write
104: */
105: #define SWR_LEN (SNBSIZE+0) /* (long) how much to write */
106: #define SWR_OFFSET (SNBSIZE+4) /* (long) where to write it */
107: #define SWRSIZE (SNBSIZE+8)
108: /* data to be written follows immediately */
109:
110: /*
111: * namei
112: */
113: #define SNM_MODE (SNBSIZE+0) /* (short) mode for creat */
114: #define SNM_DEV (SNBSIZE+2) /* (short) device (mknod); used? */
115: #define SNM_INO (SNBSIZE+4) /* (long) i-number, for link */
116: #define SNMSIZE (SNBSIZE+8)
117: /* name to be translated follows immediately */
118:
119: /*
120: * SNB_FLAGS: namei function codes
121: * these must match the numbers in inode.h;
122: * they are repeated here so the protocol
123: * is all defined in one place
124: */
125: #define NI_SEARCH 0 /* search only (0 value known to nilargnamei, beware) */
126: #define NI_DEL 1 /* unlink this file */
127: #define NI_CREAT 2 /* create it if it doesn't exits */
128: #define NI_NXCREAT 3 /* create it, error if it already exists */
129: #define NI_LINK 4 /* make a link */
130: #define NI_MKDIR 5 /* make a directory */
131: #define NI_RMDIR 6 /* remove a directory */
132:
133: /*
134: * stat
135: */
136: #define SST_TIME (SNBSIZE+0) /* (long) time, for synchronization */
137: /* four bytes of padding */
138: #define SSTSIZE (SNBSIZE+8)
139:
140: /*
141: * ioctl
142: */
143: #define SIO_CMD (SNBSIZE+0) /* (long) function code */
144: #define SIO_FLAG (SNBSIZE+4) /* (short) file flags; silly? */
145: /* two bytes padding */
146: #define SIOSIZE (SNBSIZE+8)
147: #define SIODATA 64 /* bytes of data follow */
148: /* does some ioctl data follow? */
149:
150: /*
151: * responses from server to client
152: */
153:
154: /*
155: * general header
156: */
157: #define RNB_TRANNUM 0 /* (long) transaction ID */
158: #define RNB_ERRNO 4 /* (short) error number; zero if OK */
159: #define RNB_FLAGS 6 /* (char) see below */
160: /* one byte of pad */
161: #define RNB_LEN 8 /* (long) including header and any data */
162: #define RNB_FSIZE 12 /* (long) file size after write (why here?) */
163: #define RNBSIZE 16
164:
165: /*
166: * flags
167: */
168: #define NBROOT 1 /* namei popped out of root */
169: #define NBEND 2 /* last read was short, probably end of file */
170:
171: /*
172: * extra data for each type of response
173: */
174:
175: /*
176: * read: no extra header info;
177: * data follows at offset RNBSIZE
178: */
179:
180: /*
181: * namei
182: * contains an entire stat response
183: * so sys stat sends one namei message and no stat message
184: * not exactly a stat message, though: RNM_USED is in the middle
185: */
186:
187: #define RNM_TAG (RNBSIZE+0) /* (long) new file */
188: #define RNM_INO (RNBSIZE+4) /* (long) its i-number */
189: #define RNM_DEV (RNBSIZE+8) /* (short) st_dev */
190: #define RNM_MODE (RNBSIZE+10) /* (short) mode */
191: #define RNM_USED (RNBSIZE+12) /* (long) filename chars consumed (NBROOT only) */
192: #define RNM_NLINK (RNBSIZE+16) /* (short) */
193: #define RNM_UID (RNBSIZE+18) /* (short) */
194: #define RNM_GID (RNBSIZE+20) /* (short) */
195: #define RNM_RDEV (RNBSIZE+22) /* (short) st_rdev; useful? */
196: #define RNM_SIZE (RNBSIZE+24) /* (long) */
197: #define RNM_ATIME (RNBSIZE+28) /* (long) */
198: #define RNM_MTIME (RNBSIZE+32) /* (long) */
199: #define RNM_CTIME (RNBSIZE+36) /* (long) */
200: #define RNMSIZE (RNBSIZE+40)
201:
202: /*
203: * stat
204: */
205: #define RST_INO (RNBSIZE+0) /* (long) i-number */
206: #define RST_DEV (RNBSIZE+4) /* (short) st_dev */
207: #define RST_MODE (RNBSIZE+6) /* (short) */
208: #define RST_NLINK (RNBSIZE+8) /* (short) */
209: #define RST_UID (RNBSIZE+10) /* (short) */
210: #define RST_GID (RNBSIZE+12) /* (short) */
211: #define RST_RDEV (RNBSIZE+14) /* (short) st_rdev; used? */
212: #define RST_SIZE (RNBSIZE+16) /* (long) */
213: #define RST_ATIME (RNBSIZE+20) /* (long) */
214: #define RST_MTIME (RNBSIZE+24) /* (long) */
215: #define RST_CTIME (RNBSIZE+28) /* (long) */
216: #define RSTSIZE (RNBSIZE+32)
217:
218: /*
219: * ioctl:
220: * no header, just SIOSIZE bytes of ioctl data
221: */
222:
223: /*
224: * dirread
225: */
226: #define RDI_USED (RNBSIZE+0) /* (long) advance file pointer this much */
227: /* four bytes of junk */
228: #define RDISIZE (RNBSIZE+8)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.