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

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

?? apcmaster.c

?? linux集群服務器軟件代碼包
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* $Id: apcmaster.c,v 1.19 2005/02/17 09:20:18 sunjd Exp $ *//***  Copyright 2001 Mission Critical Linux, Inc.**  All Rights Reserved.*//* *	Stonith module for APC Master Switch (AP9211) * *  Copyright (c) 2001 Mission Critical Linux, Inc. *  author: mike ledoux <mwl@mclinux.com> *  author: Todd Wheeling <wheeling@mclinux.com> *  mangled by Sun Jiang Dong, <sunjd@cn.ibm.com>, IBM, 2005 * *  Based strongly on original code from baytech.c by Alan Robertson. * * 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 * *//*                          Observations/Notes *  * 1. The APC MasterSwitch, unlike the BayTech network power switch, *    accepts only one (telnet) connection/session at a time. When one *    session is active, any subsequent attempt to connect to the MasterSwitch  *    will result in a connection refused/closed failure. In a cluster  *    environment or other environment utilizing polling/monitoring of the  *    MasterSwitch (from multiple nodes), this can clearly cause problems.  *    Obviously the more nodes and the shorter the polling interval, the more  *    frequently such errors/collisions may occur. * * 2. We observed that on busy networks where there may be high occurances *    of broadcasts, the MasterSwitch became unresponsive.  In some  *    configurations this necessitated placing the power switch onto a  *    private subnet. *//* * Version string that is filled in by CVS */static const char *version __attribute__ ((unused)) = "$Revision: 1.19 $"; #define	DEVICE	"APC MasterSwitch"#include "stonith_plugin_common.h"#define PIL_PLUGIN              apcmaster#define PIL_PLUGIN_S            "apcmaster"#define PIL_PLUGINLICENSE 	LICENSE_LGPL#define PIL_PLUGINLICENSEURL 	URL_LGPL#include <pils/plugin.h>#include "stonith_signal.h"static StonithPlugin *	apcmaster_new(void);static void		apcmaster_destroy(StonithPlugin *);static const char **	apcmaster_get_confignames(StonithPlugin *);static int		apcmaster_set_config(StonithPlugin *, StonithNVpair *);static const char *	apcmaster_getinfo(StonithPlugin * s, int InfoType);static int		apcmaster_status(StonithPlugin * );static int		apcmaster_reset_req(StonithPlugin * s, int request, const char * host);static char **		apcmaster_hostlist(StonithPlugin  *);static struct stonith_ops apcmasterOps ={	apcmaster_new,		/* Create new STONITH object	*/	apcmaster_destroy,		/* Destroy STONITH object	*/	apcmaster_getinfo,		/* Return STONITH info string	*/	apcmaster_get_confignames,	/* Get configuration parameters */	apcmaster_set_config,		/* Set configuration */	apcmaster_status,		/* Return STONITH device status	*/	apcmaster_reset_req,		/* Request a reset */	apcmaster_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;#include "stonith_expect_helpers.h"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	,	&apcmasterOps	,	NULL		/*close */	,	&OurInterface	,	(void*)&OurImports	,	&interfprivate); }/* *	I have an AP9211.  This code has been tested with this switch. */struct pluginDevice {	StonithPlugin	sp;	const char *	pluginid;	char *		idinfo;	char *		unitid;	pid_t		pid;	int		rdfd;	int		wrfd;	int		config;	char *		device;        char *		user;	char *		passwd;};static const char * pluginid = "APCMS-Stonith";static const char * NOTpluginID = "Hey dummy, this has been destroyed (APCMS)";/* *	Different expect strings that we get from the APC MasterSwitch */#define APCMSSTR	"American Power Conversion"static struct Etoken EscapeChar[] =	{ {"Escape character is '^]'.", 0, 0}					,	{NULL,0,0}};static struct Etoken login[] = 		{ {"User Name :", 0, 0}, {NULL,0,0}};static struct Etoken password[] =	{ {"Password  :", 0, 0} ,{NULL,0,0}};static struct Etoken Prompt[] =	{ {"> ", 0, 0} ,{NULL,0,0}};static struct Etoken LoginOK[] =	{ {APCMSSTR, 0, 0}                    , {"User Name :", 1, 0} ,{NULL,0,0}};static struct Etoken Separator[] =	{ {"-----", 0, 0} ,{NULL,0,0}};/* We may get a notice about rebooting, or a request for confirmation */static struct Etoken Processing[] =	{ {"Press <ENTER> to continue", 0, 0}				,	{"Enter 'YES' to continue", 1, 0}				,	{NULL,0,0}};static int	MS_connect_device(struct pluginDevice * ms);static int	MSLogin(struct pluginDevice * ms);static int	MSRobustLogin(struct pluginDevice * ms);static int	MSNametoOutlet(struct pluginDevice*, const char * name);static int	MSReset(struct pluginDevice*, int outletNum, const char * host);static int	MSLogout(struct pluginDevice * ms);#if defined(ST_POWERON) && defined(ST_POWEROFF)static int	apcmaster_onoff(struct pluginDevice*, int outletnum, const char * unitid,		int request);#endif/* Login to the APC Master Switch */static intMSLogin(struct pluginDevice * ms){        EXPECT(ms->rdfd, EscapeChar, 10);  	/* 	 * We should be looking at something like this:         *	User Name :	 */	EXPECT(ms->rdfd, login, 10);	SEND(ms->wrfd, ms->user);       	SEND(ms->wrfd, "\r");	/* Expect "Password  :" */	EXPECT(ms->rdfd, password, 10);	SEND(ms->wrfd, ms->passwd);	SEND(ms->wrfd, "\r"); 	switch (StonithLookFor(ms->rdfd, LoginOK, 30)) {		case 0:	/* Good! */			LOG(PIL_INFO, "%s", _("Successful login to " DEVICE ".")); 			break;		case 1:	/* Uh-oh - bad password */			LOG(PIL_CRIT,"%s", _("Invalid password for " DEVICE "."));			return(S_ACCESS);		default:			Stonithkillcomm(&ms->rdfd,&ms->wrfd,&ms->pid);			return(errno == ETIMEDOUT ? S_TIMEOUT : S_OOPS);	} 	return(S_OK);}/* Attempt to login up to 20 times... */static intMSRobustLogin(struct pluginDevice * ms){	int rc = S_OOPS;	int j = 0;	for ( ; ; ) {	  if (ms->pid > 0) {		Stonithkillcomm(&ms->rdfd,&ms->wrfd,&ms->pid);	  }	  if (MS_connect_device(ms) != S_OK) {			Stonithkillcomm(&ms->rdfd,&ms->wrfd,&ms->pid);	  } else {		rc = MSLogin(ms);		if( rc == S_OK ) {			break;	    	}	  }	  if ((++j) == 20) {		break;	  } else {		sleep(1);	  }	}	return rc;}/* Log out of the APC Master Switch */static int MSLogout(struct pluginDevice* ms){	int	rc;	/* Make sure we're in the right menu... */ 	/*SEND(ms->wrfd, "\033\033\033\033\033\033\033"); */        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);	SEND(ms->wrfd, "\033");		/* Expect "> " */	rc = StonithLookFor(ms->rdfd, Prompt, 5);	/* "4" is logout */	SEND(ms->wrfd, "4\r");	Stonithkillcomm(&ms->rdfd,&ms->wrfd,&ms->pid);	return(rc >= 0 ? S_OK : (errno == ETIMEDOUT ? S_TIMEOUT : S_OOPS));}/* Reset (power-cycle) the given outlets */static intMSReset(struct pluginDevice* ms, int outletNum, const char *host){  	char		unum[32];	/* Make sure we're in the top level menu */        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);	SEND(ms->wrfd, "\033");		/* Expect ">" */	EXPECT(ms->rdfd, Prompt, 5);	/* Request menu 1 (Device Control) */	SEND(ms->wrfd, "1\r");	/* Select requested outlet */	EXPECT(ms->rdfd, Prompt, 5);	snprintf(unum, sizeof(unum), "%i\r", outletNum);  	SEND(ms->wrfd, unum);	/* Select menu 1 (Control Outlet) */	EXPECT(ms->rdfd, Prompt, 5);	SEND(ms->wrfd, "1\r");	/* Select menu 3 (Immediate Reboot) */	EXPECT(ms->rdfd, Prompt, 5);	SEND(ms->wrfd, "3\r");	/* Expect "Press <ENTER> " or "Enter 'YES'" (if confirmation turned on) */	retry:	switch (StonithLookFor(ms->rdfd, Processing, 5)) {		case 0: /* Got "Press <ENTER>" Do so */			SEND(ms->wrfd, "\r");			break;		case 1: /* Got that annoying command confirmation :-( */			SEND(ms->wrfd, "YES\r");			goto retry;		default: 			return(errno == ETIMEDOUT ? S_RESETFAIL : S_OOPS);	}		LOG(PIL_INFO, "%s: %s", _("Host being rebooted"), host); 	/* Expect ">" */	if (StonithLookFor(ms->rdfd, Prompt, 10) < 0) {		return(errno == ETIMEDOUT ? S_RESETFAIL : S_OOPS);	}	/* All Right!  Power is back on.  Life is Good! */	LOG(PIL_INFO, "%s: %s", _("Power restored to host"), host);	/* Return to top level menu */	SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);	SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);	SEND(ms->wrfd, "\033");	return(S_OK);}#if defined(ST_POWERON) && defined(ST_POWEROFF)static intapcmaster_onoff(struct pluginDevice* ms, int outletNum, const char * unitid, int req){	char		unum[32];	const char *	onoff = (req == ST_POWERON ? "1\r" : "2\r");	int	rc;	if ((rc = MSRobustLogin(ms) != S_OK)) {		LOG(PIL_CRIT, "%s", _("Cannot log into " DEVICE "."));		return(rc);	}		/* Make sure we're in the top level menu */        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);        SEND(ms->wrfd, "\033");	EXPECT(ms->rdfd, Prompt, 5);	SEND(ms->wrfd, "\033");	/* Expect ">" */	EXPECT(ms->rdfd, Prompt, 5);	/* Request menu 1 (Device Control) */	SEND(ms->wrfd, "1\r");	/* Select requested outlet */  	snprintf(unum, sizeof(unum), "%d\r", outletNum);   	SEND(ms->wrfd, unum); 	/* Select menu 1 (Control Outlet) */	SEND(ms->wrfd, "1\r");	/* Send ON/OFF command for given outlet */	SEND(ms->wrfd, onoff);	/* Expect "Press <ENTER> " or "Enter 'YES'" (if confirmation turned on) */	retry:	switch (StonithLookFor(ms->rdfd, Processing, 5)) {		case 0: /* Got "Press <ENTER>" Do so */			SEND(ms->wrfd, "\r");			break;		case 1: /* Got that annoying command confirmation :-( */			SEND(ms->wrfd, "YES\r");			goto retry;		default: 			return(errno == ETIMEDOUT ? S_RESETFAIL : S_OOPS);	}		EXPECT(ms->rdfd, Prompt, 10);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久一区二区三区| 色综合久久久久久久久| 亚洲午夜在线电影| 1024成人网| 自拍偷拍国产精品| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品欧美一区喷水| 欧美高清一级片在线观看| 久久欧美一区二区| 国产网站一区二区| 国产精品国产精品国产专区不片| 国产精品蜜臀av| 18成人在线视频| 亚洲最色的网站| 秋霞国产午夜精品免费视频| 免费观看在线综合色| 久久99蜜桃精品| 国产成人三级在线观看| 成人三级在线视频| 色噜噜狠狠色综合欧洲selulu| 欧美视频在线一区| 日韩久久精品一区| 国产精品污www在线观看| 亚洲乱码国产乱码精品精小说| 一区二区国产视频| 日本在线不卡一区| 国产精品996| 日本道精品一区二区三区 | 亚洲v精品v日韩v欧美v专区| 五月综合激情网| 国产一区二区三区精品视频| 成人精品小蝌蚪| 欧美精品在线一区二区三区| 久久亚洲精品小早川怜子| 中文字幕一区在线观看视频| 天天影视涩香欲综合网| 国产福利一区二区三区视频| 欧美日韩日日骚| 精品欧美黑人一区二区三区| 最新日韩在线视频| 日韩精品一级二级 | 亚洲综合色噜噜狠狠| 人人精品人人爱| 91丨porny丨中文| 日韩视频一区二区三区在线播放 | 欧美一区二区三区在线看| 欧美激情综合网| 日日嗨av一区二区三区四区| 成人免费高清在线| 日韩一区二区三区电影在线观看 | 26uuu久久综合| 亚洲已满18点击进入久久| 国产一区二区三区精品视频| 欧美美女网站色| 中文字幕一区在线观看视频| 国产真实乱偷精品视频免| 欧美日韩中文精品| 国产精品久久久爽爽爽麻豆色哟哟| 青娱乐精品视频| 在线视频一区二区免费| 国产精品美女久久久久久久| 麻豆国产欧美日韩综合精品二区| 欧美亚洲国产一区二区三区va | 亚洲成av人影院| 91亚洲大成网污www| 久久久久国产精品厨房| 久久99久久久欧美国产| 69成人精品免费视频| 亚洲一区二区三区四区在线免费观看| 成人国产精品免费| 久久精品欧美日韩精品| 国产乱人伦精品一区二区在线观看| 91精品国产综合久久小美女| 亚洲aⅴ怡春院| 在线影院国内精品| 一区二区三区在线观看国产| av亚洲精华国产精华精华| 国产欧美一二三区| 成人免费电影视频| 国产精品国产三级国产aⅴ入口| 国产成人精品影视| 欧美国产一区二区| 成人av网址在线| 亚洲欧美日韩国产成人精品影院| 91视频.com| 亚洲男人的天堂网| 欧美色图在线观看| 亚洲电影视频在线| 欧美精品自拍偷拍| 精彩视频一区二区| 中文字幕av不卡| 色综合天天综合网国产成人综合天 | 麻豆国产91在线播放| 欧美zozozo| 国产一区二区三区久久久| 国产精品天美传媒| 在线精品视频小说1| 免费三级欧美电影| 国产亚洲女人久久久久毛片| 成人看片黄a免费看在线| 亚洲精品视频免费看| 欧美精品亚洲二区| 国产精品资源在线| 一级特黄大欧美久久久| 欧美一区日韩一区| 国产成人夜色高潮福利影视| 亚洲综合成人网| 日韩三级视频在线看| 粉嫩aⅴ一区二区三区四区| 亚洲国产综合人成综合网站| 欧美大片在线观看| 99re热视频这里只精品| 蜜乳av一区二区三区| 中文字幕中文在线不卡住| 91精品国产综合久久精品麻豆| 国产宾馆实践打屁股91| 偷拍一区二区三区| 欧美国产乱子伦| 91精品国产综合久久精品| 成人福利在线看| 日韩国产精品大片| 亚洲区小说区图片区qvod| 欧美xxxx老人做受| 欧美性猛片aaaaaaa做受| 国产激情视频一区二区三区欧美| 亚洲国产精品久久人人爱蜜臀| 久久久91精品国产一区二区精品| 欧美亚一区二区| 成人免费看片app下载| 日本亚洲欧美天堂免费| 自拍偷拍国产亚洲| 国产欧美精品区一区二区三区 | 免费在线观看一区二区三区| 亚洲欧美日韩国产综合在线| 国产亚洲人成网站| 欧美一区二区福利在线| 日本道精品一区二区三区| 成人ar影院免费观看视频| 狠狠色丁香婷婷综合久久片| 视频在线在亚洲| 一二三区精品福利视频| 综合网在线视频| 欧美高清在线一区二区| www国产亚洲精品久久麻豆| 欧美一区二区视频观看视频| 欧美日韩午夜在线视频| 欧洲亚洲国产日韩| 91麻豆国产在线观看| av中文一区二区三区| 成人精品国产福利| 成人激情小说网站| 不卡av免费在线观看| 不卡电影一区二区三区| 成人avav影音| 一本久久a久久精品亚洲| 99久久久精品| 91丝袜美腿高跟国产极品老师 | 国产成人午夜片在线观看高清观看| 久久99久久99| 激情综合网天天干| 国产又粗又猛又爽又黄91精品| 国产美女在线观看一区| 国产成人精品亚洲午夜麻豆| 国产999精品久久久久久| 成人免费看视频| 91丝袜高跟美女视频| 日本韩国欧美在线| 欧美亚男人的天堂| 欧美一区二区啪啪| 日韩免费高清视频| 国产色产综合产在线视频| 中文字幕欧美日本乱码一线二线| 国产精品成人在线观看| 亚洲综合色区另类av| 日韩黄色免费网站| 国产精品一二一区| 9人人澡人人爽人人精品| 欧美日韩精品一二三区| 精品国产乱码91久久久久久网站| 国产欧美一区二区精品性| 亚洲精品国产一区二区精华液| 日韩精品成人一区二区三区| 黑人巨大精品欧美一区| 不卡的电影网站| 91麻豆精品久久久久蜜臀| 精品福利在线导航| 亚洲精品成a人| 韩日av一区二区| 97精品国产露脸对白| 91麻豆精品国产91久久久久久| 久久久www免费人成精品| 亚洲综合男人的天堂| 国产在线观看免费一区| 日本精品一级二级| 久久综合色婷婷| 亚洲成人av电影在线| 岛国精品在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品理论片| 视频一区视频二区中文|