support iscsi task function

This commit is contained in:
Lei Xue
2017-06-12 21:06:57 +08:00
parent 8ca6860460
commit 7a2b08ff80
9 changed files with 206 additions and 40 deletions

View File

@@ -93,11 +93,12 @@ const (
)
type iscsiTask struct {
tag uint32
conn *iscsiConnection
cmd *ISCSICommand
scmd *api.SCSICommand
state taskState
tag uint32
conn *iscsiConnection
cmd *ISCSICommand
scmd *api.SCSICommand
state taskState
result byte
offset int
r2tCount int
@@ -143,11 +144,13 @@ func (conn *iscsiConnection) ReInstatement(newConn *iscsiConnection) {
conn.conn = newConn.conn
}
func (conn *iscsiConnection) buildRespPackage(oc OpCode) error {
func (conn *iscsiConnection) buildRespPackage(oc OpCode, task *iscsiTask) error {
conn.txTask = &iscsiTask{conn: conn, cmd: conn.req, tag: conn.req.TaskTag, scmd: &api.SCSICommand{}}
conn.txIOState = IOSTATE_TX_BHS
conn.statSN += 1
task := conn.rxTask
if task == nil {
task = conn.rxTask
}
resp := &ISCSICommand{
StatSN: conn.req.ExpStatSN,
TaskTag: conn.req.TaskTag,
@@ -182,11 +185,17 @@ func (conn *iscsiConnection) buildRespPackage(oc OpCode) error {
if scmd.Result != 0 && scmd.SenseBuffer != nil {
resp.RawData = scmd.SenseBuffer.Bytes()
}
case OpNoopIn, OpSCSITaskResp, OpReject:
case OpNoopIn, OpReject:
resp.OpCode = oc
resp.Final = true
resp.NSG = FullFeaturePhase
resp.ExpCmdSN = conn.req.CmdSN + 1
case OpSCSITaskResp:
resp.OpCode = oc
resp.Final = true
resp.NSG = FullFeaturePhase
resp.ExpCmdSN = conn.req.CmdSN + 1
resp.Result = task.result
case OpLoginResp:
resp.OpCode = OpLoginResp
resp.Transit = conn.loginParam.tgtTrans
@@ -209,3 +218,41 @@ func (conn *iscsiConnection) buildRespPackage(oc OpCode) error {
conn.resp = resp
return nil
}
func (conn *iscsiConnection) State() string {
switch conn.state {
case CONN_STATE_FREE:
return "free"
case CONN_STATE_SECURITY:
return "begin security"
case CONN_STATE_SECURITY_AUTH:
return "security auth"
case CONN_STATE_SECURITY_DONE:
return "done security"
case CONN_STATE_SECURITY_LOGIN:
return "security login"
case CONN_STATE_SECURITY_FULL:
return "security full"
case CONN_STATE_LOGIN:
return "begin login"
case CONN_STATE_LOGIN_FULL:
return "done login"
case CONN_STATE_FULL:
return "full feature"
case CONN_STATE_KERNEL:
return "kernel"
case CONN_STATE_CLOSE:
return "close"
case CONN_STATE_EXIT:
return "exit"
case CONN_STATE_SCSI:
return "scsi"
case CONN_STATE_INIT:
return "init"
case CONN_STATE_START:
return "start"
case CONN_STATE_READY:
return "ready"
}
return ""
}