⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conn.c

📁 iscsi企业级target.很好用
💻 C
字号:
/* * Copyright (C) 2002-2003 Ardis Technolgies <roman@ardistech.com> * * Released under the terms of the GNU GPL v2.0. */#include <ctype.h>#include <dirent.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <sys/stat.h>#include "iscsid.h"#define ISCSI_CONN_NEW		1#define ISCSI_CONN_EXIT		5struct connection *conn_alloc(void){	struct connection *conn;	if (!(conn = malloc(sizeof(*conn))))		return NULL;	memset(conn, 0, sizeof(*conn));	conn->state = STATE_FREE;	param_set_defaults(conn->session_param, session_keys);	return conn;}void conn_free(struct connection *conn){	free(conn->initiator);	free(conn);}int conn_test(struct connection *conn){	FILE *f;	char buf[8192], *p;	u32 tid, t_tid, cid, t_cid;	u64 sid, t_sid;	int err = -ENOENT, find = 0;	t_tid = conn->tid;	t_sid = conn->session->sid.id64;	t_cid = conn->cid;	if ((f = fopen(PROC_SESSION, "r")) == NULL) {		fprintf(stderr, "Can't open %s\n", PROC_SESSION);		return -errno;	}	while (fgets(buf, sizeof(buf), f)) {		p = buf;		while (isspace((int) *p))			p++;		if (!strncmp(p, "tid:", 4)) {			if (sscanf(p, "tid:%u", &tid) != 1) {				err = -EIO;				goto out;			}			if (tid == t_tid)				find = 1;			else				find = 0;		} else if (!strncmp(p, "sid:", 4)) {			if (!find)				continue;			if (sscanf(p, "sid:%" SCNu64, &sid) != 1) {				err = -EIO;				goto out;			}			if (sid == t_sid)				find = 1;			else				find = 0;		} else if (!strncmp(p, "cid:", 4)) {			if (!find)				continue;			if (sscanf(p, "cid:%u", &cid) != 1) {				err = -EIO;				goto out;			}			if (cid == t_cid) {				err = 0;				goto out;			}		}	}out:	fclose(f);	return err;}void conn_take_fd(struct connection *conn, int fd){	int err;	log_debug(1, "conn_take_fd: %d %u %u %u %" PRIx64,		  fd, conn->cid, conn->stat_sn, conn->exp_stat_sn, conn->sid.id64);	conn->session->conn_cnt++;	err = ki->conn_create(conn->tid, conn->session->sid.id64, conn->cid,			      conn->stat_sn, conn->exp_stat_sn, fd,			      conn->session_param[key_header_digest].val,			      conn->session_param[key_data_digest].val);	return;}void conn_read_pdu(struct connection *conn){	conn->iostate = IOSTATE_READ_BHS;	conn->buffer = (void *)&conn->req.bhs;	conn->rwsize = BHS_SIZE;}void conn_write_pdu(struct connection *conn){	conn->iostate = IOSTATE_WRITE_BHS;	memset(&conn->rsp, 0, sizeof(conn->rsp));	conn->buffer = (void *)&conn->rsp.bhs;	conn->rwsize = BHS_SIZE;}void conn_free_pdu(struct connection *conn){	conn->iostate = IOSTATE_FREE;	if (conn->req.ahs) {		free(conn->req.ahs);		conn->req.ahs = NULL;	}	if (conn->rsp.ahs) {		free(conn->rsp.ahs);		conn->rsp.ahs = NULL;	}	if (conn->rsp.data) {		free(conn->rsp.data);		conn->rsp.data = NULL;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -