162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * iSCSI Initiator TCP Transport 462306a36Sopenharmony_ci * Copyright (C) 2004 Dmitry Yusupov 562306a36Sopenharmony_ci * Copyright (C) 2004 Alex Aizman 662306a36Sopenharmony_ci * Copyright (C) 2005 - 2006 Mike Christie 762306a36Sopenharmony_ci * Copyright (C) 2006 Red Hat, Inc. All rights reserved. 862306a36Sopenharmony_ci * maintained by open-iscsi@googlegroups.com 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * See the file COPYING included with this distribution for more details. 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#ifndef ISCSI_SW_TCP_H 1462306a36Sopenharmony_ci#define ISCSI_SW_TCP_H 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <scsi/libiscsi.h> 1762306a36Sopenharmony_ci#include <scsi/libiscsi_tcp.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistruct socket; 2062306a36Sopenharmony_cistruct iscsi_tcp_conn; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* Socket connection send helper */ 2362306a36Sopenharmony_cistruct iscsi_sw_tcp_send { 2462306a36Sopenharmony_ci struct iscsi_hdr *hdr; 2562306a36Sopenharmony_ci struct iscsi_segment segment; 2662306a36Sopenharmony_ci struct iscsi_segment data_segment; 2762306a36Sopenharmony_ci}; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistruct iscsi_sw_tcp_conn { 3062306a36Sopenharmony_ci struct socket *sock; 3162306a36Sopenharmony_ci /* Taken when accessing the sock from the netlink/sysfs interface */ 3262306a36Sopenharmony_ci struct mutex sock_lock; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci struct work_struct recvwork; 3562306a36Sopenharmony_ci bool queue_recv; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci struct iscsi_sw_tcp_send out; 3862306a36Sopenharmony_ci /* old values for socket callbacks */ 3962306a36Sopenharmony_ci void (*old_data_ready)(struct sock *); 4062306a36Sopenharmony_ci void (*old_state_change)(struct sock *); 4162306a36Sopenharmony_ci void (*old_write_space)(struct sock *); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci /* data and header digests */ 4462306a36Sopenharmony_ci struct ahash_request *tx_hash; /* CRC32C (Tx) */ 4562306a36Sopenharmony_ci struct ahash_request *rx_hash; /* CRC32C (Rx) */ 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci /* MIB custom statistics */ 4862306a36Sopenharmony_ci uint32_t sendpage_failures_cnt; 4962306a36Sopenharmony_ci uint32_t discontiguous_hdr_cnt; 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistruct iscsi_sw_tcp_host { 5362306a36Sopenharmony_ci struct iscsi_session *session; 5462306a36Sopenharmony_ci}; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_cistruct iscsi_sw_tcp_hdrbuf { 5762306a36Sopenharmony_ci struct iscsi_hdr hdrbuf; 5862306a36Sopenharmony_ci char hdrextbuf[ISCSI_MAX_AHS_SIZE + 5962306a36Sopenharmony_ci ISCSI_DIGEST_SIZE]; 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#endif /* ISCSI_SW_TCP_H */ 63