0001
0002 #ifndef ISCSI_TARGET_CORE_H
0003 #define ISCSI_TARGET_CORE_H
0004
0005 #include <linux/dma-direction.h> /* enum dma_data_direction */
0006 #include <linux/list.h> /* struct list_head */
0007 #include <linux/sched.h>
0008 #include <linux/socket.h> /* struct sockaddr_storage */
0009 #include <linux/types.h> /* u8 */
0010 #include <scsi/iscsi_proto.h> /* itt_t */
0011 #include <target/target_core_base.h> /* struct se_cmd */
0012
0013 struct sock;
0014
0015 #define ISCSIT_VERSION "v4.1.0"
0016 #define ISCSI_MAX_DATASN_MISSING_COUNT 16
0017 #define ISCSI_TX_THREAD_TCP_TIMEOUT 2
0018 #define ISCSI_RX_THREAD_TCP_TIMEOUT 2
0019 #define SECONDS_FOR_ASYNC_LOGOUT 10
0020 #define SECONDS_FOR_ASYNC_TEXT 10
0021 #define SECONDS_FOR_LOGOUT_COMP 15
0022 #define WHITE_SPACE " \t\v\f\n\r"
0023 #define ISCSIT_MIN_TAGS 16
0024 #define ISCSIT_EXTRA_TAGS 8
0025 #define ISCSIT_TCP_BACKLOG 256
0026 #define ISCSI_RX_THREAD_NAME "iscsi_trx"
0027 #define ISCSI_TX_THREAD_NAME "iscsi_ttx"
0028 #define ISCSI_IQN_LEN 224
0029 #define NA_AUTHENTICATION_INHERITED -1
0030
0031
0032 #define NA_DATAOUT_TIMEOUT 3
0033 #define NA_DATAOUT_TIMEOUT_MAX 60
0034 #define NA_DATAOUT_TIMEOUT_MIX 2
0035 #define NA_DATAOUT_TIMEOUT_RETRIES 5
0036 #define NA_DATAOUT_TIMEOUT_RETRIES_MAX 15
0037 #define NA_DATAOUT_TIMEOUT_RETRIES_MIN 1
0038 #define NA_NOPIN_TIMEOUT 15
0039 #define NA_NOPIN_TIMEOUT_MAX 60
0040 #define NA_NOPIN_TIMEOUT_MIN 3
0041 #define NA_NOPIN_RESPONSE_TIMEOUT 30
0042 #define NA_NOPIN_RESPONSE_TIMEOUT_MAX 60
0043 #define NA_NOPIN_RESPONSE_TIMEOUT_MIN 3
0044 #define NA_RANDOM_DATAIN_PDU_OFFSETS 0
0045 #define NA_RANDOM_DATAIN_SEQ_OFFSETS 0
0046 #define NA_RANDOM_R2T_OFFSETS 0
0047
0048
0049 #define TA_AUTHENTICATION 1
0050 #define TA_LOGIN_TIMEOUT 15
0051 #define TA_LOGIN_TIMEOUT_MAX 30
0052 #define TA_LOGIN_TIMEOUT_MIN 5
0053 #define TA_NETIF_TIMEOUT 2
0054 #define TA_NETIF_TIMEOUT_MAX 15
0055 #define TA_NETIF_TIMEOUT_MIN 2
0056 #define TA_GENERATE_NODE_ACLS 0
0057 #define TA_DEFAULT_CMDSN_DEPTH 64
0058 #define TA_DEFAULT_CMDSN_DEPTH_MAX 512
0059 #define TA_DEFAULT_CMDSN_DEPTH_MIN 1
0060 #define TA_CACHE_DYNAMIC_ACLS 0
0061
0062 #define TA_DEMO_MODE_WRITE_PROTECT 1
0063
0064 #define TA_PROD_MODE_WRITE_PROTECT 0
0065 #define TA_DEMO_MODE_DISCOVERY 1
0066 #define TA_DEFAULT_ERL 0
0067 #define TA_CACHE_CORE_NPS 0
0068
0069 #define TA_DEFAULT_T10_PI 0
0070 #define TA_DEFAULT_FABRIC_PROT_TYPE 0
0071
0072 #define TA_DEFAULT_TPG_ENABLED_SENDTARGETS 1
0073
0074
0075
0076
0077
0078
0079
0080 #define TA_DEFAULT_LOGIN_KEYS_WORKAROUND 1
0081
0082 #define ISCSI_IOV_DATA_BUFFER 5
0083
0084 enum iscsit_transport_type {
0085 ISCSI_TCP = 0,
0086 ISCSI_SCTP_TCP = 1,
0087 ISCSI_SCTP_UDP = 2,
0088 ISCSI_IWARP_TCP = 3,
0089 ISCSI_IWARP_SCTP = 4,
0090 ISCSI_INFINIBAND = 5,
0091 ISCSI_CXGBIT = 6,
0092 };
0093
0094
0095 enum target_conn_state_table {
0096 TARG_CONN_STATE_FREE = 0x1,
0097 TARG_CONN_STATE_XPT_UP = 0x3,
0098 TARG_CONN_STATE_IN_LOGIN = 0x4,
0099 TARG_CONN_STATE_LOGGED_IN = 0x5,
0100 TARG_CONN_STATE_IN_LOGOUT = 0x6,
0101 TARG_CONN_STATE_LOGOUT_REQUESTED = 0x7,
0102 TARG_CONN_STATE_CLEANUP_WAIT = 0x8,
0103 };
0104
0105
0106 enum target_sess_state_table {
0107 TARG_SESS_STATE_FREE = 0x1,
0108 TARG_SESS_STATE_ACTIVE = 0x2,
0109 TARG_SESS_STATE_LOGGED_IN = 0x3,
0110 TARG_SESS_STATE_FAILED = 0x4,
0111 TARG_SESS_STATE_IN_CONTINUE = 0x5,
0112 };
0113
0114
0115 enum data_count_type {
0116 ISCSI_RX_DATA = 1,
0117 ISCSI_TX_DATA = 2,
0118 };
0119
0120
0121 enum datain_req_comp_table {
0122 DATAIN_COMPLETE_NORMAL = 1,
0123 DATAIN_COMPLETE_WITHIN_COMMAND_RECOVERY = 2,
0124 DATAIN_COMPLETE_CONNECTION_RECOVERY = 3,
0125 };
0126
0127
0128 enum datain_req_rec_table {
0129 DATAIN_WITHIN_COMMAND_RECOVERY = 1,
0130 DATAIN_CONNECTION_RECOVERY = 2,
0131 };
0132
0133
0134 enum tpg_state_table {
0135 TPG_STATE_FREE = 0,
0136 TPG_STATE_ACTIVE = 1,
0137 TPG_STATE_INACTIVE = 2,
0138 TPG_STATE_COLD_RESET = 3,
0139 };
0140
0141
0142 enum tiqn_state_table {
0143 TIQN_STATE_ACTIVE = 1,
0144 TIQN_STATE_SHUTDOWN = 2,
0145 };
0146
0147
0148 enum cmd_flags_table {
0149 ICF_GOT_LAST_DATAOUT = 0x00000001,
0150 ICF_GOT_DATACK_SNACK = 0x00000002,
0151 ICF_NON_IMMEDIATE_UNSOLICITED_DATA = 0x00000004,
0152 ICF_SENT_LAST_R2T = 0x00000008,
0153 ICF_WITHIN_COMMAND_RECOVERY = 0x00000010,
0154 ICF_CONTIG_MEMORY = 0x00000020,
0155 ICF_ATTACHED_TO_RQUEUE = 0x00000040,
0156 ICF_OOO_CMDSN = 0x00000080,
0157 ICF_SENDTARGETS_ALL = 0x00000100,
0158 ICF_SENDTARGETS_SINGLE = 0x00000200,
0159 };
0160
0161
0162 enum cmd_i_state_table {
0163 ISTATE_NO_STATE = 0,
0164 ISTATE_NEW_CMD = 1,
0165 ISTATE_DEFERRED_CMD = 2,
0166 ISTATE_UNSOLICITED_DATA = 3,
0167 ISTATE_RECEIVE_DATAOUT = 4,
0168 ISTATE_RECEIVE_DATAOUT_RECOVERY = 5,
0169 ISTATE_RECEIVED_LAST_DATAOUT = 6,
0170 ISTATE_WITHIN_DATAOUT_RECOVERY = 7,
0171 ISTATE_IN_CONNECTION_RECOVERY = 8,
0172 ISTATE_RECEIVED_TASKMGT = 9,
0173 ISTATE_SEND_ASYNCMSG = 10,
0174 ISTATE_SENT_ASYNCMSG = 11,
0175 ISTATE_SEND_DATAIN = 12,
0176 ISTATE_SEND_LAST_DATAIN = 13,
0177 ISTATE_SENT_LAST_DATAIN = 14,
0178 ISTATE_SEND_LOGOUTRSP = 15,
0179 ISTATE_SENT_LOGOUTRSP = 16,
0180 ISTATE_SEND_NOPIN = 17,
0181 ISTATE_SENT_NOPIN = 18,
0182 ISTATE_SEND_REJECT = 19,
0183 ISTATE_SENT_REJECT = 20,
0184 ISTATE_SEND_R2T = 21,
0185 ISTATE_SENT_R2T = 22,
0186 ISTATE_SEND_R2T_RECOVERY = 23,
0187 ISTATE_SENT_R2T_RECOVERY = 24,
0188 ISTATE_SEND_LAST_R2T = 25,
0189 ISTATE_SENT_LAST_R2T = 26,
0190 ISTATE_SEND_LAST_R2T_RECOVERY = 27,
0191 ISTATE_SENT_LAST_R2T_RECOVERY = 28,
0192 ISTATE_SEND_STATUS = 29,
0193 ISTATE_SEND_STATUS_BROKEN_PC = 30,
0194 ISTATE_SENT_STATUS = 31,
0195 ISTATE_SEND_STATUS_RECOVERY = 32,
0196 ISTATE_SENT_STATUS_RECOVERY = 33,
0197 ISTATE_SEND_TASKMGTRSP = 34,
0198 ISTATE_SENT_TASKMGTRSP = 35,
0199 ISTATE_SEND_TEXTRSP = 36,
0200 ISTATE_SENT_TEXTRSP = 37,
0201 ISTATE_SEND_NOPIN_WANT_RESPONSE = 38,
0202 ISTATE_SENT_NOPIN_WANT_RESPONSE = 39,
0203 ISTATE_SEND_NOPIN_NO_RESPONSE = 40,
0204 ISTATE_REMOVE = 41,
0205 ISTATE_FREE = 42,
0206 };
0207
0208
0209 enum recover_cmdsn_ret_table {
0210 CMDSN_ERROR_CANNOT_RECOVER = -1,
0211 CMDSN_NORMAL_OPERATION = 0,
0212 CMDSN_LOWER_THAN_EXP = 1,
0213 CMDSN_HIGHER_THAN_EXP = 2,
0214 CMDSN_MAXCMDSN_OVERRUN = 3,
0215 };
0216
0217
0218 enum immedate_data_ret_table {
0219 IMMEDIATE_DATA_CANNOT_RECOVER = -1,
0220 IMMEDIATE_DATA_NORMAL_OPERATION = 0,
0221 IMMEDIATE_DATA_ERL1_CRC_FAILURE = 1,
0222 };
0223
0224
0225 enum dataout_action_ret_table {
0226 DATAOUT_CANNOT_RECOVER = -1,
0227 DATAOUT_NORMAL = 0,
0228 DATAOUT_SEND_R2T = 1,
0229 DATAOUT_SEND_TO_TRANSPORT = 2,
0230 DATAOUT_WITHIN_COMMAND_RECOVERY = 3,
0231 };
0232
0233
0234 enum naf_flags_table {
0235 NAF_USERID_SET = 0x01,
0236 NAF_PASSWORD_SET = 0x02,
0237 NAF_USERID_IN_SET = 0x04,
0238 NAF_PASSWORD_IN_SET = 0x08,
0239 };
0240
0241
0242 enum iscsi_timer_flags_table {
0243 ISCSI_TF_RUNNING = 0x01,
0244 ISCSI_TF_STOP = 0x02,
0245 ISCSI_TF_EXPIRED = 0x04,
0246 };
0247
0248
0249 enum np_flags_table {
0250 NPF_IP_NETWORK = 0x00,
0251 };
0252
0253
0254 enum np_thread_state_table {
0255 ISCSI_NP_THREAD_ACTIVE = 1,
0256 ISCSI_NP_THREAD_INACTIVE = 2,
0257 ISCSI_NP_THREAD_RESET = 3,
0258 ISCSI_NP_THREAD_SHUTDOWN = 4,
0259 ISCSI_NP_THREAD_EXIT = 5,
0260 };
0261
0262 struct iscsi_conn_ops {
0263 u8 HeaderDigest;
0264 u8 DataDigest;
0265 u32 MaxRecvDataSegmentLength;
0266 u32 MaxXmitDataSegmentLength;
0267
0268
0269
0270 u32 InitiatorRecvDataSegmentLength;
0271 u32 TargetRecvDataSegmentLength;
0272 };
0273
0274 struct iscsi_sess_ops {
0275 char InitiatorName[ISCSI_IQN_LEN];
0276 char InitiatorAlias[256];
0277 char TargetName[ISCSI_IQN_LEN];
0278 char TargetAlias[256];
0279 char TargetAddress[256];
0280 u16 TargetPortalGroupTag;
0281 u16 MaxConnections;
0282 u8 InitialR2T;
0283 u8 ImmediateData;
0284 u32 MaxBurstLength;
0285 u32 FirstBurstLength;
0286 u16 DefaultTime2Wait;
0287 u16 DefaultTime2Retain;
0288 u16 MaxOutstandingR2T;
0289 u8 DataPDUInOrder;
0290 u8 DataSequenceInOrder;
0291 u8 ErrorRecoveryLevel;
0292 u8 SessionType;
0293
0294
0295
0296 u8 RDMAExtensions;
0297 };
0298
0299 struct iscsi_queue_req {
0300 int state;
0301 struct iscsit_cmd *cmd;
0302 struct list_head qr_list;
0303 };
0304
0305 struct iscsi_param_list {
0306 bool iser;
0307 struct list_head param_list;
0308 struct list_head extra_response_list;
0309 };
0310
0311 struct iscsi_datain_req {
0312 enum datain_req_comp_table dr_complete;
0313 int generate_recovery_values;
0314 enum datain_req_rec_table recovery;
0315 u32 begrun;
0316 u32 runlength;
0317 u32 data_length;
0318 u32 data_offset;
0319 u32 data_sn;
0320 u32 next_burst_len;
0321 u32 read_data_done;
0322 u32 seq_send_order;
0323 struct list_head cmd_datain_node;
0324 } ____cacheline_aligned;
0325
0326 struct iscsi_ooo_cmdsn {
0327 u16 cid;
0328 u32 batch_count;
0329 u32 cmdsn;
0330 u32 exp_cmdsn;
0331 struct iscsit_cmd *cmd;
0332 struct list_head ooo_list;
0333 } ____cacheline_aligned;
0334
0335 struct iscsi_datain {
0336 u8 flags;
0337 u32 data_sn;
0338 u32 length;
0339 u32 offset;
0340 } ____cacheline_aligned;
0341
0342 struct iscsi_r2t {
0343 int seq_complete;
0344 int recovery_r2t;
0345 int sent_r2t;
0346 u32 r2t_sn;
0347 u32 offset;
0348 u32 targ_xfer_tag;
0349 u32 xfer_len;
0350 struct list_head r2t_list;
0351 } ____cacheline_aligned;
0352
0353 struct iscsit_cmd {
0354 enum iscsi_timer_flags_table dataout_timer_flags;
0355
0356 u8 dataout_timeout_retries;
0357
0358 u8 error_recovery_count;
0359
0360 enum cmd_i_state_table deferred_i_state;
0361
0362 enum cmd_i_state_table i_state;
0363
0364 u8 immediate_cmd;
0365
0366 u8 immediate_data;
0367
0368 u8 iscsi_opcode;
0369
0370 u8 iscsi_response;
0371
0372 u8 logout_reason;
0373
0374 u8 logout_response;
0375
0376 u8 maxcmdsn_inc;
0377
0378 u8 unsolicited_data;
0379
0380 u8 reject_reason;
0381
0382 u16 logout_cid;
0383
0384 enum cmd_flags_table cmd_flags;
0385
0386 itt_t init_task_tag;
0387
0388 u32 targ_xfer_tag;
0389
0390 u32 cmd_sn;
0391
0392 u32 exp_stat_sn;
0393
0394 u32 stat_sn;
0395
0396 u32 data_sn;
0397
0398 u32 r2t_sn;
0399
0400 u32 acked_data_sn;
0401
0402 u32 buf_ptr_size;
0403
0404 u32 data_crc;
0405
0406 u32 outstanding_r2ts;
0407
0408 u32 r2t_offset;
0409
0410 u32 iov_data_count;
0411 u32 orig_iov_data_count;
0412
0413 u32 iov_misc_count;
0414
0415 u32 pdu_count;
0416
0417 u32 pdu_send_order;
0418
0419 u32 pdu_start;
0420
0421 u32 seq_send_order;
0422
0423 u32 seq_count;
0424
0425 u32 seq_no;
0426
0427 u32 seq_start_offset;
0428
0429 u32 seq_end_offset;
0430
0431 u32 read_data_done;
0432
0433 u32 write_data_done;
0434
0435 u32 first_burst_len;
0436
0437 u32 next_burst_len;
0438
0439 u32 tx_size;
0440
0441 void *buf_ptr;
0442
0443 void *text_in_ptr;
0444
0445 enum dma_data_direction data_direction;
0446
0447 unsigned char pdu[ISCSI_HDR_LEN + ISCSI_CRC_LEN];
0448
0449 atomic_t immed_queue_count;
0450 atomic_t response_queue_count;
0451 spinlock_t datain_lock;
0452 spinlock_t dataout_timeout_lock;
0453
0454 spinlock_t istate_lock;
0455
0456 spinlock_t error_lock;
0457
0458 spinlock_t r2t_lock;
0459
0460 struct list_head datain_list;
0461
0462 struct list_head cmd_r2t_list;
0463
0464 struct timer_list dataout_timer;
0465
0466 struct kvec *iov_data;
0467 void *overflow_buf;
0468
0469 #define ISCSI_MISC_IOVECS 5
0470 struct kvec iov_misc[ISCSI_MISC_IOVECS];
0471
0472 struct iscsi_pdu *pdu_list;
0473
0474 struct iscsi_pdu *pdu_ptr;
0475
0476 struct iscsi_seq *seq_list;
0477
0478 struct iscsi_seq *seq_ptr;
0479
0480 struct iscsi_tmr_req *tmr_req;
0481
0482 struct iscsit_conn *conn;
0483
0484 struct iscsi_conn_recovery *cr;
0485
0486 struct iscsit_session *sess;
0487
0488 struct list_head i_conn_node;
0489
0490 struct se_cmd se_cmd;
0491
0492 #define ISCSI_SENSE_BUFFER_LEN (TRANSPORT_SENSE_BUFFER + 2)
0493 unsigned char sense_buffer[ISCSI_SENSE_BUFFER_LEN];
0494
0495 u32 padding;
0496 u8 pad_bytes[4];
0497
0498 struct scatterlist *first_data_sg;
0499 u32 first_data_sg_off;
0500 u32 kmapped_nents;
0501 sense_reason_t sense_reason;
0502 } ____cacheline_aligned;
0503
0504 struct iscsi_tmr_req {
0505 bool task_reassign:1;
0506 u32 exp_data_sn;
0507 struct iscsit_cmd *ref_cmd;
0508 struct iscsi_conn_recovery *conn_recovery;
0509 struct se_tmr_req *se_tmr_req;
0510 };
0511
0512 struct iscsit_conn {
0513 wait_queue_head_t queues_wq;
0514
0515 u8 auth_complete;
0516
0517 u8 conn_state;
0518 u8 conn_logout_reason;
0519 u8 network_transport;
0520 enum iscsi_timer_flags_table nopin_timer_flags;
0521 enum iscsi_timer_flags_table nopin_response_timer_flags;
0522
0523 u8 which_thread;
0524
0525 u16 cid;
0526
0527 u16 login_port;
0528 int net_size;
0529 int login_family;
0530 u32 auth_id;
0531 u32 conn_flags;
0532
0533 itt_t login_itt;
0534 u32 exp_statsn;
0535
0536 u32 stat_sn;
0537 struct sockaddr_storage login_sockaddr;
0538 struct sockaddr_storage local_sockaddr;
0539 int conn_usage_count;
0540 int conn_waiting_on_uc;
0541 atomic_t check_immediate_queue;
0542 atomic_t conn_logout_remove;
0543 atomic_t connection_exit;
0544 atomic_t connection_recovery;
0545 atomic_t connection_reinstatement;
0546 atomic_t connection_wait_rcfr;
0547 atomic_t sleep_on_conn_wait_comp;
0548 atomic_t transport_failed;
0549 struct completion conn_post_wait_comp;
0550 struct completion conn_wait_comp;
0551 struct completion conn_wait_rcfr_comp;
0552 struct completion conn_waiting_on_uc_comp;
0553 struct completion conn_logout_comp;
0554 struct completion tx_half_close_comp;
0555 struct completion rx_half_close_comp;
0556
0557 struct socket *sock;
0558 void (*orig_data_ready)(struct sock *);
0559 void (*orig_state_change)(struct sock *);
0560 #define LOGIN_FLAGS_READY 0
0561 #define LOGIN_FLAGS_INITIAL_PDU 1
0562 #define LOGIN_FLAGS_READ_ACTIVE 2
0563 #define LOGIN_FLAGS_WRITE_ACTIVE 3
0564 #define LOGIN_FLAGS_CLOSED 4
0565 unsigned long login_flags;
0566 struct delayed_work login_work;
0567 struct iscsi_login *login;
0568 struct timer_list nopin_timer;
0569 struct timer_list nopin_response_timer;
0570 struct timer_list transport_timer;
0571 struct task_struct *login_kworker;
0572
0573 spinlock_t cmd_lock;
0574 spinlock_t conn_usage_lock;
0575 spinlock_t immed_queue_lock;
0576 spinlock_t nopin_timer_lock;
0577 spinlock_t response_queue_lock;
0578 spinlock_t state_lock;
0579
0580 struct ahash_request *conn_rx_hash;
0581 struct ahash_request *conn_tx_hash;
0582
0583 cpumask_var_t conn_cpumask;
0584 cpumask_var_t allowed_cpumask;
0585 unsigned int conn_rx_reset_cpumask:1;
0586 unsigned int conn_tx_reset_cpumask:1;
0587
0588 struct list_head conn_cmd_list;
0589 struct list_head immed_queue_list;
0590 struct list_head response_queue_list;
0591 struct iscsi_conn_ops *conn_ops;
0592 struct iscsi_login *conn_login;
0593 struct iscsit_transport *conn_transport;
0594 struct iscsi_param_list *param_list;
0595
0596 void *auth_protocol;
0597 void *context;
0598 struct iscsi_login_thread_s *login_thread;
0599 struct iscsi_portal_group *tpg;
0600 struct iscsi_tpg_np *tpg_np;
0601
0602 struct iscsit_session *sess;
0603 int bitmap_id;
0604 int rx_thread_active;
0605 struct task_struct *rx_thread;
0606 struct completion rx_login_comp;
0607 int tx_thread_active;
0608 struct task_struct *tx_thread;
0609
0610 struct list_head conn_list;
0611 } ____cacheline_aligned;
0612
0613 struct iscsi_conn_recovery {
0614 u16 cid;
0615 u32 cmd_count;
0616 u32 maxrecvdatasegmentlength;
0617 u32 maxxmitdatasegmentlength;
0618 int ready_for_reallegiance;
0619 struct list_head conn_recovery_cmd_list;
0620 spinlock_t conn_recovery_cmd_lock;
0621 struct timer_list time2retain_timer;
0622 struct iscsit_session *sess;
0623 struct list_head cr_list;
0624 } ____cacheline_aligned;
0625
0626 struct iscsit_session {
0627 u8 initiator_vendor;
0628 u8 isid[6];
0629 enum iscsi_timer_flags_table time2retain_timer_flags;
0630 u8 version_active;
0631 u16 cid_called;
0632 u16 conn_recovery_count;
0633 u16 tsih;
0634
0635 u32 session_state;
0636
0637 itt_t init_task_tag;
0638
0639 u32 targ_xfer_tag;
0640 u32 cmdsn_window;
0641
0642
0643 struct mutex cmdsn_mutex;
0644
0645 u32 exp_cmd_sn;
0646
0647 atomic_t max_cmd_sn;
0648 struct list_head sess_ooo_cmdsn_list;
0649
0650
0651 u32 sid;
0652 char auth_type[8];
0653
0654 int session_index;
0655
0656 int session_usage_count;
0657 int session_waiting_on_uc;
0658 atomic_long_t cmd_pdus;
0659 atomic_long_t rsp_pdus;
0660 atomic_long_t tx_data_octets;
0661 atomic_long_t rx_data_octets;
0662 atomic_long_t conn_digest_errors;
0663 atomic_long_t conn_timeout_errors;
0664 u64 creation_time;
0665
0666 atomic_t nconn;
0667 atomic_t session_continuation;
0668 atomic_t session_fall_back_to_erl0;
0669 atomic_t session_logout;
0670 atomic_t session_reinstatement;
0671 atomic_t session_stop_active;
0672 atomic_t session_close;
0673
0674 struct list_head sess_conn_list;
0675 struct list_head cr_active_list;
0676 struct list_head cr_inactive_list;
0677 spinlock_t conn_lock;
0678 spinlock_t cr_a_lock;
0679 spinlock_t cr_i_lock;
0680 spinlock_t session_usage_lock;
0681 spinlock_t ttt_lock;
0682 struct completion async_msg_comp;
0683 struct completion reinstatement_comp;
0684 struct completion session_wait_comp;
0685 struct completion session_waiting_on_uc_comp;
0686 struct timer_list time2retain_timer;
0687 struct iscsi_sess_ops *sess_ops;
0688 struct se_session *se_sess;
0689 struct iscsi_portal_group *tpg;
0690 } ____cacheline_aligned;
0691
0692 struct iscsi_login {
0693 u8 auth_complete;
0694 u8 checked_for_existing;
0695 u8 current_stage;
0696 u8 leading_connection;
0697 u8 first_request;
0698 u8 version_min;
0699 u8 version_max;
0700 u8 login_complete;
0701 u8 login_failed;
0702 bool zero_tsih;
0703 char isid[6];
0704 u32 cmd_sn;
0705 itt_t init_task_tag;
0706 u32 initial_exp_statsn;
0707 u32 rsp_length;
0708 u16 cid;
0709 u16 tsih;
0710 char req[ISCSI_HDR_LEN];
0711 char rsp[ISCSI_HDR_LEN];
0712 char *req_buf;
0713 char *rsp_buf;
0714 struct iscsit_conn *conn;
0715 struct iscsi_np *np;
0716 } ____cacheline_aligned;
0717
0718 struct iscsi_node_attrib {
0719 s32 authentication;
0720 u32 dataout_timeout;
0721 u32 dataout_timeout_retries;
0722 u32 default_erl;
0723 u32 nopin_timeout;
0724 u32 nopin_response_timeout;
0725 u32 random_datain_pdu_offsets;
0726 u32 random_datain_seq_offsets;
0727 u32 random_r2t_offsets;
0728 u32 tmr_cold_reset;
0729 u32 tmr_warm_reset;
0730 struct iscsi_node_acl *nacl;
0731 };
0732
0733 struct se_dev_entry_s;
0734
0735 struct iscsi_node_auth {
0736 enum naf_flags_table naf_flags;
0737 int authenticate_target;
0738
0739
0740 int enforce_discovery_auth;
0741 #define MAX_USER_LEN 256
0742 #define MAX_PASS_LEN 256
0743 char userid[MAX_USER_LEN];
0744 char password[MAX_PASS_LEN];
0745 char userid_mutual[MAX_USER_LEN];
0746 char password_mutual[MAX_PASS_LEN];
0747 };
0748
0749 #include "iscsi_target_stat.h"
0750
0751 struct iscsi_node_stat_grps {
0752 struct config_group iscsi_sess_stats_group;
0753 struct config_group iscsi_conn_stats_group;
0754 };
0755
0756 struct iscsi_node_acl {
0757 struct se_node_acl se_node_acl;
0758 struct iscsi_node_attrib node_attrib;
0759 struct iscsi_node_auth node_auth;
0760 struct iscsi_node_stat_grps node_stat_grps;
0761 };
0762
0763 static inline struct iscsi_node_acl *
0764 to_iscsi_nacl(struct se_node_acl *se_nacl)
0765 {
0766 return container_of(se_nacl, struct iscsi_node_acl, se_node_acl);
0767 }
0768
0769 struct iscsi_tpg_attrib {
0770 u32 authentication;
0771 u32 login_timeout;
0772 u32 netif_timeout;
0773 u32 generate_node_acls;
0774 u32 cache_dynamic_acls;
0775 u32 default_cmdsn_depth;
0776 u32 demo_mode_write_protect;
0777 u32 prod_mode_write_protect;
0778 u32 demo_mode_discovery;
0779 u32 default_erl;
0780 u8 t10_pi;
0781 u32 fabric_prot_type;
0782 u32 tpg_enabled_sendtargets;
0783 u32 login_keys_workaround;
0784 struct iscsi_portal_group *tpg;
0785 };
0786
0787 struct iscsi_np {
0788 int np_network_transport;
0789 int np_ip_proto;
0790 int np_sock_type;
0791 enum np_thread_state_table np_thread_state;
0792 bool enabled;
0793 atomic_t np_reset_count;
0794 enum iscsi_timer_flags_table np_login_timer_flags;
0795 u32 np_exports;
0796 enum np_flags_table np_flags;
0797 spinlock_t np_thread_lock;
0798 struct completion np_restart_comp;
0799 struct socket *np_socket;
0800 struct sockaddr_storage np_sockaddr;
0801 struct task_struct *np_thread;
0802 struct timer_list np_login_timer;
0803 void *np_context;
0804 struct iscsit_transport *np_transport;
0805 struct list_head np_list;
0806 } ____cacheline_aligned;
0807
0808 struct iscsi_tpg_np {
0809 struct iscsi_np *tpg_np;
0810 struct iscsi_portal_group *tpg;
0811 struct iscsi_tpg_np *tpg_np_parent;
0812 struct list_head tpg_np_list;
0813 struct list_head tpg_np_child_list;
0814 struct list_head tpg_np_parent_list;
0815 struct se_tpg_np se_tpg_np;
0816 spinlock_t tpg_np_parent_lock;
0817 struct completion tpg_np_comp;
0818 struct kref tpg_np_kref;
0819 };
0820
0821 struct iscsi_portal_group {
0822 unsigned char tpg_chap_id;
0823
0824 enum tpg_state_table tpg_state;
0825
0826 u16 tpgt;
0827
0828 u16 ntsih;
0829
0830 u32 nsessions;
0831
0832 u32 num_tpg_nps;
0833
0834 u32 sid;
0835
0836 spinlock_t tpg_np_lock;
0837 spinlock_t tpg_state_lock;
0838 struct se_portal_group tpg_se_tpg;
0839 struct mutex tpg_access_lock;
0840 struct semaphore np_login_sem;
0841 struct iscsi_tpg_attrib tpg_attrib;
0842 struct iscsi_node_auth tpg_demo_auth;
0843
0844 struct iscsi_param_list *param_list;
0845 struct iscsi_tiqn *tpg_tiqn;
0846 struct list_head tpg_gnp_list;
0847 struct list_head tpg_list;
0848 } ____cacheline_aligned;
0849
0850 static inline struct iscsi_portal_group *
0851 to_iscsi_tpg(struct se_portal_group *se_tpg)
0852 {
0853 return container_of(se_tpg, struct iscsi_portal_group, tpg_se_tpg);
0854 }
0855
0856 struct iscsi_wwn_stat_grps {
0857 struct config_group iscsi_stat_group;
0858 struct config_group iscsi_instance_group;
0859 struct config_group iscsi_sess_err_group;
0860 struct config_group iscsi_tgt_attr_group;
0861 struct config_group iscsi_login_stats_group;
0862 struct config_group iscsi_logout_stats_group;
0863 };
0864
0865 struct iscsi_tiqn {
0866 unsigned char tiqn[ISCSI_IQN_LEN];
0867 enum tiqn_state_table tiqn_state;
0868 int tiqn_access_count;
0869 u32 tiqn_active_tpgs;
0870 u32 tiqn_ntpgs;
0871 u32 tiqn_num_tpg_nps;
0872 u32 tiqn_nsessions;
0873 struct list_head tiqn_list;
0874 struct list_head tiqn_tpg_list;
0875 spinlock_t tiqn_state_lock;
0876 spinlock_t tiqn_tpg_lock;
0877 struct se_wwn tiqn_wwn;
0878 struct iscsi_wwn_stat_grps tiqn_stat_grps;
0879 int tiqn_index;
0880 struct iscsi_sess_err_stats sess_err_stats;
0881 struct iscsi_login_stats login_stats;
0882 struct iscsi_logout_stats logout_stats;
0883 } ____cacheline_aligned;
0884
0885 struct iscsit_global {
0886
0887 u32 in_shutdown;
0888 u32 active_ts;
0889
0890 u32 auth_id;
0891 u32 inactive_ts;
0892 #define ISCSIT_BITMAP_BITS 262144
0893
0894 unsigned long *ts_bitmap;
0895 spinlock_t ts_bitmap_lock;
0896 cpumask_var_t allowed_cpumask;
0897
0898 struct iscsi_node_acl discovery_acl;
0899 struct iscsi_portal_group *discovery_tpg;
0900 };
0901
0902 static inline u32 session_get_next_ttt(struct iscsit_session *session)
0903 {
0904 u32 ttt;
0905
0906 spin_lock_bh(&session->ttt_lock);
0907 ttt = session->targ_xfer_tag++;
0908 if (ttt == 0xFFFFFFFF)
0909 ttt = session->targ_xfer_tag++;
0910 spin_unlock_bh(&session->ttt_lock);
0911
0912 return ttt;
0913 }
0914
0915 extern struct iscsit_cmd *iscsit_find_cmd_from_itt(struct iscsit_conn *, itt_t);
0916
0917 extern void iscsit_thread_check_cpumask(struct iscsit_conn *conn,
0918 struct task_struct *p,
0919 int mode);
0920
0921 #endif