1 /* 2 * iSCSI Initiator TCP Transport 3 * Copyright (C) 2004 Dmitry Yusupov 4 * Copyright (C) 2004 Alex Aizman 5 * Copyright (C) 2005 - 2006 Mike Christie 6 * Copyright (C) 2006 Red Hat, Inc. All rights reserved. 7 * maintained by open-iscsi@googlegroups.com 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published 11 * by the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 * See the file COPYING included with this distribution for more details. 20 */ 21 22 #ifndef ISCSI_SW_TCP_H 23 #define ISCSI_SW_TCP_H 24 25 #include <scsi/libiscsi.h> 26 #include <scsi/libiscsi_tcp.h> 27 28 struct socket; 29 struct iscsi_tcp_conn; 30 31 /* Socket connection send helper */ 32 struct iscsi_sw_tcp_send { 33 struct iscsi_hdr *hdr; 34 struct iscsi_segment segment; 35 struct iscsi_segment data_segment; 36 }; 37 38 struct iscsi_sw_tcp_conn { 39 struct socket *sock; 40 41 struct iscsi_sw_tcp_send out; 42 /* old values for socket callbacks */ 43 void (*old_data_ready)(struct sock *); 44 void (*old_state_change)(struct sock *); 45 void (*old_write_space)(struct sock *); 46 47 /* data and header digests */ 48 struct ahash_request *tx_hash; /* CRC32C (Tx) */ 49 struct ahash_request *rx_hash; /* CRC32C (Rx) */ 50 51 /* MIB custom statistics */ 52 uint32_t sendpage_failures_cnt; 53 uint32_t discontiguous_hdr_cnt; 54 55 ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int); 56 }; 57 58 struct iscsi_sw_tcp_host { 59 struct iscsi_session *session; 60 }; 61 62 struct iscsi_sw_tcp_hdrbuf { 63 struct iscsi_hdr hdrbuf; 64 char hdrextbuf[ISCSI_MAX_AHS_SIZE + 65 ISCSI_DIGEST_SIZE]; 66 }; 67 68 #endif /* ISCSI_SW_TCP_H */ 69