kernel.c (265507) | kernel.c (265509) |
---|---|
1/*- 2 * Copyright (c) 2003, 2004 Silicon Graphics International Corp. 3 * Copyright (c) 1997-2007 Kenneth D. Merry 4 * Copyright (c) 2012 The FreeBSD Foundation 5 * All rights reserved. 6 * 7 * Portions of this software were developed by Edward Tomasz Napierala 8 * under sponsorship from the FreeBSD Foundation. --- 18 unchanged lines hidden (view full) --- 27 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 31 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 32 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGES. 34 * | 1/*- 2 * Copyright (c) 2003, 2004 Silicon Graphics International Corp. 3 * Copyright (c) 1997-2007 Kenneth D. Merry 4 * Copyright (c) 2012 The FreeBSD Foundation 5 * All rights reserved. 6 * 7 * Portions of this software were developed by Edward Tomasz Napierala 8 * under sponsorship from the FreeBSD Foundation. --- 18 unchanged lines hidden (view full) --- 27 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 31 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 32 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGES. 34 * |
35 * $FreeBSD: stable/10/usr.sbin/ctld/kernel.c 265507 2014-05-07 07:29:39Z trasz $ | 35 * $FreeBSD: stable/10/usr.sbin/ctld/kernel.c 265509 2014-05-07 07:32:45Z trasz $ |
36 */ 37 38#include <sys/ioctl.h> 39#include <sys/types.h> 40#include <sys/stat.h> 41#include <sys/param.h> 42#include <sys/linker.h> 43#include <sys/queue.h> --- 573 unchanged lines hidden (view full) --- 617 req.data.handoff.data_digest = CTL_ISCSI_DIGEST_CRC32C; 618 req.data.handoff.cmdsn = conn->conn_cmdsn; 619 req.data.handoff.statsn = conn->conn_statsn; 620 req.data.handoff.max_recv_data_segment_length = 621 conn->conn_max_data_segment_length; 622 req.data.handoff.max_burst_length = conn->conn_max_burst_length; 623 req.data.handoff.immediate_data = conn->conn_immediate_data; 624 | 36 */ 37 38#include <sys/ioctl.h> 39#include <sys/types.h> 40#include <sys/stat.h> 41#include <sys/param.h> 42#include <sys/linker.h> 43#include <sys/queue.h> --- 573 unchanged lines hidden (view full) --- 617 req.data.handoff.data_digest = CTL_ISCSI_DIGEST_CRC32C; 618 req.data.handoff.cmdsn = conn->conn_cmdsn; 619 req.data.handoff.statsn = conn->conn_statsn; 620 req.data.handoff.max_recv_data_segment_length = 621 conn->conn_max_data_segment_length; 622 req.data.handoff.max_burst_length = conn->conn_max_burst_length; 623 req.data.handoff.immediate_data = conn->conn_immediate_data; 624 |
625 if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) | 625 if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) { |
626 log_err(1, "error issuing CTL_ISCSI ioctl; " 627 "dropping connection"); | 626 log_err(1, "error issuing CTL_ISCSI ioctl; " 627 "dropping connection"); |
628 } |
|
628 | 629 |
629 if (req.status != CTL_ISCSI_OK) | 630 if (req.status != CTL_ISCSI_OK) { |
630 log_errx(1, "error returned from CTL iSCSI handoff request: " 631 "%s; dropping connection", req.error_str); | 631 log_errx(1, "error returned from CTL iSCSI handoff request: " 632 "%s; dropping connection", req.error_str); |
633 } |
|
632} 633 634int 635kernel_port_on(void) 636{ 637 struct ctl_port_entry entry; 638 int error; 639 --- 28 unchanged lines hidden (view full) --- 668 return (-1); 669 } 670 671 return (0); 672} 673 674#ifdef ICL_KERNEL_PROXY 675void | 634} 635 636int 637kernel_port_on(void) 638{ 639 struct ctl_port_entry entry; 640 int error; 641 --- 28 unchanged lines hidden (view full) --- 670 return (-1); 671 } 672 673 return (0); 674} 675 676#ifdef ICL_KERNEL_PROXY 677void |
676kernel_listen(struct addrinfo *ai, bool iser) | 678kernel_listen(struct addrinfo *ai, bool iser, int portal_id) |
677{ 678 struct ctl_iscsi req; 679 680 bzero(&req, sizeof(req)); 681 682 req.type = CTL_ISCSI_LISTEN; 683 req.data.listen.iser = iser; 684 req.data.listen.domain = ai->ai_family; 685 req.data.listen.socktype = ai->ai_socktype; 686 req.data.listen.protocol = ai->ai_protocol; 687 req.data.listen.addr = ai->ai_addr; 688 req.data.listen.addrlen = ai->ai_addrlen; | 679{ 680 struct ctl_iscsi req; 681 682 bzero(&req, sizeof(req)); 683 684 req.type = CTL_ISCSI_LISTEN; 685 req.data.listen.iser = iser; 686 req.data.listen.domain = ai->ai_family; 687 req.data.listen.socktype = ai->ai_socktype; 688 req.data.listen.protocol = ai->ai_protocol; 689 req.data.listen.addr = ai->ai_addr; 690 req.data.listen.addrlen = ai->ai_addrlen; |
691 req.data.listen.portal_id = portal_id; |
|
689 | 692 |
690 if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) { | 693 if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) |
691 log_err(1, "error issuing CTL_ISCSI ioctl"); | 694 log_err(1, "error issuing CTL_ISCSI ioctl"); |
692 return; 693 } | |
694 695 if (req.status != CTL_ISCSI_OK) { 696 log_errx(1, "error returned from CTL iSCSI listen: %s", 697 req.error_str); 698 } 699} 700 | 695 696 if (req.status != CTL_ISCSI_OK) { 697 log_errx(1, "error returned from CTL iSCSI listen: %s", 698 req.error_str); 699 } 700} 701 |
701int 702kernel_accept(void) | 702void 703kernel_accept(int *connection_id, int *portal_id) |
703{ 704 struct ctl_iscsi req; 705 706 bzero(&req, sizeof(req)); 707 708 req.type = CTL_ISCSI_ACCEPT; 709 | 704{ 705 struct ctl_iscsi req; 706 707 bzero(&req, sizeof(req)); 708 709 req.type = CTL_ISCSI_ACCEPT; 710 |
710 if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) { 711 log_warn("error issuing CTL_ISCSI ioctl"); 712 return (0); 713 } | 711 if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) 712 log_err(1, "error issuing CTL_ISCSI ioctl"); |
714 715 if (req.status != CTL_ISCSI_OK) { | 713 714 if (req.status != CTL_ISCSI_OK) { |
716 log_warnx("error returned from CTL iSCSI accept: %s", | 715 log_errx(1, "error returned from CTL iSCSI accept: %s", |
717 req.error_str); | 716 req.error_str); |
718 return (0); | |
719 } 720 | 717 } 718 |
721 return (req.data.accept.connection_id); | 719 *connection_id = req.data.accept.connection_id; 720 *portal_id = req.data.accept.portal_id; |
722} 723 724void 725kernel_send(struct pdu *pdu) 726{ 727 struct ctl_iscsi req; 728 729 bzero(&req, sizeof(req)); --- 79 unchanged lines hidden --- | 721} 722 723void 724kernel_send(struct pdu *pdu) 725{ 726 struct ctl_iscsi req; 727 728 bzero(&req, sizeof(req)); --- 79 unchanged lines hidden --- |