1 /* efs.h 4.3 82/08/01 */ 2 3 /* 4 * Extended File System 5 * 6 * Protocol: 7 * 8 * send: EFS_ACCESS <name> <mode> <ruid> <rgid> 9 * reply: EFS_OK 10 * reply: EFS_ERROR <errno> 11 * 12 * send: EFS_CHMOD <name> <mode> <uid> <gid> 13 * reply: EFS_OK 14 * reply: EFS_ERROR <errno> 15 * 16 * send: EFS_CHOWN <name> <owner> <group> <uid> <gid> 17 * reply: EFS_OK 18 * reply: EFS_ERROR <errno> 19 * 20 * send: EFS_CLOSE 21 * reply: EFS_OK 22 * reply: EFS_ERROR <errno> 23 * 24 * send: EFS_CREAT <name> <mode> <umask> <uid> <gid> 25 * reply: EFS_OK 26 * reply: EFS_ERROR <errno> 27 * 28 * send: EFS_FSTAT 29 * reply: EFS_OK <data>... 30 * reply: EFS_ERROR <errno> 31 * 32 * send: EFS_IOCTL 33 * reply: EFS_OK <data>... 34 * reply: EFS_ERROR <errno> 35 * 36 * send: EFS_LINK <name1> <name2> <uid> <gid> 37 * reply: EFS_OK 38 * reply: EFS_ERROR <errno> 39 * 40 * send: EFS_LSTAT <name> <uid> <gid> 41 * reply: EFS_OK <data>... 42 * reply: EFS_ERROR <errno> 43 * 44 * send: EFS_OPEN <name> <mode> <uid> <gid> 45 * reply: EFS_OK <size> 46 * reply: EFS_ERROR <errno> 47 * 48 * send: EFS_READ <offset> <count> 49 * reply: EFS_OK <data>... 50 * reply: EFS_ERROR <errno> 51 * 52 * send: EFS_READLINK <name> <uid> <gid> 53 * reply: EFS_OK <data>... 54 * reply: EFS_ERROR <errno> 55 * 56 * send: EFS_STAT <name> <uid> <gid> 57 * reply: EFS_OK <data>... 58 * reply: EFS_ERROR <errno> 59 * 60 * send: EFS_SYMLINK <name1> <name2> <uid> <gid> 61 * reply: EFS_OK 62 * reply: EFS_ERROR <errno> 63 * 64 * send: EFS_UNLINK <name> <uid> <gid> 65 * reply: EFS_OK 66 * reply: EFS_ERROR <errno> 67 * 68 * send: EFS_UTIME <name> <uid> <gid> 69 * reply: EFS_OK 70 * reply: EFS_ERROR <errno> 71 * 72 * send: EFS_WRITE <offset> <count> <data>... 73 * reply: EFS_OK 74 * reply: EFS_ERROR <errno> 75 * 76 */ 77 #define EFS_NHT 10 78 #define EFS_HTMAX 32 79 #define EFS_NPB 32 80 81 struct efs_controlblock { 82 u_char efs_cmd; /* command */ 83 char efs_error; /* return error code */ 84 union { 85 struct { 86 short efs_a_uid; /* user id */ 87 short efs_a_gid; /* group id */ 88 int efs_a_grps[NGRPS/(sizeof(int)*8)]; 89 /* group bit array */ 90 union { 91 struct { 92 short efs_aa_owner; /* user id */ 93 short efs_aa_group; /* group id */ 94 } efs_aa; 95 struct { 96 short efs_ab_cmask; /* cmask */ 97 short efs_ab_mode; /* mode */ 98 } efs_ab; 99 time_t efs_ac_time[2]; /* utime */ 100 } efs_a_un; 101 } efs_a; 102 struct { 103 u_long efs_b_count; /* bytes remaining for IO */ 104 off_t efs_b_offset; /* offset in file for IO */ 105 } efs_b; 106 off_t efs_c_size; /* size of file or transfer */ 107 } efs_un; 108 }; 109 110 #define efs_uid efs_un.efs_a.efs_a_uid 111 #define efs_gid efs_un.efs_a.efs_a_gid 112 #define efs_grps efs_un.efs_a.efs_a_grps 113 #define efs_owner efs_un.efs_a.efs_a_un.efs_aa.efs_aa_owner 114 #define efs_group efs_un.efs_a.efs_a_un.efs_aa.efs_aa_group 115 #define efs_cmask efs_un.efs_a.efs_a_un.efs_ab.efs_ab_cmask 116 #define efs_mode efs_un.efs_a.efs_a_un.efs_ab.efs_ab_mode 117 #define efs_time efs_un.efs_a.efs_a_un.efs_ac_time 118 #define efs_count efs_un.efs_b.efs_b_count 119 #define efs_offset efs_un.efs_b.efs_b_offset 120 #define efs_size efs_un.efs_c_size 121 122 #define EFS_ACCESS 0 123 #define EFS_CHMOD 1 124 #define EFS_CHOWN 2 125 #define EFS_CLOSE 3 126 #define EFS_CREAT 4 127 #define EFS_FSTAT 5 128 #define EFS_LINK 6 129 #define EFS_OPEN 7 130 #define EFS_READ 8 131 #define EFS_STAT 9 132 #define EFS_UNLINK 10 133 #define EFS_UTIME 11 134 #define EFS_WRITE 12 135 #define EFS_IOCTL 13 136 #define EFS_LSTAT 14 137 #define EFS_READLINK 15 138 #define EFS_SYMLINK 16 139 #define EFS_OK 100 140 #define EFS_ERROR 101 141 142 /* The hosttable relates a host name to a network address */ 143 144 struct hosttable { 145 char ht_name[EFS_HTMAX]; 146 struct sockaddr_in ht_addr; 147 } efs_hosttable[EFS_NHT]; 148 149 #define EFSIOSHTAB _IOW(e, 0, struct efs_hosttable) /* set hosttable */ 150 #define EFSIOGHTAB _IOR(e, 1, struct efs_hosttable) /* get hosttable */ 151 152 #ifdef KERNEL 153 int efs_major; /* major device of efs char special routines */ 154 #define efsinode(ip) \ 155 (((ip)->i_mode&IFMT) == IFCHR && \ 156 major((ip)->i_rdev) == efs_major && minor((ip)->i_rdev) == 0) 157 158 /* 159 * The patchboard connects file pointers on the local 160 * machine and sockets on the remote machine 161 */ 162 struct patchboard { 163 struct file *pb_fp; /* file pointer associated with pb */ 164 struct socket *pb_so; /* socket associated with pb */ 165 off_t pb_filesize; /* size of remote file */ 166 struct patchboard *pb_link; /* link to next free pb */ 167 } efs_patchboard[EFS_NPB], *efs_freepb; 168 #endif 169