2 * This is sample code generated by rpcgen.
3 * These are only templates and you can use them
4 * as a guideline for developing your own functions.
13 static void *null_result = (void *)&null_int;
15 /* Look up a BlueSkyInode given an NFS filehandle. Returns NULL if the
16 * filehandle is invalid. */
17 BlueSkyInode *lookup_fh(nfs_fh3 *fh)
19 BlueSkyInode *inode = NULL;
20 if (fh->data.data_len == 8) {
21 uint64_t inum = GUINT64_FROM_BE(*(uint64_t *)(fh->data.data_val));
22 inode = bluesky_get_inode(fs, inum);
27 /* Copy inode attributes into NFS response. The BlueSkyInode should be locked
29 void encode_fattr3(struct fattr3 *result, BlueSkyInode *inode)
31 result->type = inode->type;
32 result->mode = inode->mode;
33 result->nlink = inode->nlink;
34 result->uid = inode->uid;
35 result->gid = inode->gid;
36 result->size = inode->size;
38 result->rdev.major = 0;
39 result->rdev.minor = 0;
41 result->fileid = inode->inum;
42 result->atime.seconds = inode->atime / 1000000;
43 result->atime.nseconds = (inode->atime % 1000000) * 1000;
44 result->mtime.seconds = inode->mtime / 1000000;
45 result->mtime.nseconds = (inode->mtime % 1000000) * 1000;
46 result->ctime.seconds = inode->ctime / 1000000;
47 result->ctime.nseconds = (inode->ctime % 1000000) * 1000;
51 nfsproc3_null_3_svc(void *argp, struct svc_req *rqstp)
57 nfsproc3_getattr_3_svc(nfs_fh3 *argp, struct svc_req *rqstp)
59 static getattr3res result;
61 BlueSkyInode *inode = lookup_fh(argp);
63 result.status = NFS3_OK;
64 encode_fattr3(&result.getattr3res_u.attributes, inode);
66 result.status = NFS3ERR_STALE;
73 nfsproc3_setattr_3_svc(setattr3args *argp, struct svc_req *rqstp)
75 static wccstat3 result;
77 result.status = NFS3ERR_NOTSUPP;
83 nfsproc3_lookup_3_svc(diropargs3 *argp, struct svc_req *rqstp)
85 static lookup3res result;
87 result.status = NFS3ERR_NOTSUPP;
93 nfsproc3_access_3_svc(access3args *argp, struct svc_req *rqstp)
95 static access3res result;
97 result.status = NFS3ERR_NOTSUPP;
103 nfsproc3_readlink_3_svc(nfs_fh3 *argp, struct svc_req *rqstp)
105 static readlink3res result;
107 result.status = NFS3ERR_NOTSUPP;
113 nfsproc3_read_3_svc(read3args *argp, struct svc_req *rqstp)
115 static read3res result;
117 result.status = NFS3ERR_NOTSUPP;
123 nfsproc3_write_3_svc(write3args *argp, struct svc_req *rqstp)
125 static write3res result;
127 result.status = NFS3ERR_NOTSUPP;
133 nfsproc3_create_3_svc(create3args *argp, struct svc_req *rqstp)
135 static diropres3 result;
137 result.status = NFS3ERR_NOTSUPP;
143 nfsproc3_mkdir_3_svc(mkdir3args *argp, struct svc_req *rqstp)
145 static diropres3 result;
147 result.status = NFS3ERR_NOTSUPP;
153 nfsproc3_symlink_3_svc(symlink3args *argp, struct svc_req *rqstp)
155 static diropres3 result;
157 result.status = NFS3ERR_NOTSUPP;
163 nfsproc3_mknod_3_svc(mknod3args *argp, struct svc_req *rqstp)
165 static diropres3 result;
167 result.status = NFS3ERR_NOTSUPP;
173 nfsproc3_remove_3_svc(diropargs3 *argp, struct svc_req *rqstp)
175 static wccstat3 result;
177 result.status = NFS3ERR_NOTSUPP;
183 nfsproc3_rmdir_3_svc(diropargs3 *argp, struct svc_req *rqstp)
185 static wccstat3 result;
187 result.status = NFS3ERR_NOTSUPP;
193 nfsproc3_rename_3_svc(rename3args *argp, struct svc_req *rqstp)
195 static rename3res result;
197 result.status = NFS3ERR_NOTSUPP;
203 nfsproc3_link_3_svc(link3args *argp, struct svc_req *rqstp)
205 static link3res result;
207 result.status = NFS3ERR_NOTSUPP;
213 nfsproc3_readdir_3_svc(readdir3args *argp, struct svc_req *rqstp)
215 static readdir3res result;
217 result.status = NFS3ERR_NOTSUPP;
223 nfsproc3_readdirplus_3_svc(readdirplus3args *argp, struct svc_req *rqstp)
225 static readdirplus3res result;
227 result.status = NFS3ERR_NOTSUPP;
233 nfsproc3_fsstat_3_svc(nfs_fh3 *argp, struct svc_req *rqstp)
235 static fsstat3res result;
237 result.status = NFS3ERR_NOTSUPP;
243 nfsproc3_fsinfo_3_svc(nfs_fh3 *argp, struct svc_req *rqstp)
245 static fsinfo3res result;
247 BlueSkyInode *inode = bluesky_get_inode(fs, 1);
248 result.status = NFS3_OK;
249 result.fsinfo3res_u.resok.obj_attributes.present = TRUE;
250 encode_fattr3(&result.fsinfo3res_u.resok.obj_attributes.post_op_attr_u.attributes, inode);
251 result.fsinfo3res_u.resok.rtmax = 32768;
252 result.fsinfo3res_u.resok.rtpref = 32768;
253 result.fsinfo3res_u.resok.rtmult = 4096;
254 result.fsinfo3res_u.resok.wtmax = 32768;
255 result.fsinfo3res_u.resok.wtpref = 32768;
256 result.fsinfo3res_u.resok.wtmult = 4096;
257 result.fsinfo3res_u.resok.dtpref = 4096;
258 result.fsinfo3res_u.resok.maxfilesize = 0x7fffffffffffffffULL;
259 result.fsinfo3res_u.resok.time_delta.seconds = 0;
260 result.fsinfo3res_u.resok.time_delta.nseconds = 1000;
261 result.fsinfo3res_u.resok.properties
262 = FSF3_LINK | FSF3_SYMLINK | FSF3_HOMOGENEOUS | FSF3_CANSETTIME;
268 nfsproc3_pathconf_3_svc(nfs_fh3 *argp, struct svc_req *rqstp)
270 static pathconf3res result;
272 BlueSkyInode *inode = bluesky_get_inode(fs, 1);
273 result.status = NFS3_OK;
274 result.pathconf3res_u.resok.obj_attributes.present = TRUE;
275 encode_fattr3(&result.pathconf3res_u.resok.obj_attributes.post_op_attr_u.attributes, inode);
276 result.pathconf3res_u.resok.linkmax = 0xffffffff;
277 result.pathconf3res_u.resok.name_max = 255;
278 result.pathconf3res_u.resok.no_trunc = TRUE;
279 result.pathconf3res_u.resok.chown_restricted = TRUE;
280 result.pathconf3res_u.resok.case_insensitive = FALSE;
281 result.pathconf3res_u.resok.case_preserving = TRUE;
287 nfsproc3_commit_3_svc(commit3args *argp, struct svc_req *rqstp)
289 static commit3res result;
291 result.status = NFS3ERR_NOTSUPP;