Lines Matching refs:sess

70 tcpConnect(isess_t *sess)  in tcpConnect()  argument
72 isc_opt_t *op = sess->op; in tcpConnect()
78 if(sess->flags & (SESS_RECONNECT|SESS_REDIRECT)) { in tcpConnect()
79 syslog(LOG_INFO, "%s", (sess->flags & SESS_RECONNECT) in tcpConnect()
82 debug(1, "%s", (sess->flags & SESS_RECONNECT) ? "Reconnect": "Redirected"); in tcpConnect()
83 shutdown(sess->soc, SHUT_RDWR); in tcpConnect()
85 sess->soc = -1; in tcpConnect()
87 sess->flags &= ~SESS_CONNECTED; in tcpConnect()
88 if(sess->flags & SESS_REDIRECT) { in tcpConnect()
89 sess->redirect_cnt++; in tcpConnect()
90 sess->flags |= SESS_RECONNECT; in tcpConnect()
98 sec = time(0) - sess->reconnect_time; in tcpConnect()
102 sess->reconnect_time = sec; in tcpConnect()
103 sess->reconnect_cnt1 = 0; in tcpConnect()
107 sess->reconnect_cnt1++; in tcpConnect()
108 if((sec / sess->reconnect_cnt1) < 2) { in tcpConnect()
111 syslog(LOG_CRIT, "too many reconnects %d", sess->reconnect_cnt1); in tcpConnect()
117 sess->reconnect_cnt++; in tcpConnect()
129 sess->flags &= ~SESS_CONNECTED; in tcpConnect()
154 sess->soc = soc; in tcpConnect()
157 if(setsockopt(sess->soc, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) < 0) in tcpConnect()
165 if(setsockopt(sess->soc, IPPROTO_TCP, TCP_KEEPALIVE, &val, sizeof(val)) < 0) in tcpConnect()
169 if(setsockopt(sess->soc, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) < 0) in tcpConnect()
175 if((setsockopt(sess->soc, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)) < 0) in tcpConnect()
176 || (setsockopt(sess->soc, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0)) { in tcpConnect()
184 if(getsockopt(sess->soc, SOL_SOCKET, SO_SNDBUF, &val, &len) == 0) in tcpConnect()
188 if(sess->op->sockbufsize) { in tcpConnect()
189 val = sess->op->sockbufsize * 1024; in tcpConnect()
190 if((setsockopt(sess->soc, SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)) < 0) in tcpConnect()
191 || (setsockopt(sess->soc, SOL_SOCKET, SO_RCVBUF, &val, sizeof(val)) < 0)) { in tcpConnect()
197 sess->flags |= SESS_CONNECTED; in tcpConnect()
207 if((sess->flags & SESS_REDIRECT) == 0) { in tcpConnect()
208 if(strcmp(op->targetAddress, sess->target.address) != 0) { in tcpConnect()
211 op->targetAddress = sess->target.address; in tcpConnect()
212 op->port = sess->target.port; in tcpConnect()
213 op->targetPortalGroupTag = sess->target.pgt; in tcpConnect()
225 setOptions(isess_t *sess, int flag) in setOptions() argument
235 oop.initiatorName = sess->op->initiatorName; in setOptions()
236 oop.targetAddress = sess->op->targetAddress; in setOptions()
237 if(sess->op->targetName != 0) in setOptions()
238 oop.targetName = sess->op->targetName; in setOptions()
240 oop.maxRecvDataSegmentLength = sess->op->maxRecvDataSegmentLength; in setOptions()
241 oop.maxXmitDataSegmentLength = sess->op->maxXmitDataSegmentLength; // XXX: in setOptions()
242 oop.maxBurstLength = sess->op->maxBurstLength; in setOptions()
243 oop.maxluns = sess->op->maxluns; in setOptions()
249 if(sess->op->headerDigest != NULL) { in setOptions()
250 sep = strchr(sess->op->headerDigest, ','); in setOptions()
252 oop.headerDigest = sess->op->headerDigest; in setOptions()
255 if(sess->op->dataDigest != NULL) { in setOptions()
256 sep = strchr(sess->op->dataDigest, ','); in setOptions()
258 oop.dataDigest = sess->op->dataDigest; in setOptions()
263 if(ioctl(sess->fd, ISCSISETOPT, &oop)) { in setOptions()
271 startSession(isess_t *sess) in startSession() argument
279 if((sess->flags & SESS_CONNECTED) == 0) { in startSession()
282 if(sess->fd == -1) { in startSession()
291 n = sizeof(sess->isid); in startSession()
292 if(sysctlbyname("net.iscsi.isid", (void *)sess->isid, (size_t *)&n, 0, 0) != 0) in startSession()
309 sess->fd = nfd; in startSession()
311 if(setOptions(sess, 0) != 0) in startSession()
315 if(ioctl(sess->fd, ISCSISETSOC, &sess->soc)) { in startSession()
348 doCAM(isess_t *sess) in doCAM() argument
354 if(ioctl(sess->fd, ISCSIGETCAM, &sess->cam) != 0) { in doCAM()
358 debug(2, "nluns=%d", sess->cam.target_nluns); in doCAM()
362 for(i = 0; i < sess->cam.target_nluns; i++) { in doCAM()
364 sess->cam.path_id, sess->cam.target_id, sess->cam.target_lun[i]); in doCAM()
366 sess->camdev = cam_open_btl(sess->cam.path_id, sess->cam.target_id, in doCAM()
367 sess->cam.target_lun[i], O_RDWR, NULL); in doCAM()
368 if(sess->camdev == NULL) { in doCAM()
374 cam_path_string(sess->camdev, pathstr, sizeof(pathstr)); in doCAM()
377 ccb = cam_getccb(sess->camdev); in doCAM()
381 ccb->crs.openings = sess->op->tags; in doCAM()
383 if(cam_send_ccb(sess->camdev, ccb) < 0) in doCAM()
394 cam_close_device(sess->camdev); in doCAM()
399 supervise(isess_t *sess) in supervise() argument
405 if(strcmp(sess->op->sessionType, "Discovery") == 0) { in supervise()
406 sess->flags |= SESS_DISCONNECT; in supervise()
413 if(setOptions(sess, SESS_FULLFEATURE) != 0) in supervise()
416 if((sess->flags & SESS_FULLFEATURE) == 0) { in supervise()
425 currsess = sess; in supervise()
426 if(ioctl(sess->fd, ISCSISTART)) { in supervise()
430 doCAM(sess); in supervise()
434 if(ioctl(sess->fd, ISCSIRESTART)) { in supervise()
446 if(ioctl(sess->fd, ISCSISIGNAL, &sig)) { in supervise()
450 sess->flags |= SESS_FULLFEATURE; in supervise()
452 sess->flags &= ~(SESS_REDIRECT | SESS_RECONNECT); in supervise()
458 while((sess->flags & (SESS_REDIRECT|SESS_RECONNECT|SESS_DISCONNECT)) == 0) { in supervise()
464 syslog(LOG_INFO, "sess flags=%x", sess->flags); in supervise()
467 if(ioctl(sess->fd, ISCSISIGNAL, &sig)) { in supervise()
471 if(sess->flags & SESS_DISCONNECT) { in supervise()
473 if(ioctl(sess->fd, ISCSISTOP, &val)) { in supervise()
476 sess->flags &= ~SESS_FULLFEATURE; in supervise()
480 sess->flags |= SESS_INITIALLOGIN1; in supervise()
486 handledDiscoveryResp(isess_t *sess, pdu_t *pp) in handledDiscoveryResp() argument
506 doDiscovery(isess_t *sess) in doDiscovery() argument
518 return sendPDU(sess, &spp, handledDiscoveryResp); in doDiscovery()
522 doLogin(isess_t *sess) in doLogin() argument
524 isc_opt_t *op = sess->op; in doLogin()
534 sess->csg = LON_PHASE; in doLogin()
536 sess->csg = SN_PHASE; in doLogin()
538 if(sess->tsih) { in doLogin()
539 sess->tsih = 0; // XXX: no 'reconnect' yet in doLogin()
540 sess->flags &= ~SESS_NEGODONE; // XXX: KLUDGE in doLogin()
544 debug(3, "count=%d csg=%d", count, sess->csg); in doLogin()
545 status = loginPhase(sess); in doLogin()
549 } while(status == 0 && (sess->csg != FF_PHASE)); in doLogin()
551 sess->flags &= ~SESS_INITIALLOGIN; in doLogin()
556 sess->flags |= SESS_LOGGEDIN; in doLogin()
557 if(strcmp(sess->op->sessionType, "Discovery") == 0) in doLogin()
558 doDiscovery(sess); in doLogin()
565 sess->flags &= ~SESS_NEGODONE; in doLogin()
566 sess->flags |= (SESS_REDIRECT | SESS_INITIALLOGIN1); in doLogin()
581 handleLogoutResp(isess_t *sess, pdu_t *pp) in handleLogoutResp() argument
583 if(sess->flags & SESS_DISCONNECT) in handleLogoutResp()
589 startLogout(isess_t *sess) in startLogout() argument
599 return sendPDU(sess, &spp, handleLogoutResp); in startLogout()
603 inLogout(isess_t *sess) in inLogout() argument
605 if(sess->flags & SESS_RECONNECT) in inLogout()
662 isess_t *sess; in fsm() local
664 if((sess = calloc(1, sizeof(isess_t))) == NULL) { in fsm()
671 sess->op = op; in fsm()
672 sess->fd = -1; in fsm()
673 sess->soc = -1; in fsm()
674 sess->target.address = strdup(op->targetAddress); in fsm()
675 sess->target.port = op->port; in fsm()
676 sess->target.pgt = op->targetPortalGroupTag; in fsm()
678 sess->flags = SESS_INITIALLOGIN | SESS_INITIALLOGIN1; in fsm()
683 switch(tcpConnect(sess)) { in fsm()
690 switch(startSession(sess)) { in fsm()
698 switch(doLogin(sess)) { in fsm()
706 switch(supervise(sess)) { in fsm()
716 switch(startLogout(sess)) { in fsm()
725 switch(inLogout(sess)) { in fsm()