/* $Id: stonith.h,v 1.7.4.1 2004/04/20 07:57:54 alan Exp $ */ /* * S hoot * T he * O ther * N ode * I n * T he * H ead * * Cause the other machine to reboot or die - now. * * We guarantee that when we report that the machine has been * rebooted, then it has been (barring misconfiguration or hardware errors) * * A machine which we have STONITHed won't do anything more to its * peripherials etc. until it goes through the reboot cycle. */ /* * * Copyright (c) 2000 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 * */ #ifndef __STONITH_H # define __STONITH_H /* * Return codes from "Stonith" member functions. */ #define S_OK 0 /* Machine correctly reset */ #define S_BADCONFIG 1 /* Bad config info given */ #define S_ACCESS 2 /* Can't access STONITH device */ /* (login/passwd problem?) */ #define S_INVAL 3 /* Bad/illegal argument */ #define S_BADHOST 4 /* Bad/illegal host/node name */ #define S_RESETFAIL 5 /* Reset failed */ #define S_TIMEOUT 6 /* Timed out in the dialogues */ #define S_ISOFF 7 /* Can't reboot: Outlet is off */ #define S_OOPS 8 /* Something strange happened */ typedef struct stonith { struct stonith_ops * s_ops; char * stype; void * pinfo; }Stonith; /* * These functions all use syslog(3) for error messages. * Consequently they assume you've done an openlog() to initialize it * for them. */ #define NR_STONITH_FNS 9 struct stonith_ops { void * (*new) (void); void (*destroy) (Stonith*); int (*set_config_file) (Stonith *, const char * filename); int (*set_config_info) (Stonith *, const char * confstring); /* * Type of information requested by the getinfo() call */ #define ST_CONF_FILE_SYNTAX 1 /* Config file syntax help */ #define ST_CONF_INFO_SYNTAX 2 /* Config string (info) syntax help */ #define ST_DEVICEID 3 /* Device Type Identification */ #define ST_DEVICENAME 4 /* Unique Device Identification */ #define ST_DEVICEDESCR 5 /* Device Description text */ #define ST_DEVICEURL 6 /* Manufacturer/Device URL */ /* Getinfo() calls return text in the current locale */ const char* (*getinfo) (Stonith*, int infotype); /* * Must call set_config_info or set_config_file before calling any of * the member functions below... */ int (*status) (Stonith *s); /* * Operation requested by reset_req() */ #define ST_GENERIC_RESET 1 /* Reset the machine any way you can */ #define ST_POWERON 2 /* Power the node on */ #define ST_POWEROFF 3 /* Power the node off */ int (*reset_req) (Stonith * s, int op, const char* node); char** (*hostlist) (Stonith* s); /* Returns list of hosts it supports */ void (*free_hostlist) (char** hostlist); }; extern Stonith * stonith_new(const char * type); extern void stonith_delete(Stonith *); extern char ** stonith_types(void); /* NULL-terminated list */ /* valid until next call of stonith_types() */ /* * It is intended that the ST_CONF_FILE_SYNTAX info call return a string * describing the syntax of the configuration file that set_config_file() will * accept. This string can then be used as short help text in configuration * tools, etc. * * The ST_CONF_INFO_SYNTAX info call serves a similar purpose with respect to * the configuration string. * * The ST_DEVICEID info call is intended to return the type of the Stonith * device. Note that it may return a different result once it has attempted * to talk to the device (like after a status() call). * * The ST_DEVICEDESCR info call is intended to return information identifying * the type of STONITH device supported by this STONITH object. This is so * users can tell if they have this kind of device or not. * * The ST_DEVICEURL info call is intended to return the URL of a web site * related to the device in question. This might be the manufacturer, * a pointer to the product line, or the individual product itself. * * A good way for a GUI to work which configures STONITH devices would be to * use the result of the stonith_types() call in a pulldown menu. * * Once the type is selected, create a Stonith object of the selected type. * One can then create a dialog box to create the configuration info for the * device using the text from the ST_CONF_INFO_SYNTAX info call to direct the * user in what information to supply in the conf_info string. * * Once the user has completed their selection, it can be tested for syntactic * validity with set_config_info(). * * If it passes set_config_info(), it can be further validated using status() * which will then actually try and talk to the STONITH device. If status() * returns S_OK, then communication with the device was successfully * established. * * Normally that would mean that logins, passwords, device names, and IP * addresses, etc. have been validated as required by the particular device. * * At this point, you can ask the device which machines it knows how to reset * using the hostlist() member function. * * When implementors of Stonith types put the return values of their * getinfo() calls inside the dgettext(ST_TEXTDOMAIN) macro, we should be * able to satisfy international customers as well. * */ #define STONITH_TYPE stonith #define STONITH_TYPE_S "stonith" typedef struct StonithImports_s StonithImports; struct Etoken { const char * string; /* The token to look for */ int toktype; /* The type to return on match */ int matchto; /* Modified during matches */ }; struct StonithImports_s { int (*ExpectToken)(int fd, struct Etoken * toklist, int to_secs , char * buf, int maxline); int (*StartProcess)(const char * cmd, int * readfd, int * writefd); }; #endif /*__STONITH_H*/