diff options
-rw-r--r-- | usr.sbin/iscsid/connection.c | 13 | ||||
-rw-r--r-- | usr.sbin/iscsid/vscsi.c | 4 |
2 files changed, 14 insertions, 3 deletions
diff --git a/usr.sbin/iscsid/connection.c b/usr.sbin/iscsid/connection.c index 464b6ea0df0..35304f97364 100644 --- a/usr.sbin/iscsid/connection.c +++ b/usr.sbin/iscsid/connection.c @@ -1,4 +1,4 @@ -/* $OpenBSD: connection.c,v 1.17 2014/04/21 12:26:50 claudio Exp $ */ +/* $OpenBSD: connection.c,v 1.18 2014/04/21 18:59:05 claudio Exp $ */ /* * Copyright (c) 2009 Claudio Jeker <claudio@openbsd.org> @@ -285,6 +285,7 @@ conn_parse_kvp(struct connection *c, struct kvp *kvp) for (k = kvp; k->key; k++) { + /* XXX handle NotUnderstood|Irrelevant|Reject */ SET_NUM(k, s, MaxBurstLength, 512, 16777215); SET_NUM(k, s, FirstBurstLength, 512, 16777215); SET_NUM(k, s, DefaultTime2Wait, 0, 3600); @@ -425,7 +426,15 @@ c_do_connect(struct connection *c, enum c_event ev) session_fsm(c->session, SESS_EV_CONN_FAIL, c); return CONN_FREE; } - + if (c->config.LocalAddr.ss_len != 0) { + if (bind(c->fd, (struct sockaddr *)&c->config.LocalAddr, + c->config.LocalAddr.ss_len) == -1) { + log_warn("bind(%s)", + log_sockaddr(&c->config.LocalAddr)); + session_fsm(c->session, SESS_EV_CONN_FAIL, c); + return CONN_FREE; + } + } if (connect(c->fd, (struct sockaddr *)&c->config.TargetAddr, c->config.TargetAddr.ss_len) == -1) { if (errno == EINPROGRESS) { diff --git a/usr.sbin/iscsid/vscsi.c b/usr.sbin/iscsid/vscsi.c index 5606358fd9d..7878aa801d2 100644 --- a/usr.sbin/iscsid/vscsi.c +++ b/usr.sbin/iscsid/vscsi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vscsi.c,v 1.12 2014/04/21 12:24:58 claudio Exp $ */ +/* $OpenBSD: vscsi.c,v 1.13 2014/04/21 18:59:05 claudio Exp $ */ /* * Copyright (c) 2009 Claudio Jeker <claudio@openbsd.org> @@ -310,6 +310,8 @@ vscsi_dataout(struct connection *c, struct scsi_task *t, u_int32_t ttt, size = len - off > c->active.MaxRecvDataSegmentLength ? c->active.MaxRecvDataSegmentLength : len - off; + /* XXX also respect the MaxBurstLength */ + if (!(p = pdu_new())) fatal("vscsi_r2t"); if (!(dout = pdu_gethdr(p))) |