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

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

?? apcsmart.c

?? linux集群服務器軟件代碼包
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* $Id: apcsmart.c,v 1.23 2005/01/08 06:01:17 alan Exp $ *//* * Stonith module for APCSmart Stonith device * Copyright (c) 2000 Andreas Piesk <a.piesk@gmx.net> * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version.* * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * * Original version of this UPS code was taken from: *   'Network UPS Tools' by Russell Kroll <rkroll@exploits.org> *   homepage: http://www.networkupstools.org/ * *  Significantly mangled by Alan Robertson <alanr@unix.sh> */#define	DEVICE	                "APCSmart-Stonith"#include "stonith_plugin_common.h"/* * APCSmart (tested with 2 old 900XLI, and an APC SmartUPS 700) * * the reset is a combined reset (cmd: S@000). * that means if the ups is online, a scheduled reset (20s delay) * will be triggered. after the reset the ups will immediately * return  online. if the ups is on-battery, the reset will also be * a scheduled reset but the ups will remain offline until the power * is back.  */#define CFG_FILE		"/etc/ha.d/apcsmart.cfg"#define MAX_DEVICES		1#define SERIAL_TIMEOUT		3	/* timeout in sec */#define SEND_DELAY		50000	/* in microseconds */#define ENDCHAR			10	/* use LF */#define MAX_STRING              512#define SHUTDOWN_DELAY		"020"#define WAKEUP_DELAY		"000"#define SWITCH_TO_NEXT_VAL	"-"	/* APC cmd for cycling through					 * the values					 */#define CMD_SMART_MODE          "Y"#define RSP_SMART_MODE		"SM"#define CMD_GET_STATUS		"Q"#define RSP_GET_STATUS		NULL#define CMD_RESET               "@000"#define RSP_RESET		"*"#define RSP_RESET2		"OK"#define	RSP_NA			"NA"#define	CMD_READREG1		"~"#define CMD_OFF			"Z"#define CMD_ON			"\016" /* (control-n) */#define CMD_SHUTDOWN_DELAY	"p"#define CMD_WAKEUP_DELAY	"r"#define CR			13struct pluginDevice {	StonithPlugin	sp;	const char *	pluginid; /* of object				*/	char **		hostlist; /* served by the device (only 1)	*/	int		hostcount;/* of hosts (1)			*/	char *		upsdev;   /*					*/	int		upsfd;    /* for serial port			*/	int		retries;};/* saving old settings *//* FIXME!  These should be part of pluginDevice struct above */static struct termios old_tio;static char old_shutdown_delay[MAX_STRING];static char old_wakeup_delay[MAX_STRING];static int f_serialtimeout;	/* flag for timeout */static const char *pluginid = DEVICE;static const char *NOTpluginID = "destroyed (APCSmart)";/* * stonith prototypes  */#define PIL_PLUGIN              apcsmart#define PIL_PLUGIN_S            "apcsmart"#define PIL_PLUGINLICENSE 	LICENSE_LGPL#define PIL_PLUGINLICENSEURL 	URL_LGPL#include <pils/plugin.h>#include "stonith_signal.h"static StonithPlugin *	apcsmart_new(void);static void		apcsmart_destroy(StonithPlugin *);static const char**	apcsmart_get_confignames(StonithPlugin*);static int		apcsmart_set_config(StonithPlugin *, StonithNVpair*);static const char *	apcsmart_get_info(StonithPlugin * s, int InfoType);static int		apcsmart_status(StonithPlugin * );static int		apcsmart_req_reset(StonithPlugin * s, int request, const char * host);static char **		apcsmart_hostlist(StonithPlugin  *);static struct stonith_ops apcsmartOps ={	apcsmart_new,		  /* Create new STONITH object		*/	apcsmart_destroy,	  /* Destroy STONITH object		*/	apcsmart_get_info,	  /* Return STONITH info string		*/	apcsmart_get_confignames, /* Return STONITH info string		*/	apcsmart_set_config,	  /* Get configuration from NVpairs	*/	apcsmart_status,	  /* Return STONITH device status	*/	apcsmart_req_reset,	  /* Request a reset 			*/	apcsmart_hostlist,	  /* Return list of supported hosts	*/};PIL_PLUGIN_BOILERPLATE2("1.0", Debug)static const PILPluginImports*  PluginImports;static PILPlugin*               OurPlugin;static PILInterface*		OurInterface;static StonithImports*		OurImports;static void*			interfprivate;PIL_rcPIL_PLUGIN_INIT(PILPlugin*us, const PILPluginImports* imports);PIL_rcPIL_PLUGIN_INIT(PILPlugin*us, const PILPluginImports* imports){	/* Force the compiler to do a little type checking */	(void)(PILPluginInitFun)PIL_PLUGIN_INIT;	PluginImports = imports;	OurPlugin = us;	/* Register ourself as a plugin */	imports->register_plugin(us, &OurPIExports);  	/*  Register our interface implementation */ 	return imports->register_interface(us, PIL_PLUGINTYPE_S	,	PIL_PLUGIN_S	,	&apcsmartOps	,	NULL		/*close */	,	&OurInterface	,	(void*)&OurImports	,	&interfprivate); }/* * own prototypes  */int APC_open_serialport(const char *port, speed_t speed);void APC_close_serialport(int upsfd);void APC_sh_serial_timeout(int sig);int APC_send_cmd(int upsfd, const char *cmd);int APC_recv_rsp(int upsfd, char *rsp);int APC_enter_smartmode(int upsfd);int APC_set_ups_var(int upsfd, const char *cmd, char *newval);int APC_init( struct pluginDevice *ad );void APC_deinit( int upsfd );/* * * Portable locking (non-blocking) * * This is a candidate for including in a general portability library. */static intfile_lock(int fd){	int ret;#ifdef HAVE_FCNTL	struct flock l;	l.l_type = F_WRLCK;	l.l_whence = 0;	l.l_start = 0;	l.l_len = 0;	ret = fcntl(fd, F_SETLK, &l);	return((ret == -1) ? -1 : 0);#else#  ifdef HAVE_FLOCK	ret = flock(fd, LOCK_EX | LOCK_NB);	return(ret);#  else#    error "No locking method (flock, fcntl) is available"	return(-1);#  endif /* HAVE_FLOCK */#endif /* HAVE_FCNTL */}static intfile_unlock(int fd){	int ret;#ifdef HAVE_FCNTL	struct flock l;	l.l_type = F_UNLCK;	l.l_whence = 0;	l.l_start = 0;	l.l_len = 0;	ret = fcntl(fd, F_SETLK, &l);	return((ret == -1) ? -1 : 0);#else#  ifdef HAVE_FLOCK	ret = flock(fd, LOCK_UN);	return(ret);#  else#    error "No unlocking method (flock, fcntl) is available"	return(-1);#  endif /* HAVE_FLOCK */#endif /* HAVE_FCNTL */}/* * Signal handler for serial port timeouts  */voidAPC_sh_serial_timeout(int sig){	if (Debug) {		LOG(PIL_DEBUG, "%s: called.", __FUNCTION__);	}	STONITH_IGNORE_SIG(SIGALRM);	if (Debug) {		LOG(PIL_DEBUG, "%s: serial port timed out.", __FUNCTION__);	}	f_serialtimeout = TRUE;    return;}/* * Open serial port and set it to b2400  */intAPC_open_serialport(const char *port, speed_t speed){	struct termios tio;	int fd;	if (Debug) {		LOG(PIL_DEBUG, "%s: called.", __FUNCTION__);	}	STONITH_SIGNAL(SIGALRM, APC_sh_serial_timeout);	alarm(SERIAL_TIMEOUT);	f_serialtimeout = FALSE;	fd = open(port, O_RDWR | O_NOCTTY | O_NONBLOCK | O_EXCL);	alarm(0);	STONITH_IGNORE_SIG(SIGALRM);	if (fd < 0) {		if (Debug) {			LOG(PIL_DEBUG, "%s: 1st open failed.", __FUNCTION__);		}		return (f_serialtimeout ? S_TIMEOUT : S_OOPS);	}	if (file_lock(fd) != 0) {		if (Debug) {			LOG(PIL_DEBUG, "%s: 1st lock failed.", __FUNCTION__);		}		return (S_OOPS);	}	tcgetattr(fd, &old_tio);	memcpy(&tio, &old_tio, sizeof(struct termios));	tio.c_lflag = 0 | ECHOE | ECHOKE | ECHOCTL | PENDIN;	tio.c_iflag = 0 | IXANY | IMAXBEL | IXOFF;	tio.c_oflag = 0 | ONLCR;	tio.c_cflag = 0 | CREAD | CS8 | HUPCL | CLOCAL;	cfsetispeed(&tio, speed);	cfsetospeed(&tio, speed);	tio.c_cc[VMIN] = 1;	tio.c_cc[VTIME] = 0;	tcflush(fd, TCIFLUSH);	tcsetattr(fd, TCSANOW, &tio);	close(fd);	STONITH_SIGNAL(SIGALRM, APC_sh_serial_timeout);	alarm(SERIAL_TIMEOUT);	fd = open(port, O_RDWR | O_NOCTTY | O_EXCL);	alarm(0);	STONITH_IGNORE_SIG(SIGALRM);	if (fd < 0) {		if (Debug) {			LOG(PIL_DEBUG, "%s: 2nd open failed.", __FUNCTION__);		}		return (f_serialtimeout ? S_TIMEOUT : S_OOPS);	}	if (file_lock(fd) != 0) {		if (Debug) {			LOG(PIL_DEBUG, "%s: 2nd lock failed.", __FUNCTION__);		}		return (f_serialtimeout ? S_TIMEOUT : S_OOPS);	}	tcgetattr(fd, &tio);	tio.c_cflag = CS8 | CLOCAL | CREAD;	tio.c_iflag = IGNPAR;	tio.c_oflag = 0;	tio.c_lflag = 0;	tio.c_cc[VMIN] = 1;	tio.c_cc[VTIME] = 0;	cfsetispeed(&tio, speed);	cfsetospeed(&tio, speed);	tcflush(fd, TCIFLUSH);	tcsetattr(fd, TCSANOW, &tio);	return (fd);}/* * Close serial port and restore old settings  */voidAPC_close_serialport(int upsfd){	if (Debug) {		LOG(PIL_DEBUG, "%s: called.", __FUNCTION__);	}	file_unlock(upsfd);	tcflush(upsfd, TCIFLUSH);	tcsetattr(upsfd, TCSANOW, &old_tio);	close(upsfd);}/* * Send a command to the ups  */intAPC_send_cmd(int upsfd, const char *cmd){	int i;	if (Debug) {		LOG(PIL_DEBUG, "%s(\"%s\")", __FUNCTION__, cmd);	}	tcflush(upsfd, TCIFLUSH);	for (i = strlen(cmd); i > 0; i--) {		if (write(upsfd, cmd++, 1) != 1) {			return (S_ACCESS);		}		usleep(SEND_DELAY);	}	return (S_OK);}/* * Get the response from the ups  */intAPC_recv_rsp(int upsfd, char *rsp){	char *p = rsp;	char inp;	int num = 0;	if (Debug) {		LOG(PIL_DEBUG, "%s: called.", __FUNCTION__);	}	*p = '\0';	STONITH_SIGNAL(SIGALRM, APC_sh_serial_timeout);	alarm(SERIAL_TIMEOUT);	while (num < MAX_STRING) {		if (read(upsfd, &inp, 1) == 1) {	    		/* shutdown sends only a '*' without LF  */			if ((inp == '*') && (num == 0)) {				*p++ = inp;				num++;				inp = ENDCHAR;			}			if (inp == ENDCHAR) {				alarm(0);				STONITH_IGNORE_SIG(SIGALRM);				*p = '\0';				if (Debug) {					LOG(PIL_DEBUG, "return(\"%s\")/*%s*/;"					,	rsp, __FUNCTION__);				}				return (S_OK);			}			if (inp != CR) {				*p++ = inp;				num++;			}		}else{	    		alarm(0);			STONITH_IGNORE_SIG(SIGALRM);			*p = '\0';			return (f_serialtimeout ? S_TIMEOUT : S_ACCESS);		}	}	return (S_ACCESS);}/* *  Enter smart mode */intAPC_enter_smartmode(int upsfd){    int rc;    char resp[MAX_STRING];	if (Debug) {		LOG(PIL_DEBUG, "%s: called.", __FUNCTION__);	}	strcpy(resp, RSP_SMART_MODE);	if (((rc = APC_send_cmd(upsfd, CMD_SMART_MODE)) == S_OK)	&&	((rc = APC_recv_rsp(upsfd, resp)) == S_OK)	&&	(strcmp(RSP_SMART_MODE, resp) == 0)) {			return (S_OK);	}	return (S_ACCESS);}/*  * Set a value in the hardware using the <cmdchar> '-' (repeat) approach */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩一区二区| 韩国一区二区三区| 日本不卡免费在线视频| 国产精品一区免费视频| 在线观看日韩电影| 亚洲精品一线二线三线| 亚洲午夜视频在线观看| 国产精品一区二区x88av| 欧美日韩精品一区视频| 中文字幕在线不卡一区| 久久99九九99精品| 欧美在线观看你懂的| 国产精品美女久久久久久| 美女一区二区视频| 欧美日韩一区二区三区不卡| 国产精品国产三级国产aⅴ无密码| 美女www一区二区| 欧美日韩国产首页在线观看| 毛片av一区二区三区| 日本高清不卡一区| 最新国产精品久久精品| 国产精品小仙女| 欧美成人r级一区二区三区| 亚洲综合精品久久| 99国产精品99久久久久久| 国产色产综合色产在线视频| 麻豆国产精品官网| 日韩三级精品电影久久久 | a亚洲天堂av| 国产亚洲女人久久久久毛片| 精品一区二区在线看| 日韩欧美一区在线观看| 日韩电影在线一区二区| 欧美日韩精品欧美日韩精品 | 欧美日韩一级二级| 亚洲品质自拍视频| 91小宝寻花一区二区三区| 亚洲欧美综合另类在线卡通| 国产99久久精品| 国产日韩欧美在线一区| 国产69精品久久777的优势| 久久蜜臀精品av| 国产高清一区日本| 欧美国产一区二区在线观看| 福利一区二区在线观看| 国产精品久久久久久久久快鸭| 成人精品视频.| 亚洲欧美电影一区二区| 欧美色综合网站| 午夜精品在线看| 欧美一区二区私人影院日本| 99精品欧美一区二区蜜桃免费| 亚洲男同性恋视频| 欧美日韩精品综合在线| 国精品**一区二区三区在线蜜桃| 精品福利一二区| 成人a免费在线看| 亚洲精品日韩综合观看成人91| 欧美日韩一区二区不卡| 久久国产婷婷国产香蕉| 欧美极品美女视频| 91精品办公室少妇高潮对白| 日日夜夜一区二区| 久久久久久久综合狠狠综合| 99国产精品一区| 日本视频一区二区三区| 中文久久乱码一区二区| 欧美三区在线观看| 国产毛片一区二区| 一区二区在线电影| 欧美一区二区播放| 91网站最新网址| 免费看日韩a级影片| 中文字幕一区二区三区蜜月 | 黄色精品一二区| 日韩美女视频一区二区 | 粗大黑人巨茎大战欧美成人| 亚洲女子a中天字幕| 日韩欧美国产一区二区在线播放| jlzzjlzz国产精品久久| 免费久久精品视频| 亚洲你懂的在线视频| 久久综合九色综合久久久精品综合| 波多野结衣视频一区| 日本欧美大码aⅴ在线播放| 中文字幕亚洲一区二区va在线| 91精品国产aⅴ一区二区| 99久久婷婷国产综合精品电影| 蜜臀av一区二区三区| 亚洲视频网在线直播| 精品成人私密视频| 欧美美女网站色| 91浏览器在线视频| 国产一区二区三区在线看麻豆| 一区二区三区在线观看国产 | 欧美日韩www| 99精品视频免费在线观看| 精久久久久久久久久久| 三级亚洲高清视频| 亚洲专区一二三| 成人欧美一区二区三区黑人麻豆| 精品av久久707| 日韩视频一区二区在线观看| 欧美中文字幕一区二区三区| 波波电影院一区二区三区| 国产中文字幕一区| 美国毛片一区二区| 免费观看91视频大全| 婷婷夜色潮精品综合在线| 国产一区二区三区高清播放| 亚洲成a人片综合在线| 亚洲精品国产第一综合99久久 | 色欧美乱欧美15图片| 国产999精品久久| 国产精品996| 国产在线精品一区二区三区不卡 | 中文字幕一区二区三区蜜月| 欧美极品少妇xxxxⅹ高跟鞋| 久久精品在线免费观看| 国产午夜亚洲精品羞羞网站| 久久你懂得1024| 国产日韩三级在线| 日本一区二区综合亚洲| 中文一区二区完整视频在线观看| 久久久久久久综合色一本| 国产女主播视频一区二区| 国产欧美一区二区精品性色| 中文av字幕一区| 亚洲欧美在线aaa| 亚洲综合自拍偷拍| 日韩 欧美一区二区三区| 蓝色福利精品导航| 国产成人一区在线| 国产sm精品调教视频网站| av中文字幕一区| 在线亚洲一区二区| 欧美高清视频在线高清观看mv色露露十八 | 亚洲精品伦理在线| 亚洲成人三级小说| 久久精品99久久久| 成人午夜av影视| 91福利在线看| 日韩欧美国产综合一区 | 成人欧美一区二区三区视频网页| 国产精品黄色在线观看| 亚洲综合免费观看高清在线观看| 三级精品在线观看| 成人黄色大片在线观看| 欧美专区亚洲专区| 欧美成人a∨高清免费观看| 国产精品久久久久久久久果冻传媒 | 精品久久久久久久久久久久久久久 | 亚洲gay无套男同| 国内外成人在线| 日本高清不卡aⅴ免费网站| 日韩欧美资源站| 中文字幕一区二区不卡| 日韩av高清在线观看| jiyouzz国产精品久久| 欧美妇女性影城| 国产精品久久久一区麻豆最新章节| 亚洲在线成人精品| 国产成人自拍网| 欧美美女喷水视频| 亚洲欧美日韩在线不卡| 国产一区二区三区久久久| 色8久久人人97超碰香蕉987| 精品毛片乱码1区2区3区| 亚洲久草在线视频| 国产成a人亚洲精品| 7777精品久久久大香线蕉| 国产精品区一区二区三区| 视频一区二区不卡| 在线亚洲一区观看| 亚洲国产高清aⅴ视频| 免费欧美高清视频| 欧美无砖砖区免费| 国产精品久久久久久亚洲伦| 久久精品国产免费| 欧美视频自拍偷拍| 亚洲人精品午夜| 国产激情一区二区三区| 日韩欧美国产综合一区| 午夜久久久久久| 欧美亚洲禁片免费| 亚洲欧美日韩在线| k8久久久一区二区三区| 国产日产精品一区| 久久国产麻豆精品| 91精品国产色综合久久不卡蜜臀 | 国产精品一区二区无线| 911精品产国品一二三产区| 亚洲免费在线电影| 99精品偷自拍| 中文字幕一区二区三区四区| 成人免费视频caoporn| 久久久噜噜噜久久中文字幕色伊伊| 免费一区二区视频| 91精品久久久久久蜜臀| 日韩精品午夜视频|