19a747e4fSDavid du Colombier #define DIRREC 116 /* size of a directory ascii record */ 29a747e4fSDavid du Colombier #define ERRREC 64 /* size of a error record */ 39a747e4fSDavid du Colombier #define MAXMSG 160 /* max header sans data */ 49a747e4fSDavid du Colombier 59a747e4fSDavid du Colombier typedef struct Oldfcall Oldfcall; 69a747e4fSDavid du Colombier 79a747e4fSDavid du Colombier struct Oldfcall 89a747e4fSDavid du Colombier { 99a747e4fSDavid du Colombier char type; 109a747e4fSDavid du Colombier ushort fid; 119a747e4fSDavid du Colombier short err; 129a747e4fSDavid du Colombier short tag; 139a747e4fSDavid du Colombier union 149a747e4fSDavid du Colombier { 159a747e4fSDavid du Colombier struct 169a747e4fSDavid du Colombier { 179a747e4fSDavid du Colombier short uid; /* T-Userstr */ 189a747e4fSDavid du Colombier short oldtag; /* T-nFlush */ 199a747e4fSDavid du Colombier Qid9p1 qid; /* R-Attach, R-Clwalk, R-Walk, 209a747e4fSDavid du Colombier * R-Open, R-Create */ 219a747e4fSDavid du Colombier char rauth[AUTHENTLEN]; /* R-attach */ 229a747e4fSDavid du Colombier }; 239a747e4fSDavid du Colombier struct 249a747e4fSDavid du Colombier { 259a747e4fSDavid du Colombier char uname[NAMELEN]; /* T-nAttach */ 269a747e4fSDavid du Colombier char aname[NAMELEN]; /* T-nAttach */ 279a747e4fSDavid du Colombier char ticket[TICKETLEN]; /* T-attach */ 289a747e4fSDavid du Colombier char auth[AUTHENTLEN]; /* T-attach */ 299a747e4fSDavid du Colombier }; 309a747e4fSDavid du Colombier struct 319a747e4fSDavid du Colombier { 329a747e4fSDavid du Colombier char ename[ERRREC]; /* R-nError */ 339a747e4fSDavid du Colombier char chal[CHALLEN]; /* T-session, R-session */ 349a747e4fSDavid du Colombier char authid[NAMELEN]; /* R-session */ 359a747e4fSDavid du Colombier char authdom[DOMLEN]; /* R-session */ 369a747e4fSDavid du Colombier }; 379a747e4fSDavid du Colombier struct 389a747e4fSDavid du Colombier { 399a747e4fSDavid du Colombier char name[NAMELEN]; /* T-Walk, T-Clwalk, T-Create, T-Remove */ 409a747e4fSDavid du Colombier long perm; /* T-Create */ 419a747e4fSDavid du Colombier ushort newfid; /* T-Clone, T-Clwalk */ 429a747e4fSDavid du Colombier char mode; /* T-Create, T-Open */ 439a747e4fSDavid du Colombier }; 449a747e4fSDavid du Colombier struct 459a747e4fSDavid du Colombier { 469a747e4fSDavid du Colombier long offset; /* T-Read, T-Write */ 479a747e4fSDavid du Colombier long count; /* T-Read, T-Write, R-Read */ 489a747e4fSDavid du Colombier char* data; /* T-Write, R-Read */ 499a747e4fSDavid du Colombier }; 509a747e4fSDavid du Colombier struct 519a747e4fSDavid du Colombier { 529a747e4fSDavid du Colombier char stat[DIRREC]; /* T-Wstat, R-Stat */ 539a747e4fSDavid du Colombier }; 549a747e4fSDavid du Colombier }; 559a747e4fSDavid du Colombier }; 569a747e4fSDavid du Colombier 579a747e4fSDavid du Colombier /* 589a747e4fSDavid du Colombier * P9 protocol message types 599a747e4fSDavid du Colombier */ 609a747e4fSDavid du Colombier enum 619a747e4fSDavid du Colombier { 629a747e4fSDavid du Colombier Tnop9p1 = 50, 639a747e4fSDavid du Colombier Rnop9p1, 649a747e4fSDavid du Colombier Tosession9p1 = 52, 659a747e4fSDavid du Colombier Rosession9p1, 669a747e4fSDavid du Colombier Terror9p1 = 54, /* illegal */ 679a747e4fSDavid du Colombier Rerror9p1, 689a747e4fSDavid du Colombier Tflush9p1 = 56, 699a747e4fSDavid du Colombier Rflush9p1, 709a747e4fSDavid du Colombier Toattach9p1 = 58, 719a747e4fSDavid du Colombier Roattach9p1, 729a747e4fSDavid du Colombier Tclone9p1 = 60, 739a747e4fSDavid du Colombier Rclone9p1, 749a747e4fSDavid du Colombier Twalk9p1 = 62, 759a747e4fSDavid du Colombier Rwalk9p1, 769a747e4fSDavid du Colombier Topen9p1 = 64, 779a747e4fSDavid du Colombier Ropen9p1, 789a747e4fSDavid du Colombier Tcreate9p1 = 66, 799a747e4fSDavid du Colombier Rcreate9p1, 809a747e4fSDavid du Colombier Tread9p1 = 68, 819a747e4fSDavid du Colombier Rread9p1, 829a747e4fSDavid du Colombier Twrite9p1 = 70, 839a747e4fSDavid du Colombier Rwrite9p1, 849a747e4fSDavid du Colombier Tclunk9p1 = 72, 859a747e4fSDavid du Colombier Rclunk9p1, 869a747e4fSDavid du Colombier Tremove9p1 = 74, 879a747e4fSDavid du Colombier Rremove9p1, 889a747e4fSDavid du Colombier Tstat9p1 = 76, 899a747e4fSDavid du Colombier Rstat9p1, 909a747e4fSDavid du Colombier Twstat9p1 = 78, 919a747e4fSDavid du Colombier Rwstat9p1, 929a747e4fSDavid du Colombier Tclwalk9p1 = 80, 939a747e4fSDavid du Colombier Rclwalk9p1, 949a747e4fSDavid du Colombier Tauth9p1 = 82, /* illegal */ 959a747e4fSDavid du Colombier Rauth9p1, /* illegal */ 969a747e4fSDavid du Colombier Tsession9p1 = 84, 979a747e4fSDavid du Colombier Rsession9p1, 989a747e4fSDavid du Colombier Tattach9p1 = 86, 999a747e4fSDavid du Colombier Rattach9p1, 1009a747e4fSDavid du Colombier 1019a747e4fSDavid du Colombier MAXSYSCALL 1029a747e4fSDavid du Colombier }; 1039a747e4fSDavid du Colombier 1049a747e4fSDavid du Colombier int convD2M9p1(Dentry*, char*); 1059a747e4fSDavid du Colombier int convM2D9p1(char*, Dentry*); 1069a747e4fSDavid du Colombier int convM2S9p1(uchar*, Oldfcall*, int); 1079a747e4fSDavid du Colombier int convS2M9p1(Oldfcall*, uchar*); 1089a747e4fSDavid du Colombier void fcall9p1(Chan*, Oldfcall*, Oldfcall*); 109*5d459b5aSDavid du Colombier int authorize(Chan*, Oldfcall*, Oldfcall*); 1109a747e4fSDavid du Colombier 1119a747e4fSDavid du Colombier void (*call9p1[MAXSYSCALL])(Chan*, Oldfcall*, Oldfcall*); 1129a747e4fSDavid du Colombier 1139a747e4fSDavid du Colombier extern Nvrsafe nvr; 114