亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iscsi-linux.c

?? iSCSI協議在LINUX下的源碼.源代碼是IBM公布的.主要是結合其OSD設備用的.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * iSCSI driver for Linux * Copyright (C) 2002 Cisco Systems, Inc. * maintained by linux-iscsi-devel@lists.sourceforge.net * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * See the file COPYING included with this distribution for more details. * * $Id: iscsi-linux.c,v 1.19 2005/01/11 03:47:09 mikenc Exp $ * */#include <stdarg.h>#include <fcntl.h>#include <errno.h>#include <signal.h>#include <unistd.h>#include <netinet/in.h>#include <sys/stat.h>#include <sys/time.h>#include <sys/ioctl.h>#include <sys/utsname.h>#include "iscsi-sfnet.h"#include "iscsi-ioctl.h"#include "iscsi-version.h"#include "iscsi-hooks.h"#include "iscsi-login.h"const char *progname = "iscsid";/* set by signal handlers */static int stop_requested = 0;static int reload_config = 0;#define ISCSI_DEVICE "/dev/iscsictl"static int control_fd = -1;voidsigusr1_handler(int unused){	daemon_config.debug_level++;	debugmsg(1, "received sigusr1, debug level now %d",		 daemon_config.debug_level);}voidsigusr2_handler(int unused){	if (daemon_config.debug_level > 0)		daemon_config.debug_level--;	debugmsg(1, "received sigusr2, debug level now %d",		 daemon_config.debug_level);}voidsigterm_handler(int unused){	debugmsg(1, "received sigterm", getpid());	stop_requested = 1;}voidsighup_handler(int unused){	debugmsg(1, "received sighup", getpid());	reload_config = 1;}/* Note: test and clear semantics */intiscsi_should_reload_config(void){	int ret = reload_config;	reload_config = 0;#ifdef RESET_LUN_PROBING	/* see if it works better to have the kernel module automatically reset	 * whenever the queue empties, and have it ensure the same session is	 * never queued more than once. It's easier to track this in the kernel,	 * and we avoid hanging the daemon if a kernel module bug prevents this	 * reset from ever succeeding.	 */	if (ret) {		/* reset LUN probing now, so that the re-probes we do after		 * reloading the config occur in a reasonable order.		 */		while (ioctl(control_fd, ISCSI_RESET_PROBING, NULL) <= 0) {			if (stop_requested)				exit(0);			usleep(10 * 1000);		}		debugmsg(1, "reset LUN probing before reloading config");	}#endif	return ret;}intiscsi_process_should_exit(void){	return stop_requested;}intopen_control_device(void){	int ctlfd;	ctlfd = open(ISCSI_DEVICE, O_RDWR);	if (ctlfd < 0) {		errormsg("cannot open %s", ISCSI_DEVICE);		return -1;	}	return ctlfd;}/* initialize the daemon_config to it's default state, * process the command line, and do any other initialization needed * for the main daemon process. */voidiscsi_daemon_starting(int argc, char **argv){	int c;	struct sigaction action;	struct utsname host_info;	int retry_count;	/* signal handling */	memset(&action, 0x0, sizeof (action));	action.sa_sigaction = NULL;	action.sa_flags = 0;	action.sa_handler = sigusr1_handler;	sigaction(SIGUSR1, &action, 0);	action.sa_handler = sigusr2_handler;	sigaction(SIGUSR2, &action, 0);	action.sa_handler = sighup_handler;	sigaction(SIGHUP, &action, 0);	action.sa_handler = sigterm_handler;	sigaction(SIGTERM, &action, 0);	sigaction(SIGINT, &action, 0);	openlog(progname, LOG_PID, LOG_DAEMON);	/* configure default files */	daemon_config.pid_file = "/var/run/iscsid.pid";	daemon_config.config_file = "/etc/iscsi.conf";	daemon_config.initiator_name_file = "/etc/initiatorname.iscsi";	/* dup it so that the memory is writable */	/* determine InitiatorName or exit */	daemon_config.initiator_name =	    get_iscsi_initiatorname(daemon_config.initiator_name_file);	if (daemon_config.initiator_name == NULL) {		logmsg(AS_NOTICE, "daemon exiting due to configuration error");		exit(1);	}	/* optional InitiatorAlias */	memset(&host_info, 0, sizeof (host_info));	if (uname(&host_info) >= 0) {		daemon_config.initiator_alias = strdup(host_info.nodename);	}	daemon_config.debug_level = 0;	/* process any command line arguments */	while ((c = getopt(argc, argv, "d:nvf:s:")) >= 0) {		switch (c) {		case 'd':			if (optarg) {				daemon_config.debug_level = atoi(optarg);			} else				daemon_config.debug_level++;			debugmsg(1, "iSCSI debug level %d",				 daemon_config.debug_level);			break;		case 'f':			if (optarg) {				daemon_config.config_file = strdup(optarg);				debugmsg(1, "using configuration file %s",					 daemon_config.config_file);			}			break;		case 'n':			daemon_config.foreground = 1;			debugmsg(1, "daemon will stay in foreground");			break;		case 'v':			printf("iscsid version %s (%s)\n",			       ISCSI_DRIVER_VERSION, ISCSI_DATE);			exit(0);		default:			logmsg(LOG_ERR,			       "iscsid - unexpected option %d, '%c', exiting",			       c, c);			exit(1);		}	}	debugmsg(1, "InitiatorName=%s", daemon_config.initiator_name);	debugmsg(1, "InitiatorAlias=%s", daemon_config.initiator_alias);	/* log the version, so that we can tell if the daemon and kernel module 	 * match based on what shows up in the syslog.  Tarballs releases 	 * always install both, but Linux distributors may put the kernel module	 * in a different RPM from the daemon and utils, and users may try to 	 * mix and match in ways that don't work.	 */	logmsg(LOG_NOTICE, "version %s variant (%s)",	       ISCSI_DRIVER_VERSION, ISCSI_DATE);	/* ensure the control device exists, and open it for all of the 	 * child processes to use 	 */	retry_count=0;	for (;;) {		control_fd = open_control_device();		if (control_fd >= 0)			break;		logmsg(AS_ERROR,		       "could not open control device %s.  "		       "Make sure iscsi is loaded",		       ISCSI_DEVICE);		if (stop_requested)			exit(0);		sleep(10);		retry_count++;		if (retry_count > 2) { /* 20 seconds max */			exit(0);		}	}	retry_count=0;#ifdef RESET_LUN_PROBING	/* reset the LUN probing, to handle cases where the daemon restarts 	 * without reloading the kernel module 	 */	retry_count=0;	while (ioctl(control_fd, ISCSI_RESET_PROBING, NULL) <= 0) {		debugmsg(1,			 "failed to reset LUN probing while daemon starting\n");		if (stop_requested)			exit(0);		usleep(10 * 1000);		retry_count++;		if (retry_count > 50) { /* 500ms max */			exit(0);		}	}	debugmsg(1, "reset LUN probing while daemon starting");#endif}voidiscsi_daemon_stopping(void){	close(control_fd);	/* nothing to do at the moment */}voidiscsi_init_config_defaults(struct iscsi_config_defaults *defaults){	/* enabled/disabled */	defaults->enabled = 1;	/* discovery defaults */	defaults->continuous_sendtargets = 1;	/* auto detect */	defaults->send_async_text = 1;#ifdef SLP_ENABLE	defaults->slp_multicast = 1;#else	defaults->slp_multicast = 0;#endif	defaults->slp_scopes = NULL;	defaults->slp_poll_interval = 5 * 60;	/* 5 minutes */	/* auth options */	defaults->auth_options.authmethod = CHAP_AUTHENTICATION;	defaults->auth_options.password_length = 0;	defaults->auth_options.password_length_in = 0;	/* connection timeouts */	defaults->connection_timeout_options.login_timeout = 15;	defaults->connection_timeout_options.auth_timeout = 45;	defaults->connection_timeout_options.active_timeout = 5;	defaults->connection_timeout_options.idle_timeout = 60;	defaults->connection_timeout_options.ping_timeout = 5;	/* error timeouts */	defaults->error_timeout_options.abort_timeout = 10;	defaults->error_timeout_options.reset_timeout = 30;	/* session timeouts */	defaults->session_timeout_options.replacement_timeout = 0;		/* tcp options */	defaults->tcp_options.window_size = 256 * 1024;	/* iSCSI operational parameters */	defaults->iscsi_options.InitialR2T = 0;	defaults->iscsi_options.ImmediateData = 1;	defaults->iscsi_options.MaxRecvDataSegmentLength = 128 * 1024;	defaults->iscsi_options.FirstBurstLength = 256 * 1024;	defaults->iscsi_options.MaxBurstLength = (16 * 1024 * 1024) - 1024;	defaults->iscsi_options.DefaultTime2Wait = 0;					/* we only use session reinstatement (ERL 0) */	defaults->iscsi_options.DefaultTime2Retain = 0;					/* we only use session reinstatement (ERL 0) */	defaults->iscsi_options.HeaderDigest = CONFIG_DIGEST_PREFER_OFF;	defaults->iscsi_options.DataDigest = CONFIG_DIGEST_PREFER_OFF;}static intioctl_establish_session(struct iscsi_session_config *config, int probe_luns,			int config_number, int update){	int rc, ret = 0;	struct iscsi_portal_config *portal = config->portal;	struct iscsi_session_ioctl *ioctld = NULL;	struct sockaddr_in *addr;	/* allocate an ioctl structure with enough space for 	 * all of the portal info 	 */	ioctld = calloc(1, sizeof (*ioctld));	if (ioctld == NULL) {		logmsg(AS_ERROR, "failed to allocate %d bytes for ioctl data"				 " structure", sizeof (*ioctld));		return 1;	}	ioctld->ioctl_version = ISCSI_SESSION_IOCTL_VERSION;	ioctld->config_number = config_number;	ioctld->update = update;	ioctld->portal.login_timeout =	    portal->connection_timeout_options.login_timeout;	ioctld->portal.auth_timeout =	    portal->connection_timeout_options.auth_timeout;	ioctld->portal.active_timeout =	    portal->connection_timeout_options.active_timeout;	ioctld->portal.idle_timeout =	    portal->connection_timeout_options.idle_timeout;	ioctld->portal.ping_timeout =	    portal->connection_timeout_options.ping_timeout;	ioctld->portal.replacement_timeout =	    portal->session_timeout_options.replacement_timeout;	ioctld->portal.abort_timeout =	    portal->error_timeout_options.abort_timeout;	ioctld->portal.reset_timeout =	    portal->error_timeout_options.reset_timeout;	ioctld->portal.initial_r2t =	    portal->iscsi_options.InitialR2T;	ioctld->portal.immediate_data =	    portal->iscsi_options.ImmediateData;	ioctld->portal.max_recv_data_segment_len =	    portal->iscsi_options.MaxRecvDataSegmentLength;	ioctld->portal.first_burst_len =	    portal->iscsi_options.FirstBurstLength;	ioctld->portal.max_burst_len =	    portal->iscsi_options.MaxBurstLength;	ioctld->portal.def_time2wait =	    portal->iscsi_options.DefaultTime2Wait;	ioctld->portal.def_time2retain =	    portal->iscsi_options.DefaultTime2Retain;	switch (portal->iscsi_options.HeaderDigest) {	case CONFIG_DIGEST_NEVER:		ioctld->portal.header_digest = ISCSI_DIGEST_NONE;		break;	case CONFIG_DIGEST_ALWAYS:		ioctld->portal.header_digest = ISCSI_DIGEST_CRC32C;		break;	case CONFIG_DIGEST_PREFER_ON:		ioctld->portal.header_digest =		    ISCSI_DIGEST_CRC32C_NONE;		break;	case CONFIG_DIGEST_PREFER_OFF:		ioctld->portal.header_digest =		    ISCSI_DIGEST_NONE_CRC32C;		break;	}	switch (portal->iscsi_options.DataDigest) {	case CONFIG_DIGEST_NEVER:		ioctld->portal.data_digest = ISCSI_DIGEST_NONE;		break;	case CONFIG_DIGEST_ALWAYS:		ioctld->portal.data_digest = ISCSI_DIGEST_CRC32C;		break;	case CONFIG_DIGEST_PREFER_ON:		ioctld->portal.data_digest = ISCSI_DIGEST_CRC32C_NONE;		break;	case CONFIG_DIGEST_PREFER_OFF:		ioctld->portal.data_digest = ISCSI_DIGEST_NONE_CRC32C;		break;	}	ioctld->portal.tcp_window_size = portal->tcp_options.window_size;	/*	 * tmp hack - rest of daemon needs to be fixed for	 * endien and ipv6 junk	 */	addr = (struct sockaddr_in *)&ioctld->portal.addr;	addr->sin_family = AF_INET;	memcpy(&addr->sin_addr.s_addr, portal->descriptor->ip,	       portal->descriptor->ip_length);	addr->sin_port = htons(portal->descriptor->port);	ioctld->portal.tag = portal->descriptor->tag;	if (config->target->auth_options.username[0]	    && config->target->auth_options.password_length) {		ioctld->password_length =		    config->target->auth_options.password_length;		strncpy(ioctld->username, config->target->auth_options.username,			sizeof (ioctld->username));		ioctld->username[sizeof (ioctld->username) - 1] = '\0';		memcpy(ioctld->password, config->target->auth_options.password,		       MIN(config->target->auth_options.password_length,			   sizeof (ioctld->password)));		ioctld->password[sizeof (ioctld->password) - 1] = '\0';

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久一本精品| 午夜亚洲福利老司机| 亚洲精品久久久久久国产精华液| 亚洲一二三区在线观看| 国产精品一区免费视频| 91久久奴性调教| 国产亚洲人成网站| 午夜久久电影网| 97精品久久久午夜一区二区三区 | 7777精品伊人久久久大香线蕉最新版| 欧美一区二区三区小说| 亚洲免费观看高清完整版在线观看 | 日韩精品一区二区三区视频| 综合久久给合久久狠狠狠97色| 蜜臀av一区二区在线观看| 色综合天天综合狠狠| 日本一区二区三区视频视频| 午夜久久久久久久久久一区二区| av一区二区三区| 久久亚洲影视婷婷| 日韩在线播放一区二区| 在线精品视频小说1| 国产精品美女久久久久久2018| 免费成人美女在线观看| 欧美视频在线一区| 一区二区三区精品| av一区二区不卡| 国产精品婷婷午夜在线观看| 国产一区视频在线看| 日韩久久精品一区| 日韩极品在线观看| 欧美三级电影一区| 亚洲宅男天堂在线观看无病毒| av中文字幕不卡| 国产精品久久久久一区二区三区共| 黄色日韩网站视频| 欧美成va人片在线观看| 久久精品99国产精品| 91精品国产高清一区二区三区 | 亚洲国产日韩在线一区模特| 91原创在线视频| 国产精品美女久久久久久久久久久 | 极品少妇xxxx精品少妇| 精品国产91洋老外米糕| 久久综合综合久久综合| 精品毛片乱码1区2区3区| 久久91精品久久久久久秒播| 精品粉嫩超白一线天av| 国产精品自产自拍| 国产精品国产三级国产普通话三级| 国产91丝袜在线播放| 国产精品久久福利| 在线免费观看视频一区| 日韩高清不卡在线| 精品国产凹凸成av人导航| 国产69精品久久777的优势| 国产精品成人免费| 欧美日韩在线免费视频| 日韩高清在线一区| 国产午夜亚洲精品午夜鲁丝片| 成人av在线看| 亚洲图片欧美视频| 日韩视频一区二区在线观看| 成人综合激情网| 亚洲综合网站在线观看| 日韩一级片网站| aaa欧美色吧激情视频| 午夜久久久久久久久久一区二区| 日韩久久久精品| 99视频有精品| 日本不卡一区二区三区| 久久精品欧美一区二区三区麻豆| 99九九99九九九视频精品| 亚洲国产日韩a在线播放| 久久蜜臀精品av| 欧美亚洲国产一区二区三区va| 免费在线成人网| 国产精品盗摄一区二区三区| 宅男噜噜噜66一区二区66| 国产成人在线视频播放| 亚洲国产日产av| 国产精品无人区| 91精品国产91久久综合桃花| 成人av影视在线观看| 日韩电影免费在线看| 1024精品合集| 精品国产一区久久| 色国产精品一区在线观看| 精品一区二区三区视频在线观看| 亚洲男人的天堂在线观看| 日韩美一区二区三区| 欧洲精品中文字幕| 成人看片黄a免费看在线| 日韩激情在线观看| 亚洲自拍偷拍麻豆| 国产精品家庭影院| 日韩精品一区二区在线观看| 欧美日韩中文字幕一区二区| 不卡电影一区二区三区| 成人做爰69片免费看网站| 亚洲国产精品黑人久久久| 欧美日韩中文字幕一区二区| 福利电影一区二区三区| 秋霞成人午夜伦在线观看| 一区二区三区四区激情 | 91麻豆国产自产在线观看| 国产一区二区免费看| 日日夜夜免费精品| 亚洲国产一区在线观看| 中文字幕日韩一区二区| 中文字幕+乱码+中文字幕一区| 精品88久久久久88久久久| 3d动漫精品啪啪一区二区竹菊| 欧美性大战xxxxx久久久| 一本久久精品一区二区| 色综合色综合色综合色综合色综合| 国产福利一区二区三区在线视频| 国产主播一区二区三区| 麻豆精品国产91久久久久久| 日本成人在线网站| 日韩高清在线不卡| 亚洲国产美女搞黄色| 国产精品麻豆久久久| 久久久午夜电影| 久久久综合九色合综国产精品| 日韩欧美不卡一区| 精品少妇一区二区三区| 精品国产一区二区精华| 精品精品国产高清a毛片牛牛 | 亚洲国产三级在线| 亚洲国产精品尤物yw在线观看| 亚洲黄色av一区| 偷拍日韩校园综合在线| 奇米777欧美一区二区| 男男视频亚洲欧美| 国产精一区二区三区| 成人丝袜视频网| 在线观看欧美日本| 91精品国产综合久久精品麻豆 | 成人午夜电影久久影院| 秋霞影院一区二区| 久草热8精品视频在线观看| 经典三级视频一区| 国产99久久久精品| 91成人免费电影| 欧美一级一区二区| 日本一区二区成人| 一区二区三区在线播放| 免费在线看一区| 国产成人精品亚洲777人妖| 一本色道**综合亚洲精品蜜桃冫 | 亚洲成人福利片| 紧缚捆绑精品一区二区| 色呦呦日韩精品| 欧美一区二区网站| 中文字幕欧美区| 日韩—二三区免费观看av| 成人小视频在线| 欧美猛男gaygay网站| 国产日韩三级在线| 久久看人人爽人人| 亚洲女同ⅹxx女同tv| 美美哒免费高清在线观看视频一区二区| 国产乱码精品一区二区三区忘忧草 | 亚洲免费av在线| 狠狠v欧美v日韩v亚洲ⅴ| 91高清视频在线| 久久久久久久国产精品影院| 亚洲最新在线观看| 懂色av一区二区三区免费观看| 欧美男男青年gay1069videost| 国产精品福利一区| 久久66热偷产精品| 欧美剧情片在线观看| 中文字幕一区二区在线观看| 精品在线播放免费| 欧美日韩一级二级三级| 亚洲欧洲日产国码二区| 国内久久婷婷综合| 欧美一区二区视频免费观看| 亚洲精品va在线观看| 播五月开心婷婷综合| 久久免费午夜影院| 捆绑调教美女网站视频一区| 欧美日韩国产系列| 欧美中文字幕一区| 亚洲主播在线播放| 国产98色在线|日韩| 欧美一级淫片007| 午夜欧美2019年伦理| 91猫先生在线| 亚洲欧美欧美一区二区三区| 国产成a人亚洲精| 国产视频一区二区在线| 九九在线精品视频| 91精品国产色综合久久| 三级一区在线视频先锋| 欧美视频在线一区| 亚洲国产一二三| 欧美色窝79yyyycom|