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

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

?? iscsi-slp-discovery.c

?? ISCSI user client software.Client would be used to access the IPSAN server.
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <unistd.h>#include <slp.h>#include "iscsi-sfnet.h"#include "iscsi-slp-discovery.h"#define ISCSI_SERVICE "service:iscsi:target"#define MAX_IFACES 10#define IP_ADDR_LEN 16#define RECORD_LEN 2048#define PREDICATE_LEN 2048#define CRED_PREDICATE_LEN 512#define NAME_PREDICATE_LEN 512#define INITIATOR_NAME "/etc/initiatorname.iscsi"static int record_begin;struct InterfaceInfo {	int iface_count;	struct sockaddr_in iface_addr[MAX_IFACES];};struct slp_portal {	struct slp_portal *next;	char *ip;	char *port;	char *tag;};struct slp_target {	struct slp_target *next;	char *target_name;	struct slp_portal *portals;	struct slp_portal *tail;};struct slp_discovery_process {	struct slp_discovery_process *next;	struct slp_target *targets;	struct slp_target *tail;	struct iscsi_discovery_process *discovery;};struct slp_discovery_process_list {	struct slp_discovery_process *head;	struct slp_discovery_process *tail;};struct slp_discovery_pg_cookie {	struct iscsi_discovery_process *discovery;	char *target_name;	char *ip;	char *port;};struct slp_discovery_process_list *list = NULL;voidadd_slp_portal(struct slp_target *target, char *ip, char *port, char *tag){	struct slp_portal *portal =	    (struct slp_portal *) malloc(sizeof (struct slp_portal));	portal->ip = ip;	portal->port = port;	portal->tag = tag;	portal->next = NULL;	target->tail->next = portal;	target->tail = portal;	debugmsg(7, "slp portal %p added\n", portal);}voidadd_slp_target(struct slp_discovery_process *process,	       char *name, char *ip, char *port, char *tag){	struct slp_target *target = NULL;	struct slp_portal *portal = NULL;	target = (struct slp_target *) malloc(sizeof (struct slp_target));	portal = (struct slp_portal *) malloc(sizeof (struct slp_portal));	target->target_name = name;	target->portals = target->tail = portal;	target->next = NULL;	portal->ip = ip;	portal->port = port;	portal->tag = tag;	portal->next = NULL;	process->tail->next = target;	process->tail = target;	debugmsg(7, "slp target %s added\n", target->target_name);}voidadd_slp_discovery_process(struct iscsi_discovery_process *discovery,			  char *name, char *ip, char *port, char *tag){	struct slp_discovery_process *process;	struct slp_target *target;	struct slp_portal *portal;	process = (struct slp_discovery_process *)	    malloc(sizeof (struct slp_discovery_process));	target = (struct slp_target *) malloc(sizeof (struct slp_target));	portal = (struct slp_portal *) malloc(sizeof (struct slp_portal));	process->discovery = discovery;	process->targets = process->tail = target;	process->next = NULL;	target->target_name = name;	target->portals = target->tail = portal;	target->next = NULL;	portal->ip = ip;	portal->port = port;	portal->tag = tag;	portal->next = NULL;	if (list) {		list->tail->next = process;		list->tail = process;	} else {		list = (struct slp_discovery_process_list *)		    malloc(sizeof (struct slp_discovery_process_list));		list->head = list->tail = process;	}	debugmsg(7, "slp discovery data buffered for discovery process: %d\n",		 discovery->pid);}voidsave_slp_discovery_data(char *name, char *ip,			char *port, char *tag,			struct iscsi_discovery_process *discovery){	struct slp_discovery_process *process; 	struct slp_target *target = NULL;	int slp_discovery_process_exit = 0;	int slp_target_exit = 0;	if (list) {		for (process = list->head; process; process = process->next) {			if (process->discovery == discovery) {				slp_discovery_process_exit = 1;				for (target = process->targets; target;				     target = target->next) {					if (strcmp(target->target_name, 					     name) == 0) {						slp_target_exit = 1;						break;					}				}				break;			}		}		if (slp_discovery_process_exit) {			if (slp_target_exit)				add_slp_portal(target, ip, port, tag);			else				add_slp_target(process, name, ip, port, tag);		} else			add_slp_discovery_process(discovery, name, ip, port,						  tag);	} else		add_slp_discovery_process(discovery, name, ip, port, tag);}voidsend_target_record(struct slp_target *target,		   struct iscsi_discovery_process *discovery){	struct slp_portal *portal;	char record[RECORD_LEN];	char *c = record;	int len = 0;	int result;	memset(record, 0, RECORD_LEN);	if (!record_begin) {		sprintf(c, "DTN=%s\n", target->target_name);		record_begin = 1;	} else {		sprintf(c, "TN=%s\n", target->target_name);	}	len += strlen(c);	c += strlen(c);	for (portal = target->portals; portal; portal = portal->next) {		sprintf(c, "TT=%s\n", portal->tag);		len += strlen(c);		c += strlen(c);		sprintf(c, "TP=%s\n", portal->port);		len += strlen(c);		c += strlen(c);		sprintf(c, "TA=%s\n", portal->ip);		len += strlen(c);		c += strlen(c);	}	sprintf(c, ";\n");	len += strlen(c);	debugmsg(7, "sending target record %s\n", record);	result = write(discovery->pipe_fd, record, len);	if (result < 0)		logmsg(AS_ERROR,		       "Error in sending discovery data for target %s "		       "by discovery process %d\n",		       target->target_name, discovery->pid);}voidfree_slp_portals(struct slp_portal *portals){	struct slp_portal *portal; 	while (portals) {		portal = portals;		if (portal->ip)			free(portal->ip);		if (portal->port)			free(portal->port);		if (portal->tag)			free(portal->tag);		portals = portals->next;		free(portal);	}}voidfree_slp_targets(struct slp_target *targets){	struct slp_target *target;	while (targets) {		target = targets;		if (target->target_name)			free(target->target_name);		if (target->tail)			target->tail = NULL;		if (target->portals)			free_slp_portals(target->portals);		targets = targets->next;		free(target);	}}voidfree_slp_discovery_process(struct slp_discovery_process *process){	struct slp_discovery_process *p;	struct slp_discovery_process *n;	if (process) {		if (process->targets) {			process->tail = NULL;			free_slp_targets(process->targets);		}		for (n = list->head, p = list->head; n; n = n->next) {			if (n == process) {				if (n == p)	/* head */					list->head = process->next;				else					p->next = n->next;				if (n == list->tail) {					if (n == p)	/* this is the only 							 * process in list 							 */						list->tail = list->head;					else						list->tail = p;				}				process->discovery = NULL;				free(process);				break;			}			p = n;		}	}}voidsend_slp_discovery_data(struct iscsi_discovery_process *discovery){	struct slp_discovery_process *process;	struct slp_target *target; 	if (list) {		for (process = list->head; process; process = process->next) {			if (process->discovery == discovery) {				for (target = process->targets; target;				     target = target->next) {					send_target_record(target, discovery);				}				write(discovery->pipe_fd, "!\n",				      sizeof ("!\n") - 1);				record_begin = 0;				break;			}		}	}}voidfree_slp_discovery_data(struct iscsi_discovery_process *discovery){	struct slp_discovery_process *process;	if (list) {		for (process = list->head; process; process = process->next) {			if (process->discovery == discovery) {				free_slp_discovery_process(process);				break;			}		}		if ((list->head == NULL) && (list->tail == NULL)) {			free(list);			list = NULL;		}	}}intIfaceGetInfo(struct InterfaceInfo *ifaceinfo,	     struct iscsi_discovery_process *discovery){	struct sockaddr *sa;	struct sockaddr_in *sin;	struct ifreq ifrlist[MAX_IFACES];	struct ifreq ifrflags;	struct ifconf ifc;	int fd;	int i;	ifc.ifc_len = sizeof (struct ifreq) * MAX_IFACES;	ifc.ifc_req = ifrlist;	fd = socket(AF_INET, SOCK_STREAM, 0);	if (fd == -1) {		logmsg(AS_ERROR,		       "Failed to create socket, for getting all IP interfaces "		       "through discovery process pid = %d\n",		       discovery->pid);		return -1;	}	if (ioctl(fd, SIOCGIFCONF, &ifc) == -1) {		logmsg(AS_ERROR,		       "ioctl failure, in getting all IP interfaces through "		       "discovery process pid = %d\n",		       discovery->pid);		return -1;	}	memset(ifaceinfo, 0, sizeof (struct InterfaceInfo));	for (i = 0; i < ifc.ifc_len / sizeof (struct ifreq); i++) {		sa = (struct sockaddr *) &(ifrlist[i].ifr_addr);		if (sa->sa_family == AF_INET) {			/* Get interface flags */			memcpy(&ifrflags, &(ifrlist[i]), sizeof (struct ifreq));			if (ioctl(fd, SIOCGIFFLAGS, &ifrflags) == 0) {				/* skip the loopback interfaces */				if ((ifrflags.ifr_flags & IFF_LOOPBACK) == 0) {					sin = (struct sockaddr_in *) sa;					memcpy(&					       (ifaceinfo->						iface_addr[ifaceinfo->							   iface_count]), sin,					       sizeof (struct sockaddr_in));					ifaceinfo->iface_count++;				}			}		}	}	return 0;}char *get_all_ip(struct iscsi_discovery_process *discovery){	int i;	struct InterfaceInfo ifaceinfo;	char *addrstr = NULL;	if (IfaceGetInfo(&ifaceinfo, discovery) == 0) {		addrstr = (char *) malloc(ifaceinfo.iface_count * IP_ADDR_LEN);		memset(addrstr, 0, ifaceinfo.iface_count * IP_ADDR_LEN);		for (i = 0; i < ifaceinfo.iface_count; i++) {			strcat(addrstr,			       inet_ntoa(ifaceinfo.iface_addr[i].sin_addr));			if (i + 1 < ifaceinfo.iface_count) {				strcat(addrstr, ",");			}		}	}	return addrstr;}SLPBooleanSrvUrlCallback(SLPHandle hslp,	       const char *srvurl,	       unsigned short lifetime, int errcode, void *cookie){	char *target_name, *targetname;	char *ip;	char *port, *port_id;	char *tmp_url, *start_url= NULL, *attr_url;	struct iscsi_discovery_process *discovery = NULL;	char *addr;	char *tag;	if (errcode == SLP_OK) {		debugmsg(7, "SLP url :%s,%i\n", srvurl, lifetime);	}	if (srvurl)		start_url = strdup(srvurl);	tmp_url = start_url;	if (cookie)		discovery = (struct iscsi_discovery_process *) cookie;	if (tmp_url) {		attr_url = strdup(tmp_url);		if (strncmp(tmp_url, "service:iscsi:target://", 23) == 0) {			tmp_url += 22;			*tmp_url = '\0';			tmp_url++;			ip = tmp_url;			port = strchr(tmp_url, ':');			*port = '\0';			port++;			tmp_url = port;			target_name = strchr(tmp_url, '/');			*target_name = '\0';			target_name++;			tmp_url = target_name;			debugmsg(7,				 "iSCSI Target: ip %s port %s target name %s, "				 "discovered by discovery process %d\n",				 ip, port, target_name, discovery->pid);			/* slp query do not return any information related to			 * target tag. For time being setting it to 1.			 */			addr = (char *) malloc(strlen(ip) + 1);			memset(addr, 0, strlen(ip) + 1);			memcpy(addr, ip, strlen(ip));			port_id = (char *) malloc(strlen(port) + 1);			memset(port_id, 0, strlen(port) + 1);			memcpy(port_id, port, strlen(port));			targetname = (char *) malloc(strlen(target_name) + 1);			memset(targetname, 0, strlen(target_name) + 1);			memcpy(targetname, target_name, strlen(target_name));			tag = (char *) malloc(strlen("0") + 1);			memset(tag, 0, strlen("0") + 1);			strcpy(tag, "1");			save_slp_discovery_data(targetname, addr, port_id, tag,						discovery);			if ( discovery->flag == SLP_UNICAST_ENABLED )				slp_unicast_attr_query(discovery, attr_url, 						       "portal-group", 						       targetname, addr, 						       port_id);			if ( discovery->flag == SLP_MULTICAST_ENABLED )				slp_multicast_attr_query(discovery, attr_url, 						       "portal-group", 						       targetname, addr, 						       port_id);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产导航| 久久精品免费观看| 国产精品久久午夜夜伦鲁鲁| 久久久精品天堂| 自拍偷拍亚洲激情| 奇米精品一区二区三区四区| 一本色道久久综合亚洲aⅴ蜜桃| 在线观看网站黄不卡| 欧美日韩黄色影视| 精品乱人伦小说| 1024成人网色www| 另类小说色综合网站| 92国产精品观看| 日韩欧美三级在线| 中文字幕巨乱亚洲| 亚洲一区二区三区三| 国模套图日韩精品一区二区 | 国精产品一区一区三区mba视频 | 精品日韩一区二区三区| 一区二区三区欧美视频| 美女视频黄 久久| 在线观看免费亚洲| 国产三级欧美三级| 老司机精品视频一区二区三区| 在线欧美日韩精品| 亚洲欧美综合色| www.99精品| 中文字幕五月欧美| k8久久久一区二区三区| 欧美日韩视频不卡| 国产精品久久久久影院色老大| 日本精品裸体写真集在线观看| 成人欧美一区二区三区小说| 成人网男人的天堂| 国产精品私人影院| 成人av资源在线观看| 亚洲欧洲国产日韩| 欧美日韩电影一区| 美女视频网站久久| 久久精品视频一区二区| 丁香激情综合国产| 亚洲免费成人av| 91精品国产综合久久香蕉的特点| 日韩国产欧美视频| 精品久久久久久无| 成人免费视频网站在线观看| **欧美大码日韩| 欧美日韩国产综合草草| 国产一区二区三区在线观看精品| 中文字幕第一区第二区| 欧美三级欧美一级| 国产盗摄女厕一区二区三区 | 国产麻豆成人精品| 中文字幕日韩一区| 欧美一区二区视频在线观看2020| 激情五月婷婷综合网| 亚洲精品国产视频| 久久色在线观看| 欧美精品三级在线观看| 不卡欧美aaaaa| 久久精品99国产精品| 亚洲男同1069视频| 久久精品网站免费观看| 欧美日韩一区二区不卡| av男人天堂一区| 国产乱色国产精品免费视频| 日韩电影免费在线观看网站| 国模一区二区三区白浆| 91精品国产综合久久久久久久久久| 不卡一区中文字幕| 国产麻豆精品在线观看| 精品午夜久久福利影院 | jlzzjlzz国产精品久久| 国产精品一区在线| 精品一区二区三区久久| 麻豆精品一区二区av白丝在线| 亚洲影视在线观看| 亚洲精品成人悠悠色影视| 中文字幕在线一区| 中文字幕一区av| 亚洲激情图片小说视频| 夜夜嗨av一区二区三区四季av| 亚洲欧洲日韩av| 亚洲人午夜精品天堂一二香蕉| 国产精品久久久久婷婷| 亚洲丝袜美腿综合| 亚洲第一在线综合网站| 亚洲电影视频在线| 免费国产亚洲视频| 国内精品伊人久久久久av影院| 久久国产精品免费| 成人国产精品免费网站| 91在线一区二区三区| 欧美日韩二区三区| 精品日韩一区二区三区| 国产精品毛片久久久久久| 亚洲免费观看高清完整版在线观看熊 | 亚洲国产aⅴ天堂久久| 美女网站一区二区| 成人免费福利片| 欧美精品123区| 中文字幕在线一区| 蜜桃免费网站一区二区三区| 不卡电影免费在线播放一区| 欧美日韩一区久久| 国产精品免费看片| 狠狠色丁香久久婷婷综| 一本色道**综合亚洲精品蜜桃冫 | 午夜私人影院久久久久| 国产美女精品在线| 欧美日韩国产精品自在自线| 亚洲国产高清在线| 黄色日韩网站视频| 91麻豆精品91久久久久同性| 一区二区三区精品| av高清久久久| 日本一区二区成人| 国产在线麻豆精品观看| 91精品国产综合久久蜜臀| 亚洲国产另类av| 欧洲av在线精品| 久久国产精品露脸对白| 蜜臀a∨国产成人精品| 亚洲黄色小说网站| 日韩中文字幕不卡| 日本强好片久久久久久aaa| 九九九久久久精品| 麻豆精品视频在线观看| 国产精品99久| 中文字幕精品—区二区四季| 91精品福利视频| 国产精品一区2区| 日韩成人av影视| 成人免费在线播放视频| 精品欧美久久久| 欧美大片日本大片免费观看| 色94色欧美sute亚洲线路一久| 国产乱子伦视频一区二区三区| 偷拍一区二区三区| 亚洲精品成人少妇| 中文字幕五月欧美| 欧美日韩一区二区欧美激情| 三级影片在线观看欧美日韩一区二区| 777a∨成人精品桃花网| 国产成人av电影在线| 一区二区三区美女| 久久久亚洲高清| 3atv在线一区二区三区| 国产福利一区二区三区| 亚洲综合色在线| 国产日韩欧美综合在线| 欧美日韩精品电影| 色综合夜色一区| 国产精品一区二区久久精品爱涩| 亚洲激情校园春色| 国产日产欧美一区二区视频| 91精品免费在线| 欧美在线一二三四区| 成人国产亚洲欧美成人综合网| 国内外成人在线| 另类中文字幕网| 青青青伊人色综合久久| 一区二区三区高清| 亚洲视频免费观看| 国产精品天天看| 国产欧美日韩三级| 91精品国产色综合久久ai换脸 | 国产偷国产偷亚洲高清人白洁| 在线免费观看不卡av| hitomi一区二区三区精品| 国产一区二区三区精品欧美日韩一区二区三区 | 精品乱码亚洲一区二区不卡| 欧美电影免费观看高清完整版在线| 成人国产精品免费网站| 亚洲人成网站在线| 亚洲人成小说网站色在线| 日本在线不卡一区| 国产一区在线看| 91在线观看视频| 日韩精品一区二区三区视频播放| 国产精品久久一卡二卡| 亚洲第一二三四区| www.日韩精品| 久久噜噜亚洲综合| 日韩高清在线观看| 91视频免费看| 国产欧美一区二区精品秋霞影院| 一区二区三区在线不卡| 国产精品一区专区| 欧美丰满一区二区免费视频| 日韩理论片网站| 国产精品资源网| 欧美zozozo| 日本91福利区| 欧美亚洲高清一区二区三区不卡| 国产精品丝袜在线| 韩国一区二区视频| 日韩无一区二区| 免费高清视频精品| 精品乱人伦一区二区三区|