~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/scsi/libiscsi_tcp.h

Version: ~ [ linux-5.9-rc5 ] ~ [ linux-5.8.10 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.66 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.146 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.198 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.236 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.236 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.85 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * iSCSI over TCP/IP Data-Path lib
  3  *
  4  * Copyright (C) 2008 Mike Christie
  5  * Copyright (C) 2008 Red Hat, Inc.  All rights reserved.
  6  * maintained by open-iscsi@googlegroups.com
  7  *
  8  * This program is free software; you can redistribute it and/or modify
  9  * it under the terms of the GNU General Public License as published
 10  * by the Free Software Foundation; either version 2 of the License, or
 11  * (at your option) any later version.
 12  *
 13  * This program is distributed in the hope that it will be useful, but
 14  * WITHOUT ANY WARRANTY; without even the implied warranty of
 15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 16  * General Public License for more details.
 17  *
 18  * See the file COPYING included with this distribution for more details.
 19  */
 20 
 21 #ifndef LIBISCSI_TCP_H
 22 #define LIBISCSI_TCP_H
 23 
 24 #include <scsi/libiscsi.h>
 25 
 26 struct iscsi_tcp_conn;
 27 struct iscsi_segment;
 28 struct sk_buff;
 29 struct hash_desc;
 30 
 31 typedef int iscsi_segment_done_fn_t(struct iscsi_tcp_conn *,
 32                                     struct iscsi_segment *);
 33 
 34 struct iscsi_segment {
 35         unsigned char           *data;
 36         unsigned int            size;
 37         unsigned int            copied;
 38         unsigned int            total_size;
 39         unsigned int            total_copied;
 40 
 41         struct hash_desc        *hash;
 42         unsigned char           padbuf[ISCSI_PAD_LEN];
 43         unsigned char           recv_digest[ISCSI_DIGEST_SIZE];
 44         unsigned char           digest[ISCSI_DIGEST_SIZE];
 45         unsigned int            digest_len;
 46 
 47         struct scatterlist      *sg;
 48         void                    *sg_mapped;
 49         unsigned int            sg_offset;
 50         bool                    atomic_mapped;
 51 
 52         iscsi_segment_done_fn_t *done;
 53 };
 54 
 55 /* Socket connection receive helper */
 56 struct iscsi_tcp_recv {
 57         struct iscsi_hdr        *hdr;
 58         struct iscsi_segment    segment;
 59 
 60         /* Allocate buffer for BHS + AHS */
 61         uint32_t                hdr_buf[64];
 62 
 63         /* copied and flipped values */
 64         int                     datalen;
 65 };
 66 
 67 struct iscsi_tcp_conn {
 68         struct iscsi_conn       *iscsi_conn;
 69         void                    *dd_data;
 70         int                     stop_stage;     /* conn_stop() flag: *
 71                                                  * stop to recover,  *
 72                                                  * stop to terminate */
 73         /* control data */
 74         struct iscsi_tcp_recv   in;             /* TCP receive context */
 75         /* CRC32C (Rx) LLD should set this is they do not offload */
 76         struct hash_desc        *rx_hash;
 77 };
 78 
 79 struct iscsi_tcp_task {
 80         uint32_t                exp_datasn;     /* expected target's R2TSN/DataSN */
 81         int                     data_offset;
 82         struct iscsi_r2t_info   *r2t;           /* in progress solict R2T */
 83         struct iscsi_pool       r2tpool;
 84         struct kfifo            r2tqueue;
 85         void                    *dd_data;
 86         spinlock_t              pool2queue;
 87         spinlock_t              queue2pool;
 88 };
 89 
 90 enum {
 91         ISCSI_TCP_SEGMENT_DONE,         /* curr seg has been processed */
 92         ISCSI_TCP_SKB_DONE,             /* skb is out of data */
 93         ISCSI_TCP_CONN_ERR,             /* iscsi layer has fired a conn err */
 94         ISCSI_TCP_SUSPENDED,            /* conn is suspended */
 95 };
 96 
 97 extern void iscsi_tcp_hdr_recv_prep(struct iscsi_tcp_conn *tcp_conn);
 98 extern int iscsi_tcp_recv_skb(struct iscsi_conn *conn, struct sk_buff *skb,
 99                               unsigned int offset, bool offloaded, int *status);
100 extern void iscsi_tcp_cleanup_task(struct iscsi_task *task);
101 extern int iscsi_tcp_task_init(struct iscsi_task *task);
102 extern int iscsi_tcp_task_xmit(struct iscsi_task *task);
103 
104 /* segment helpers */
105 extern int iscsi_tcp_recv_segment_is_hdr(struct iscsi_tcp_conn *tcp_conn);
106 extern int iscsi_tcp_segment_done(struct iscsi_tcp_conn *tcp_conn,
107                                   struct iscsi_segment *segment, int recv,
108                                   unsigned copied);
109 extern void iscsi_tcp_segment_unmap(struct iscsi_segment *segment);
110 
111 extern void iscsi_segment_init_linear(struct iscsi_segment *segment,
112                                       void *data, size_t size,
113                                       iscsi_segment_done_fn_t *done,
114                                       struct hash_desc *hash);
115 extern int
116 iscsi_segment_seek_sg(struct iscsi_segment *segment,
117                       struct scatterlist *sg_list, unsigned int sg_count,
118                       unsigned int offset, size_t size,
119                       iscsi_segment_done_fn_t *done, struct hash_desc *hash);
120 
121 /* digest helpers */
122 extern void iscsi_tcp_dgst_header(struct hash_desc *hash, const void *hdr,
123                                   size_t hdrlen,
124                                   unsigned char digest[ISCSI_DIGEST_SIZE]);
125 extern struct iscsi_cls_conn *
126 iscsi_tcp_conn_setup(struct iscsi_cls_session *cls_session, int dd_data_size,
127                      uint32_t conn_idx);
128 extern void iscsi_tcp_conn_teardown(struct iscsi_cls_conn *cls_conn);
129 
130 /* misc helpers */
131 extern int iscsi_tcp_r2tpool_alloc(struct iscsi_session *session);
132 extern void iscsi_tcp_r2tpool_free(struct iscsi_session *session);
133 extern int iscsi_tcp_set_max_r2t(struct iscsi_conn *conn, char *buf);
134 extern void iscsi_tcp_conn_get_stats(struct iscsi_cls_conn *cls_conn,
135                                      struct iscsi_stats *stats);
136 #endif /* LIBISCSI_TCP_H */
137 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp