Lines Matching refs:sess

73 tcpConnect(isess_t *sess)
75 isc_opt_t *op = sess->op;
81 if(sess->flags & (SESS_RECONNECT|SESS_REDIRECT)) {
82 syslog(LOG_INFO, "%s", (sess->flags & SESS_RECONNECT)
85 debug(1, "%s", (sess->flags & SESS_RECONNECT) ? "Reconnect": "Redirected");
86 shutdown(sess->soc, SHUT_RDWR);
87 //close(sess->soc);
88 sess->soc = -1;
90 sess->flags &= ~SESS_CONNECTED;
91 if(sess->flags & SESS_REDIRECT) {
92 sess->redirect_cnt++;
93 sess->flags |= SESS_RECONNECT;
101 sec = time(0) - sess->reconnect_time;
105 sess->reconnect_time = sec;
106 sess->reconnect_cnt1 = 0;
110 sess->reconnect_cnt1++;
111 if((sec / sess->reconnect_cnt1) < 2) {
114 syslog(LOG_CRIT, "too many reconnects %d", sess->reconnect_cnt1);
120 sess->reconnect_cnt++;
132 sess->flags &= ~SESS_CONNECTED;
156 sess->soc = soc;
162 if(setsockopt(sess->soc, IPPROTO_TCP, TCP_KEEPALIVE, &val, sizeof(val)) < 0)
166 if(setsockopt(sess->soc, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) < 0)
172 if((setsockopt(sess->soc, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)) < 0)
173 || (setsockopt(sess->soc, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0)) {
181 if(getsockopt(sess->soc, SOL_SOCKET, SO_SNDBUF, &val, &len) == 0)
185 if(sess->op->sockbufsize) {
186 val = sess->op->sockbufsize * 1024;
187 if((setsockopt(sess->soc, SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)) < 0)
188 || (setsockopt(sess->soc, SOL_SOCKET, SO_RCVBUF, &val, sizeof(val)) < 0)) {
194 sess->flags |= SESS_CONNECTED;
204 if((sess->flags & SESS_REDIRECT) == 0) {
205 if(strcmp(op->targetAddress, sess->target.address) != 0) {
208 op->targetAddress = sess->target.address;
209 op->port = sess->target.port;
210 op->targetPortalGroupTag = sess->target.pgt;
222 setOptions(isess_t *sess, int flag)
232 oop.initiatorName = sess->op->initiatorName;
233 oop.targetAddress = sess->op->targetAddress;
234 if(sess->op->targetName != 0)
235 oop.targetName = sess->op->targetName;
237 oop.maxRecvDataSegmentLength = sess->op->maxRecvDataSegmentLength;
238 oop.maxXmitDataSegmentLength = sess->op->maxXmitDataSegmentLength; // XXX:
239 oop.maxBurstLength = sess->op->maxBurstLength;
240 oop.maxluns = sess->op->maxluns;
246 if(sess->op->headerDigest != NULL) {
247 sep = strchr(sess->op->headerDigest, ',');
249 oop.headerDigest = sess->op->headerDigest;
252 if(sess->op->dataDigest != NULL) {
253 sep = strchr(sess->op->dataDigest, ',');
255 oop.dataDigest = sess->op->dataDigest;
260 if(ioctl(sess->fd, ISCSISETOPT, &oop)) {
268 startSession(isess_t *sess)
276 if((sess->flags & SESS_CONNECTED) == 0) {
279 if(sess->fd == -1) {
288 n = sizeof(sess->isid);
289 if(sysctlbyname("net.iscsi_initiator.isid", (void *)sess->isid, (size_t *)&n, 0, 0) != 0)
305 sess->fd = nfd;
307 if(setOptions(sess, 0) != 0)
311 if(ioctl(sess->fd, ISCSISETSOC, &sess->soc)) {
344 doCAM(isess_t *sess)
350 if(ioctl(sess->fd, ISCSIGETCAM, &sess->cam) != 0) {
354 debug(1, "nluns=%d", sess->cam.target_nluns);
358 for(n = i = 0; i < sess->cam.target_nluns; i++) {
360 sess->cam.path_id, sess->cam.target_id);
362 sess->camdev = cam_open_btl(sess->cam.path_id, sess->cam.target_id,
364 if(sess->camdev == NULL) {
370 cam_path_string(sess->camdev, pathstr, sizeof(pathstr));
373 ccb = cam_getccb(sess->camdev);
377 ccb->crs.openings = sess->op->tags;
378 if(cam_send_ccb(sess->camdev, ccb) < 0)
383 // cam_error_print(sess->camdev, ccb, CAM_ESF_ALL, CAM_EPF_ALL, stderr);
390 cam_close_device(sess->camdev);
396 supervise(isess_t *sess)
402 if(strcmp(sess->op->sessionType, "Discovery") == 0) {
403 sess->flags |= SESS_DISCONNECT;
410 if(setOptions(sess, SESS_FULLFEATURE) != 0)
413 if((sess->flags & SESS_FULLFEATURE) == 0) {
418 if(sess->op->pidfile != NULL) {
421 pidf = fopen(sess->op->pidfile, "w");
430 currsess = sess;
431 if(ioctl(sess->fd, ISCSISTART)) {
435 if(doCAM(sess) == 0) {
437 ioctl(sess->fd, ISCSISTOP);
443 if(ioctl(sess->fd, ISCSIRESTART)) {
455 if(ioctl(sess->fd, ISCSISIGNAL, &sig)) {
459 sess->flags |= SESS_FULLFEATURE;
461 sess->flags &= ~(SESS_REDIRECT | SESS_RECONNECT);
468 while((sess->flags & (SESS_REDIRECT|SESS_RECONNECT|SESS_DISCONNECT)) == 0) {
474 syslog(LOG_INFO, "sess flags=%x", sess->flags);
477 if(ioctl(sess->fd, ISCSISIGNAL, &sig)) {
481 if(sess->flags & SESS_DISCONNECT) {
482 sess->flags &= ~SESS_FULLFEATURE;
487 if(ioctl(sess->fd, ISCSISTOP, &val)) {
490 sess->flags |= SESS_INITIALLOGIN1;
496 handledDiscoveryResp(isess_t *sess, pdu_t *pp)
516 doDiscovery(isess_t *sess)
528 return sendPDU(sess, &spp, handledDiscoveryResp);
532 doLogin(isess_t *sess)
534 isc_opt_t *op = sess->op;
544 sess->csg = LON_PHASE;
546 sess->csg = SN_PHASE;
548 if(sess->tsih) {
549 sess->tsih = 0; // XXX: no 'reconnect' yet
550 sess->flags &= ~SESS_NEGODONE; // XXX: KLUDGE
554 debug(3, "count=%d csg=%d", count, sess->csg);
555 status = loginPhase(sess);
559 } while(status == 0 && (sess->csg != FF_PHASE));
561 sess->flags &= ~SESS_INITIALLOGIN;
566 sess->flags |= SESS_LOGGEDIN;
567 if(strcmp(sess->op->sessionType, "Discovery") == 0)
568 doDiscovery(sess);
575 sess->flags &= ~SESS_NEGODONE;
576 sess->flags |= (SESS_REDIRECT | SESS_INITIALLOGIN1);
591 handleLogoutResp(isess_t *sess, pdu_t *pp)
593 if(sess->flags & SESS_DISCONNECT) {
595 if(ioctl(sess->fd, ISCSISTOP, &val)) {
604 startLogout(isess_t *sess)
614 return sendPDU(sess, &spp, handleLogoutResp);
618 inLogout(isess_t *sess)
620 if(sess->flags & SESS_RECONNECT)
678 isess_t *sess;
680 if((sess = calloc(1, sizeof(isess_t))) == NULL) {
687 sess->op = op;
688 sess->fd = -1;
689 sess->soc = -1;
690 sess->target.address = strdup(op->targetAddress);
691 sess->target.port = op->port;
692 sess->target.pgt = op->targetPortalGroupTag;
694 sess->flags = SESS_INITIALLOGIN | SESS_INITIALLOGIN1;
700 switch(tcpConnect(sess)) {
707 switch(startSession(sess)) {
715 switch(doLogin(sess)) {
723 switch(supervise(sess)) {
733 switch(startLogout(sess)) {
742 switch(inLogout(sess)) {