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