#include <linux/ctype.h>
#include <linux/kthread.h>
#include <linux/slab.h>
#include <linux/sched/signal.h>
#include <net/sock.h>
#include <trace/events/sock.h>
#include <scsi/iscsi_proto.h>
#include <target/target_core_base.h>
#include <target/target_core_fabric.h>
#include <target/iscsi/iscsi_transport.h>
#include <target/iscsi/iscsi_target_core.h>
#include "iscsi_target_parameters.h"
#include "iscsi_target_login.h"
#include "iscsi_target_nego.h"
#include "iscsi_target_tpg.h"
#include "iscsi_target_util.h"
#include "iscsi_target.h"
#include "iscsi_target_auth.h"
#define MAX_LOGIN_PDUS …
void convert_null_to_semi(char *buf, int len)
{ … }
static int strlen_semi(char *buf)
{ … }
int extract_param(
const char *in_buf,
const char *pattern,
unsigned int max_length,
char *out_buf,
unsigned char *type)
{ … }
static struct iscsi_node_auth *iscsi_get_node_auth(struct iscsit_conn *conn)
{ … }
static u32 iscsi_handle_authentication(
struct iscsit_conn *conn,
char *in_buf,
char *out_buf,
int in_length,
int *out_length,
unsigned char *authtype)
{ … }
static void iscsi_remove_failed_auth_entry(struct iscsit_conn *conn)
{ … }
int iscsi_target_check_login_request(
struct iscsit_conn *conn,
struct iscsi_login *login)
{ … }
EXPORT_SYMBOL(…);
static int iscsi_target_check_first_request(
struct iscsit_conn *conn,
struct iscsi_login *login)
{ … }
static int iscsi_target_do_tx_login_io(struct iscsit_conn *conn, struct iscsi_login *login)
{ … }
static void iscsi_target_sk_data_ready(struct sock *sk)
{ … }
static void iscsi_target_sk_state_change(struct sock *);
static void iscsi_target_set_sock_callbacks(struct iscsit_conn *conn)
{ … }
static void iscsi_target_restore_sock_callbacks(struct iscsit_conn *conn)
{ … }
static int iscsi_target_do_login(struct iscsit_conn *, struct iscsi_login *);
static bool __iscsi_target_sk_check_close(struct sock *sk)
{ … }
static bool iscsi_target_sk_check_close(struct iscsit_conn *conn)
{ … }
static bool iscsi_target_sk_check_flag(struct iscsit_conn *conn, unsigned int flag)
{ … }
static bool iscsi_target_sk_check_and_clear(struct iscsit_conn *conn, unsigned int flag)
{ … }
static void iscsi_target_login_drop(struct iscsit_conn *conn, struct iscsi_login *login)
{ … }
static void iscsi_target_do_login_rx(struct work_struct *work)
{ … }
static void iscsi_target_sk_state_change(struct sock *sk)
{ … }
static int iscsi_target_check_for_existing_instances(
struct iscsit_conn *conn,
struct iscsi_login *login)
{ … }
static int iscsi_target_do_authentication(
struct iscsit_conn *conn,
struct iscsi_login *login)
{ … }
bool iscsi_conn_auth_required(struct iscsit_conn *conn)
{ … }
static int iscsi_target_handle_csg_zero(
struct iscsit_conn *conn,
struct iscsi_login *login)
{ … }
static bool iscsi_conn_authenticated(struct iscsit_conn *conn,
struct iscsi_login *login)
{ … }
static int iscsi_target_handle_csg_one(struct iscsit_conn *conn, struct iscsi_login *login)
{ … }
static int iscsi_target_do_login(struct iscsit_conn *conn, struct iscsi_login *login)
{ … }
static void iscsi_initiatorname_tolower(
char *param_buf)
{ … }
int iscsi_target_locate_portal(
struct iscsi_np *np,
struct iscsit_conn *conn,
struct iscsi_login *login)
{ … }
int iscsi_target_start_negotiation(
struct iscsi_login *login,
struct iscsit_conn *conn)
{ … }
void iscsi_target_nego_release(struct iscsit_conn *conn)
{ … }