iscsi_transport.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include <linux/module.h>
  2. #include <linux/list.h>
  3. #include "iscsi_target_core.h"
  4. struct iscsit_transport {
  5. #define ISCSIT_TRANSPORT_NAME 16
  6. char name[ISCSIT_TRANSPORT_NAME];
  7. int transport_type;
  8. int priv_size;
  9. struct module *owner;
  10. struct list_head t_node;
  11. int (*iscsit_setup_np)(struct iscsi_np *, struct __kernel_sockaddr_storage *);
  12. int (*iscsit_accept_np)(struct iscsi_np *, struct iscsi_conn *);
  13. void (*iscsit_free_np)(struct iscsi_np *);
  14. void (*iscsit_wait_conn)(struct iscsi_conn *);
  15. void (*iscsit_free_conn)(struct iscsi_conn *);
  16. int (*iscsit_get_login_rx)(struct iscsi_conn *, struct iscsi_login *);
  17. int (*iscsit_put_login_tx)(struct iscsi_conn *, struct iscsi_login *, u32);
  18. int (*iscsit_immediate_queue)(struct iscsi_conn *, struct iscsi_cmd *, int);
  19. int (*iscsit_response_queue)(struct iscsi_conn *, struct iscsi_cmd *, int);
  20. int (*iscsit_get_dataout)(struct iscsi_conn *, struct iscsi_cmd *, bool);
  21. int (*iscsit_queue_data_in)(struct iscsi_conn *, struct iscsi_cmd *);
  22. int (*iscsit_queue_status)(struct iscsi_conn *, struct iscsi_cmd *);
  23. void (*iscsit_aborted_task)(struct iscsi_conn *, struct iscsi_cmd *);
  24. enum target_prot_op (*iscsit_get_sup_prot_ops)(struct iscsi_conn *);
  25. };
  26. static inline void *iscsit_priv_cmd(struct iscsi_cmd *cmd)
  27. {
  28. return (void *)(cmd + 1);
  29. }
  30. /*
  31. * From iscsi_target_transport.c
  32. */
  33. extern int iscsit_register_transport(struct iscsit_transport *);
  34. extern void iscsit_unregister_transport(struct iscsit_transport *);
  35. extern struct iscsit_transport *iscsit_get_transport(int);
  36. extern void iscsit_put_transport(struct iscsit_transport *);
  37. /*
  38. * From iscsi_target.c
  39. */
  40. extern int iscsit_setup_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  41. unsigned char *);
  42. extern void iscsit_set_unsoliticed_dataout(struct iscsi_cmd *);
  43. extern int iscsit_process_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  44. struct iscsi_scsi_req *);
  45. extern int iscsit_check_dataout_hdr(struct iscsi_conn *, unsigned char *,
  46. struct iscsi_cmd **);
  47. extern int iscsit_check_dataout_payload(struct iscsi_cmd *, struct iscsi_data *,
  48. bool);
  49. extern int iscsit_setup_nop_out(struct iscsi_conn *, struct iscsi_cmd *,
  50. struct iscsi_nopout *);
  51. extern int iscsit_process_nop_out(struct iscsi_conn *, struct iscsi_cmd *,
  52. struct iscsi_nopout *);
  53. extern int iscsit_handle_logout_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  54. unsigned char *);
  55. extern int iscsit_handle_task_mgt_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  56. unsigned char *);
  57. extern int iscsit_setup_text_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  58. struct iscsi_text *);
  59. extern int iscsit_process_text_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  60. struct iscsi_text *);
  61. extern void iscsit_build_rsp_pdu(struct iscsi_cmd *, struct iscsi_conn *,
  62. bool, struct iscsi_scsi_rsp *);
  63. extern void iscsit_build_nopin_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  64. struct iscsi_nopin *, bool);
  65. extern void iscsit_build_task_mgt_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  66. struct iscsi_tm_rsp *);
  67. extern int iscsit_build_text_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  68. struct iscsi_text_rsp *,
  69. enum iscsit_transport_type);
  70. extern void iscsit_build_reject(struct iscsi_cmd *, struct iscsi_conn *,
  71. struct iscsi_reject *);
  72. extern int iscsit_build_logout_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  73. struct iscsi_logout_rsp *);
  74. extern int iscsit_logout_post_handler(struct iscsi_cmd *, struct iscsi_conn *);
  75. /*
  76. * From iscsi_target_device.c
  77. */
  78. extern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *);
  79. /*
  80. * From iscsi_target_erl0.c
  81. */
  82. extern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int);
  83. /*
  84. * From iscsi_target_erl1.c
  85. */
  86. extern void iscsit_stop_dataout_timer(struct iscsi_cmd *);
  87. /*
  88. * From iscsi_target_tmr.c
  89. */
  90. extern int iscsit_tmr_post_handler(struct iscsi_cmd *, struct iscsi_conn *);
  91. /*
  92. * From iscsi_target_util.c
  93. */
  94. extern struct iscsi_cmd *iscsit_allocate_cmd(struct iscsi_conn *, int);
  95. extern int iscsit_sequence_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  96. unsigned char *, __be32);
  97. extern void iscsit_release_cmd(struct iscsi_cmd *);