1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * iSCSI Initiator TCP Transport 4 * Copyright (C) 2004 Dmitry Yusupov 5 * Copyright (C) 2004 Alex Aizman 6 * Copyright (C) 2005 - 2006 Mike Christie 7 * Copyright (C) 2006 Red Hat, Inc. All rights reserved. 8 * maintained by open-iscsi@googlegroups.com 9 * 10 * See the file COPYING included with this distribution for more details. 11 */ 12 13 #ifndef ISCSI_SW_TCP_H 14 #define ISCSI_SW_TCP_H 15 16 #include <scsi/libiscsi.h> 17 #include <scsi/libiscsi_tcp.h> 18 19 struct socket; 20 struct iscsi_tcp_conn; 21 22 /* Socket connection send helper */ 23 struct iscsi_sw_tcp_send { 24 struct iscsi_hdr *hdr; 25 struct iscsi_segment segment; 26 struct iscsi_segment data_segment; 27 }; 28 29 struct iscsi_sw_tcp_conn { 30 struct socket *sock; 31 /* Taken when accessing the sock from the netlink/sysfs interface */ 32 struct mutex sock_lock; 33 34 struct work_struct recvwork; 35 bool queue_recv; 36 37 struct iscsi_sw_tcp_send out; 38 /* old values for socket callbacks */ 39 void (*old_data_ready)(struct sock *); 40 void (*old_state_change)(struct sock *); 41 void (*old_write_space)(struct sock *); 42 43 /* data and header digests */ 44 struct ahash_request *tx_hash; /* CRC32C (Tx) */ 45 struct ahash_request *rx_hash; /* CRC32C (Rx) */ 46 47 /* MIB custom statistics */ 48 uint32_t sendpage_failures_cnt; 49 uint32_t discontiguous_hdr_cnt; 50 51 ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int); 52 }; 53 54 struct iscsi_sw_tcp_host { 55 struct iscsi_session *session; 56 }; 57 58 struct iscsi_sw_tcp_hdrbuf { 59 struct iscsi_hdr hdrbuf; 60 char hdrextbuf[ISCSI_MAX_AHS_SIZE + 61 ISCSI_DIGEST_SIZE]; 62 }; 63 64 #endif /* ISCSI_SW_TCP_H */ 65