Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/cam/ctl/ctl_frontend_iscsi.h
39478 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2012 The FreeBSD Foundation
5
*
6
* This software was developed by Edward Tomasz Napierala under sponsorship
7
* from the FreeBSD Foundation.
8
*
9
* Redistribution and use in source and binary forms, with or without
10
* modification, are permitted provided that the following conditions
11
* are met:
12
* 1. Redistributions of source code must retain the above copyright
13
* notice, this list of conditions and the following disclaimer.
14
* 2. Redistributions in binary form must reproduce the above copyright
15
* notice, this list of conditions and the following disclaimer in the
16
* documentation and/or other materials provided with the distribution.
17
*
18
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28
* SUCH DAMAGE.
29
*/
30
31
#ifndef CTL_FRONTEND_ISCSI_H
32
#define CTL_FRONTEND_ISCSI_H
33
34
#define CFISCSI_TARGET_STATE_INVALID 0
35
#define CFISCSI_TARGET_STATE_ACTIVE 1
36
#define CFISCSI_TARGET_STATE_DYING 2
37
38
struct cfiscsi_target {
39
TAILQ_ENTRY(cfiscsi_target) ct_next;
40
struct cfiscsi_softc *ct_softc;
41
volatile u_int ct_refcount;
42
char ct_name[CTL_ISCSI_NAME_LEN];
43
char ct_alias[CTL_ISCSI_ALIAS_LEN];
44
uint16_t ct_tag;
45
int ct_state;
46
int ct_online;
47
int ct_target_id;
48
struct ctl_port ct_port;
49
};
50
51
struct cfiscsi_data_wait {
52
TAILQ_ENTRY(cfiscsi_data_wait) cdw_next;
53
union ctl_io *cdw_ctl_io;
54
uint32_t cdw_target_transfer_tag;
55
uint32_t cdw_initiator_task_tag;
56
int cdw_sg_index;
57
char *cdw_sg_addr;
58
size_t cdw_sg_len;
59
uint32_t cdw_r2t_end;
60
uint32_t cdw_datasn;
61
void *cdw_icl_prv;
62
};
63
64
#define CFISCSI_SESSION_STATE_INVALID 0
65
#define CFISCSI_SESSION_STATE_BHS 1
66
#define CFISCSI_SESSION_STATE_AHS 2
67
#define CFISCSI_SESSION_STATE_HEADER_DIGEST 3
68
#define CFISCSI_SESSION_STATE_DATA 4
69
#define CFISCSI_SESSION_STATE_DATA_DIGEST 5
70
71
struct cfiscsi_session {
72
TAILQ_ENTRY(cfiscsi_session) cs_next;
73
struct mtx cs_lock;
74
struct icl_conn *cs_conn;
75
uint32_t cs_cmdsn;
76
uint32_t cs_statsn;
77
uint32_t cs_target_transfer_tag;
78
volatile u_int cs_outstanding_ctl_pdus;
79
TAILQ_HEAD(, cfiscsi_data_wait) cs_waiting_for_data_out;
80
struct cfiscsi_target *cs_target;
81
struct callout cs_callout;
82
int cs_timeout;
83
struct cv cs_maintenance_cv;
84
bool cs_terminating;
85
bool cs_terminating_tasks;
86
bool cs_handoff_in_progress;
87
bool cs_tasks_aborted;
88
int cs_max_burst_length;
89
int cs_first_burst_length;
90
bool cs_immediate_data;
91
char cs_initiator_name[CTL_ISCSI_NAME_LEN];
92
char cs_initiator_addr[CTL_ISCSI_ADDR_LEN];
93
char cs_initiator_alias[CTL_ISCSI_ALIAS_LEN];
94
char cs_initiator_isid[6];
95
char cs_initiator_id[CTL_ISCSI_NAME_LEN + 5 + 6 + 1];
96
unsigned int cs_id;
97
int cs_ctl_initid;
98
#ifdef ICL_KERNEL_PROXY
99
struct sockaddr *cs_initiator_sa;
100
int cs_portal_id;
101
bool cs_login_phase;
102
bool cs_waiting_for_ctld;
103
struct cv cs_login_cv;
104
struct icl_pdu *cs_login_pdu;
105
#endif
106
};
107
108
#ifdef ICL_KERNEL_PROXY
109
struct icl_listen;
110
#endif
111
112
struct cfiscsi_softc {
113
struct mtx lock;
114
char port_name[32];
115
int online;
116
int last_target_id;
117
unsigned int last_session_id;
118
TAILQ_HEAD(, cfiscsi_target) targets;
119
TAILQ_HEAD(, cfiscsi_session) sessions;
120
struct cv sessions_cv;
121
#ifdef ICL_KERNEL_PROXY
122
struct icl_listen *listener;
123
struct cv accept_cv;
124
#endif
125
};
126
127
#endif /* !CTL_FRONTEND_ISCSI_H */
128
129