コード例 #1
0
ファイル: mgmt.c プロジェクト: redlicha/tgt
static int sys_mgmt(int lld_no, struct mgmt_task *mtask)
{
    struct tgtadm_req *req = &mtask->req;
    struct tgtadm_rsp *rsp = &mtask->rsp;
    int err = TGTADM_INVALID_REQUEST, len = mtask->bsize;

    switch (req->op) {
    case OP_UPDATE:
        if (!strncmp(mtask->buf, "debug=", 6)) {
            if (!strncmp(mtask->buf+6, "on", 2)) {
                is_debug = 1;
                err = 0;
            } else if (!strncmp(mtask->buf+6, "off", 3)) {
                is_debug = 0;
                err = 0;
            }
            if (!err)
                eprintf("set debug to: %d\n", is_debug);
        } else if (tgt_drivers[lld_no]->update)
            err = tgt_drivers[lld_no]->update(req->mode, req->op,
                                              req->tid,
                                              req->sid, req->lun,
                                              req->cid, mtask->buf);

        rsp->err = err;
        rsp->len = sizeof(*rsp);
        break;
    case OP_SHOW:
        err = system_show(req->mode, mtask->buf, len);
        if (err >= 0 && tgt_drivers[lld_no]->show) {
            err += tgt_drivers[lld_no]->show(req->mode,
                                             req->tid, req->sid,
                                             req->cid, req->lun,
                                             mtask->buf + err, len - err);
        }
        set_show_results(rsp, &err);
        break;
    case OP_DELETE:
        if (is_system_inactive())
            err = 0;

        rsp->err = err;
        rsp->len = sizeof(*rsp);
        break;
    default:
        break;
    }

    return err;
}
コード例 #2
0
ファイル: mgmt.c プロジェクト: fujita/tgt
static tgtadm_err sys_mgmt(int lld_no, struct mgmt_task *mtask)
{
	struct tgtadm_req *req = &mtask->req;
	tgtadm_err adm_err = TGTADM_INVALID_REQUEST;

	switch (req->op) {
	case OP_UPDATE:
		if (!strncmp(mtask->req_buf, "debug=", 6)) {
			if (!strncmp(mtask->req_buf+6, "on", 2)) {
				is_debug = 1;
				adm_err = TGTADM_SUCCESS;
			} else if (!strncmp(mtask->req_buf+6, "off", 3)) {
				is_debug = 0;
				adm_err = TGTADM_SUCCESS;
			}
			if (adm_err == TGTADM_SUCCESS)
				eprintf("set debug to: %d\n", is_debug);
		} else if (tgt_drivers[lld_no]->update)
			adm_err = tgt_drivers[lld_no]->update(req->mode, req->op,
							  req->tid,
							  req->sid, req->lun,
							  req->cid, mtask->req_buf);

		break;
	case OP_SHOW:
		concat_buf_init(&mtask->rsp_concat);
		adm_err = system_show(req->mode, &mtask->rsp_concat);
		if (tgt_drivers[lld_no]->show)
			adm_err = tgt_drivers[lld_no]->show(req->mode,
							req->tid, req->sid,
							req->cid, req->lun,
							&mtask->rsp_concat);
		concat_buf_finish(&mtask->rsp_concat);
		break;
	case OP_STATS:
		concat_buf_init(&mtask->rsp_concat);
		adm_err = tgt_stat_system(&mtask->rsp_concat);
		concat_buf_finish(&mtask->rsp_concat);
		break;
	case OP_DELETE:
		if (is_system_inactive())
			adm_err = TGTADM_SUCCESS;
		break;
	default:
		break;
	}

	return adm_err;
}