Lines Matching full:req

79 gctl_error(struct gctl_req *req, const char *fmt, ...)  in gctl_error()  argument
83 if (req == NULL) in gctl_error()
87 if (sbuf_done(req->serror)) { in gctl_error()
88 if (!req->nerror) in gctl_error()
89 req->nerror = EEXIST; in gctl_error()
93 return (req->nerror); in gctl_error()
95 if (!req->nerror) in gctl_error()
96 req->nerror = EINVAL; in gctl_error()
99 if (sbuf_len(req->serror) > 0) in gctl_error()
100 sbuf_cat(req->serror, "\n\t"); in gctl_error()
102 sbuf_vprintf(req->serror, fmt, ap); in gctl_error()
104 gctl_post_messages(req); in gctl_error()
105 return (req->nerror); in gctl_error()
124 gctl_msg(struct gctl_req *req, int errno, const char *fmt, ...) in gctl_msg() argument
128 if (req == NULL) in gctl_msg()
130 if (sbuf_done(req->serror)) { in gctl_msg()
136 if (req->nerror == 0) in gctl_msg()
137 req->nerror = errno; in gctl_msg()
139 if (sbuf_len(req->serror) > 0) in gctl_msg()
140 sbuf_cat(req->serror, "\n\t"); in gctl_msg()
142 sbuf_vprintf(req->serror, fmt, ap); in gctl_msg()
150 gctl_post_messages(struct gctl_req *req) in gctl_post_messages() argument
153 if (sbuf_done(req->serror)) { in gctl_post_messages()
159 sbuf_finish(req->serror); in gctl_post_messages()
161 printf("gctl %p message(s) \"%s\"\n", req, in gctl_post_messages()
162 sbuf_data(req->serror)); in gctl_post_messages()
170 geom_alloc_copyin(struct gctl_req *req, void *uaddr, size_t len) in geom_alloc_copyin() argument
175 req->nerror = copyin(uaddr, ptr, len); in geom_alloc_copyin()
176 if (!req->nerror) in geom_alloc_copyin()
183 gctl_copyin(struct gctl_req *req) in gctl_copyin() argument
189 if (req->narg > GEOM_CTL_ARG_MAX) { in gctl_copyin()
190 gctl_error(req, "too many arguments"); in gctl_copyin()
191 req->arg = NULL; in gctl_copyin()
195 ap = geom_alloc_copyin(req, req->arg, req->narg * sizeof(*ap)); in gctl_copyin()
197 gctl_error(req, "bad control request"); in gctl_copyin()
198 req->arg = NULL; in gctl_copyin()
203 for (i = 0; i < req->narg; i++) { in gctl_copyin()
209 for (i = 0; i < req->narg; i++) { in gctl_copyin()
211 gctl_error(req, in gctl_copyin()
215 p = geom_alloc_copyin(req, ap[i].name, ap[i].nlen); in gctl_copyin()
219 gctl_error(req, "unterminated param name"); in gctl_copyin()
226 gctl_error(req, "negative param length"); in gctl_copyin()
230 p = geom_alloc_copyin(req, ap[i].value, ap[i].len); in gctl_copyin()
235 gctl_error(req, "unterminated param value"); in gctl_copyin()
245 req->arg = ap; in gctl_copyin()
250 gctl_copyout(struct gctl_req *req) in gctl_copyout() argument
255 if (req->nerror) in gctl_copyout()
258 ap = req->arg; in gctl_copyout()
259 for (i = 0; i < req->narg; i++, ap++) { in gctl_copyout()
265 req->nerror = error; in gctl_copyout()
272 gctl_free(struct gctl_req *req) in gctl_free() argument
276 sbuf_delete(req->serror); in gctl_free()
277 if (req->arg == NULL) in gctl_free()
279 for (i = 0; i < req->narg; i++) { in gctl_free()
280 if (req->arg[i].flag & GCTL_PARAM_NAMEKERNEL) in gctl_free()
281 g_free(req->arg[i].name); in gctl_free()
282 if ((req->arg[i].flag & GCTL_PARAM_VALUEKERNEL) && in gctl_free()
283 req->arg[i].len > 0) in gctl_free()
284 g_free(req->arg[i].kvalue); in gctl_free()
286 g_free(req->arg); in gctl_free()
290 gctl_dump(struct gctl_req *req, const char *what) in gctl_dump() argument
296 printf("Dump of gctl %s at %p:\n", what, req); in gctl_dump()
297 if (req->nerror > 0) { in gctl_dump()
298 printf(" nerror:\t%d\n", req->nerror); in gctl_dump()
299 if (sbuf_len(req->serror) > 0) in gctl_dump()
300 printf(" error:\t\"%s\"\n", sbuf_data(req->serror)); in gctl_dump()
302 if (req->arg == NULL) in gctl_dump()
304 for (i = 0; i < req->narg; i++) { in gctl_dump()
305 ap = &req->arg[i]; in gctl_dump()
329 gctl_set_param(struct gctl_req *req, const char *param, void const *ptr, in gctl_set_param() argument
335 for (i = 0; i < req->narg; i++) { in gctl_set_param()
336 ap = &req->arg[i]; in gctl_set_param()
353 gctl_set_param_err(struct gctl_req *req, const char *param, void const *ptr, in gctl_set_param_err() argument
357 switch (gctl_set_param(req, param, ptr, len)) { in gctl_set_param_err()
359 gctl_error(req, "No write access %s argument", param); in gctl_set_param_err()
362 gctl_error(req, "Wrong length %s argument", param); in gctl_set_param_err()
365 gctl_error(req, "Missing %s argument", param); in gctl_set_param_err()
371 gctl_get_param_flags(struct gctl_req *req, const char *param, int flags, int *len) in gctl_get_param_flags() argument
377 for (i = 0; i < req->narg; i++) { in gctl_get_param_flags()
378 ap = &req->arg[i]; in gctl_get_param_flags()
392 gctl_get_param(struct gctl_req *req, const char *param, int *len) in gctl_get_param() argument
395 return (gctl_get_param_flags(req, param, GCTL_PARAM_RD, len)); in gctl_get_param()
399 gctl_get_asciiparam(struct gctl_req *req, const char *param) in gctl_get_asciiparam() argument
404 p = gctl_get_param_flags(req, param, GCTL_PARAM_RD, &len); in gctl_get_asciiparam()
408 gctl_error(req, "Argument without length (%s)", param); in gctl_get_asciiparam()
412 gctl_error(req, "Unterminated argument (%s)", param); in gctl_get_asciiparam()
419 gctl_get_paraml_opt(struct gctl_req *req, const char *param, int len) in gctl_get_paraml_opt() argument
424 p = gctl_get_param(req, param, &i); in gctl_get_paraml_opt()
427 gctl_error(req, "Wrong length %s argument", param); in gctl_get_paraml_opt()
433 gctl_get_paraml(struct gctl_req *req, const char *param, int len) in gctl_get_paraml() argument
437 p = gctl_get_paraml_opt(req, param, len); in gctl_get_paraml()
439 gctl_error(req, "Missing %s argument", param); in gctl_get_paraml()
444 gctl_get_class(struct gctl_req *req, char const *arg) in gctl_get_class() argument
449 p = gctl_get_asciiparam(req, arg); in gctl_get_class()
451 gctl_error(req, "Missing %s argument", arg); in gctl_get_class()
458 gctl_error(req, "Class not found: \"%s\"", p); in gctl_get_class()
463 gctl_get_geom(struct gctl_req *req, struct g_class *mp, char const *arg) in gctl_get_geom() argument
469 p = gctl_get_asciiparam(req, arg); in gctl_get_geom()
471 gctl_error(req, "Missing %s argument", arg); in gctl_get_geom()
477 gctl_error(req, "Geom not found: \"%s\"", p); in gctl_get_geom()
482 gctl_get_provider(struct gctl_req *req, char const *arg) in gctl_get_provider() argument
487 p = gctl_get_asciiparam(req, arg); in gctl_get_provider()
489 gctl_error(req, "Missing '%s' argument", arg); in gctl_get_provider()
495 gctl_error(req, "Provider not found: \"%s\"", p); in gctl_get_provider()
500 g_ctl_getxml(struct gctl_req *req, struct g_class *mp) in g_ctl_getxml() argument
509 parents = gctl_get_paraml(req, "parents", sizeof(*parents)); in g_ctl_getxml()
512 name = gctl_get_asciiparam(req, "arg0"); in g_ctl_getxml()
540 buf = gctl_get_param_flags(req, "output", GCTL_PARAM_WR, &len); in g_ctl_getxml()
542 gctl_error(req, "output parameter missing"); in g_ctl_getxml()
548 gctl_set_param(req, "output", buf, 0); in g_ctl_getxml()
550 gctl_error(req, "output buffer overflow"); in g_ctl_getxml()
559 struct gctl_req *req; in g_ctl_req() local
563 req = arg; in g_ctl_req()
564 mp = gctl_get_class(req, "class"); in g_ctl_req()
567 verb = gctl_get_param(req, "verb", NULL); in g_ctl_req()
569 gctl_error(req, "Verb missing"); in g_ctl_req()
573 g_ctl_getxml(req, mp); in g_ctl_req()
575 gctl_error(req, "Class takes no requests"); in g_ctl_req()
577 mp->ctlreq(req, mp, verb); in g_ctl_req()
585 struct gctl_req *req; in g_ctl_ioctl_ctl() local
588 req = (void *)data; in g_ctl_ioctl_ctl()
589 req->nerror = 0; in g_ctl_ioctl_ctl()
591 if (req->lerror < 2) in g_ctl_ioctl_ctl()
593 if (!useracc(req->error, req->lerror, VM_PROT_WRITE)) in g_ctl_ioctl_ctl()
596 req->serror = sbuf_new_auto(); in g_ctl_ioctl_ctl()
598 if (req->version != GCTL_VERSION) { in g_ctl_ioctl_ctl()
599 gctl_error(req, "kernel and libgeom version mismatch."); in g_ctl_ioctl_ctl()
600 req->arg = NULL; in g_ctl_ioctl_ctl()
603 gctl_copyin(req); in g_ctl_ioctl_ctl()
606 gctl_dump(req, "request"); in g_ctl_ioctl_ctl()
608 if (!req->nerror) { in g_ctl_ioctl_ctl()
609 g_waitfor_event(g_ctl_req, req, M_WAITOK, NULL); in g_ctl_ioctl_ctl()
612 gctl_dump(req, "result"); in g_ctl_ioctl_ctl()
614 gctl_copyout(req); in g_ctl_ioctl_ctl()
617 if (sbuf_done(req->serror)) { in g_ctl_ioctl_ctl()
618 nerror = copyout(sbuf_data(req->serror), req->error, in g_ctl_ioctl_ctl()
619 imin(req->lerror, sbuf_len(req->serror) + 1)); in g_ctl_ioctl_ctl()
620 if (nerror != 0 && req->nerror == 0) in g_ctl_ioctl_ctl()
621 req->nerror = nerror; in g_ctl_ioctl_ctl()
624 nerror = req->nerror; in g_ctl_ioctl_ctl()
625 gctl_free(req); in g_ctl_ioctl_ctl()