static int sess_param(struct iscsi_target *target, struct iscsi_param_info *info, int set) { struct iscsi_session *session = NULL; struct iscsi_sess_param *param; int err = -ENOENT; if (set) sess_param_check(info); if (info->sid) { if (!(session = session_lookup(target, info->sid))) goto out; param = &session->param; } else { param = &target->sess_param; } if (set) { sess_param_set(param, info); show_param(param); } else sess_param_get(param, info); err = 0; out: return err; }
static int get_conn_info(struct iscsi_target *target, unsigned long ptr) { struct iscsi_session *session; struct iscsi_conn *conn; struct conn_info info; int err; err = copy_from_user(&info, (void *) ptr, sizeof(info)); if (err) return -EFAULT; session = session_lookup(target, info.sid); if (!session) return -ENOENT; conn = conn_lookup(session, info.cid); if (!conn) return -ENOENT; info.cid = conn->cid; info.stat_sn = conn->stat_sn; info.exp_stat_sn = conn->exp_stat_sn; err = copy_to_user((void *) ptr, &info, sizeof(info)); if (err) return -EFAULT; return 0; }
static int add_conn(struct iscsi_target *target, unsigned long ptr) { int err; struct iscsi_session *session; struct conn_info info; if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) return err; if (!(session = session_lookup(target, info.sid))) return -ENOENT; return conn_add(session, &info); }
static int del_conn(struct iscsi_target *target, unsigned long ptr) { struct iscsi_session *session; struct conn_info info; int err; err = copy_from_user(&info, (void *) ptr, sizeof(info)); if (err) return -EFAULT; session = session_lookup(target, info.sid); if (!session) return -ENOENT; return conn_del(session, &info); }
/* 连接信息从用户态转入内核态 */ static int add_conn(struct iscsi_target *target, unsigned long ptr) { struct iscsi_session *session; struct conn_info info; int err; /* 拷贝用户态连接信息 */ err = copy_from_user(&info, (void *) ptr, sizeof(info)); if (err) return -EFAULT; /* 根据target和用户态连接信息中的会话id, 找到会话信息 */ session = session_lookup(target, info.sid); if (!session) return -ENOENT; return conn_add(session, &info); }
static int get_session_info(struct iscsi_target *target, unsigned long ptr) { int err; struct iscsi_session *session; struct session_info info; if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) return err; session = session_lookup(target, info.sid); if (!session) return -ENOENT; info.exp_cmd_sn = session->exp_cmd_sn; info.max_cmd_sn = session->max_cmd_sn; if (copy_to_user((void *) ptr, &info, sizeof(info))) return -EFAULT; return 0; }
session_t *session_lookup_exi(struct v2gEXIDocument *exiIn) { uint64_t sessionid; memcpy(&sessionid, exiIn->V2G_Message.Header.SessionID.bytes, 8); return session_lookup(sessionid); }