From 1cd690bc3109da45d69fde3155e2dc5bd8f57dad Mon Sep 17 00:00:00 2001 From: James Antill Date: Thu, 26 May 2022 00:46:51 -0400 Subject: [PATCH] Auto sync2gitlab import of OpenIPMI-2.0.31-3.el8.src.rpm --- .gitignore | 1 + 0001-man.patch | 543 ++++++++++++++++++++ EMPTY | 1 - OpenIPMI-collectd.patch | 12 + OpenIPMI.spec | 629 +++++++++++++++++++++++ ipmi.service | 12 + openipmi-helper | 512 +++++++++++++++++++ openipmi.sysconf | 68 +++ restore-api-compatibility.patch | 870 ++++++++++++++++++++++++++++++++ sources | 1 + 10 files changed, 2648 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 0001-man.patch delete mode 100644 EMPTY create mode 100644 OpenIPMI-collectd.patch create mode 100644 OpenIPMI.spec create mode 100644 ipmi.service create mode 100644 openipmi-helper create mode 100644 openipmi.sysconf create mode 100644 restore-api-compatibility.patch create mode 100644 sources diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..899242c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/OpenIPMI-2.0.31.tar.gz diff --git a/0001-man.patch b/0001-man.patch new file mode 100644 index 0000000..da1a2fd --- /dev/null +++ b/0001-man.patch @@ -0,0 +1,543 @@ +From dfca464e5fe4c9107f08bff7e6e2730a504945b7 Mon Sep 17 00:00:00 2001 +From: Boris Ranto +Date: Thu, 2 Jun 2016 12:47:22 +0200 +Subject: [PATCH] Apply './OpenIPMI-2.0.19-man.patch' + +Signed-off-by: Boris Ranto +--- + lanserv/ipmilan.8 | 13 ++++++++++--- + man/ipmi_cmdlang.7 | 36 ++++++++++++++++++------------------ + man/ipmi_ui.1 | 10 +++++----- + man/openipmi_conparms.7 | 4 ++-- + man/openipmicmd.1 | 6 +++--- + man/openipmigui.1 | 12 ++++++------ + man/openipmish.1 | 12 +++++++++++- + man/rmcp_ping.1 | 2 +- + man/solterm.1 | 6 +++--- + sample/ipmicmd.c | 1 + + sample/rmcp_ping.c | 5 +++++ + sample/solterm.c | 7 ++++++- + ui/basic_ui.c | 25 +++++++++++++++++++++++++ + 13 files changed, 96 insertions(+), 43 deletions(-) + +diff --git a/lanserv/ipmilan.8 b/lanserv/ipmilan.8 +index ff43d5c..9360507 100644 +--- a/lanserv/ipmilan.8 ++++ b/lanserv/ipmilan.8 +@@ -29,18 +29,25 @@ address they came in. + + .SH OPTIONS + .TP +-.BI \-c\ config-file ++\fB\-c\fR file,\ \fB\-\-config\-file\fR file + Set the configuration file to one other than the default of + .I "/etc/ipmi_lan.conf" + .TP +-.B \-n ++\fB\-i\fR device,\ \fB\-\-ipmi-dev\fR device ++Sets the desired device ++.TP ++\fB\-n\fR,\ \fB\-\-daemonize\fR + Stops the daemon from forking and detaching from the controlling + terminal. This is useful for running from init. + .TP +-.B \-d ++\fB\-d\fR,\ \fB\-\-debug\fR + Turns on debugging to standard output. You generally have to use + .B \-n + with this. ++.TP ++\fB\-?\fR,\ \fB\-\-help\fR,\ \fB\-\-usage\fR ++Prints brief usage hints message. ++ + + + .SH CONFIGURATION +diff --git a/man/ipmi_cmdlang.7 b/man/ipmi_cmdlang.7 +index 4d18e76..a6d73b9 100644 +--- a/man/ipmi_cmdlang.7 ++++ b/man/ipmi_cmdlang.7 +@@ -246,7 +246,7 @@ instance, the command to create a domain is + The command to list all sensors in a domain named domain1 is + .B sensor list domain1. + +-Each command has a reponse for each object operated on, which is ++Each command has a response for each object operated on, which is + listed after the command description. In those responses, anything + that begins with a + .B % +@@ -316,7 +316,7 @@ BMC. For that, notice that the LAN connection has an options extra IP + and port for the second IP address. OpenIPMI supports these IP + addresses and connection, detecting failures, switching between + addresses, and other fault-tolerant things. It does this +-transparently to the user. Mutiple connections may require special ++transparently to the user. Multiple connections may require special + OEM support, read the documentation about your specific system if you + need this. + +@@ -336,7 +336,7 @@ or + \fI\fP and \fI\fP are the user name and password of + the IPMI user to use for the connection. + The is the driver number, generally 0. +-Options enable and disable various automitic processing and are: ++Options enable and disable various automatic processing and are: + .PD 0 + .HP + .B -[no]all +@@ -356,7 +356,7 @@ is false by default. + is false by default. + .HP + .B -[no]ipmbscan +-- IPMB bus scanning. This turns on scanning IPMB busses when they are found. ++- IPMB bus scanning. This turns on scanning IPMB buses when they are found. + This is false by default. + .HP + .B -[no]oeminit +@@ -461,7 +461,7 @@ available hacks are: + The -M option sets the maximum outstanding messages. The default is + 2, ranges 1-63. + +-Options enable and disable various automitic processing and are: ++Options enable and disable various automatic processing and are: + .PD 0 + .HP + .B -[no]all +@@ -519,7 +519,7 @@ Domain Created: + .RE + + .B fru +-- dump a fru given all it's insundry information. ++- dump a fru given all it's sundry information. + .TP + Response: + .RS +@@ -533,7 +533,7 @@ Domain + + .B msg [data...] + - Send a command to the given IPMB address on the given channel and +-display the response. Note that this does not require the existance ++display the response. Note that this does not require the existence + of an MC in OpenIPMI. + .TP + Response: +@@ -571,7 +571,7 @@ SEL Rescan done: + .RE + + .B presence +-- Audit the presence of all enities in the domain. Note that this just ++- Audit the presence of all entities in the domain. Note that this just + starts the process; it will run in the background. + .TP + Response is: +@@ -689,7 +689,7 @@ FRU deleted: + - Set the value of a FRU element. The + name is the record name, or multi-record. The number is required + for fields that need it (custom and multi-record). The value is +-an a single value for integers. For strings it is a string ++a single value for integers. For strings it is a string + type (either binary, ascii, or unicode) and the info. Binary and + unicode data is specified as numbers. ascii data is specified in + a string. Note that setting a ascii value with no string will +@@ -770,7 +770,7 @@ Domain + .B info + - Dump information about an entity. + .TP +-Reponse: ++Response: + .RS + .nf + Entity +@@ -784,7 +784,7 @@ Entity + .B fru + - Dump the FRU information about the given entity. + .TP +-Reponse: ++Response: + .RS + .nf + Entity +@@ -813,7 +813,7 @@ Entity + .B set_act_time + - Set the hot-swap auto-activate time. + .TP +-Reponse: ++Response: + .RS + .nf + Set act time: +@@ -981,7 +981,7 @@ Response: + .nf + Sensor + Name: +- Positivie Hysteresis: ++ Positive Hysteresis: + Negative Hysteresis: + .fi + .RE +@@ -1101,7 +1101,7 @@ Set done: + .RE + + .B get +-- Get the value of a control. The reponse depends ++- Get the value of a control. The response depends + on the control type. + .TP + Response: +@@ -1128,7 +1128,7 @@ multiple lights. The options values (marked with + ) will not be + present if local control is set to true. Local control means that + the LED takes whatever default function it does on the device +-(like disk activity, ethernet activity, hot-swap LED, etc.). ++(like disk activity, Ethernet activity, hot-swap LED, etc.). + Response for id control: + .RS + .nf +@@ -1325,7 +1325,7 @@ Channel Access + - Set information about the MC's channel access. There are two different + places where this is stored, the present in-use values (volatile) and the + non-volatile storage that is loaded at startup. Note if you specify +-channel 0xe, the modified channel will be the current channel. Parms ++channel 0xe, the modified channel will be the current channel. Parameters + are: + .RS + .nf +@@ -1547,7 +1547,7 @@ PET destroyed: + .SS pef + commands dealing with platform even filters. These are basically + connections to the PEF configuration parameters in an MC. You use a +-pef to fetch a pef config, which you can then modify and write back to ++pef to fetch a pef configuration, which you can then modify and write back to + the MC. Note that when you get a pef config, you claim a lock on the + MC that must be unlocked. + +@@ -1780,7 +1780,7 @@ operational and finished all it SDR, FRU, and bus scans: + .fi + .RE + +-The following comes out when domain connection infomration changes: ++The following comes out when domain connection information changes: + .RS + .nf + EVENT +diff --git a/man/ipmi_ui.1 b/man/ipmi_ui.1 +index 9c5d9b6..011255f 100644 +--- a/man/ipmi_ui.1 ++++ b/man/ipmi_ui.1 +@@ -4,7 +4,7 @@ + ipmi_ui \- Crude interface to an IPMI system + + .SH SYNOPSIS +-.B ipmiui ++.B ipmi_ui + .RB [\| \-dmsg \|] + .RB [\| \-dmem \|] + .RB [\| \-c \|] +@@ -34,7 +34,7 @@ Normally, + starts up in a full-screen format. The left window shows the output + of commands, the right window shows the logs from OpenIPMI. Both + windows are scrollable with page up and page down keys, press the "\fBF1\fP" +-key to choose the the left window to scroll, the "\fBF2\fP" key to choose ++key to choose the left window to scroll, the "\fBF2\fP" key to choose + the right window to scroll. + + Note that you must set your environment \fBTERM\fP variable properly for +@@ -48,7 +48,7 @@ the connections are to the same IPMI domain through different + management controllers. Also, each LAN connection may have two IP + addresses. These are two different addresses to the same management + controller. So you may have a total of 4 IP addresses to an IPMI +-domain, two management controllers and two IP adresses to each ++domain, two management controllers and two IP addresses to each + management controller. + + .SH OPTIONS +@@ -174,12 +174,12 @@ turns events on or off from the sensor (\fB0\fP or \fB1\fP). + turns scanning on or off for the sensor (\fB0\fP or \fB1\fP). + .I "assertion-bitmask" + specifies the bitmask of thresholds or states +-that should be enabled or disabled when a thrshold or state is ++that should be enabled or disabled when a threshold or state is + asserted. It is a bunch of 0's and 1's, where the first one is for + threshold/state 0, the second for threshold/state 1, etc. + .I "deassertion-bitmask" + specifies the bitmask of thresholds or states +-that should be enabled or disabled when a thrshold or state is ++that should be enabled or disabled when a threshold or state is + deasserted. + + .SH CONTROLS +diff --git a/man/openipmi_conparms.7 b/man/openipmi_conparms.7 +index 587da2a..9dc6404 100644 +--- a/man/openipmi_conparms.7 ++++ b/man/openipmi_conparms.7 +@@ -1,7 +1,7 @@ + .TH openipmi_conparms 7 05/13/03 OpenIPMI "Connection Parameters for OpenIPMI" + + .SH NAME +-openipmi_cmdparms \- Connection parmeters for OpenIPMI ++openipmi_cmdparms \- Connection parameters for OpenIPMI + + .SH SYNOPSIS + +@@ -97,7 +97,7 @@ use. + .TP + .BI \-Rc\ confidentiality\ algorithm + The \fIRMCP+ confidentiality (encryption) algorithm\fP to use. This keeps +-evesdroppers from seeing the data. Valid values are: \fBbmcpick\fP, ++eavesdroppers from seeing the data. Valid values are: \fBbmcpick\fP, + \fBaes_cbc_128\fP, \fBxrc4_128\fP, and \fBxrc_40\fP. The \fBbmcpick\fP option is used by + default, which means the BMC picks the algorithm it wants to use. + +diff --git a/man/openipmicmd.1 b/man/openipmicmd.1 +index 6bd2401..5d206d1 100644 +--- a/man/openipmicmd.1 ++++ b/man/openipmicmd.1 +@@ -22,7 +22,7 @@ interfaces. + Execute a single command an exit. + + .TP +-.BI ++.BI + The parameters for the connection depend on the connection type. + These are all described in openipmi_conparms (7) + +@@ -32,7 +32,7 @@ Once up, you can execute commands in the user interface. Note that + commands and responses are asynchronous, you issue a command and the + interface returns immediately. When the response comes back, it will + be dumped on your console. That's a little strange looking, but IPMI +-is ansychronous underneath. Note that the \fB\-k\fP option is synchronous, ++is asynchronous underneath. Note that the \fB\-k\fP option is synchronous, + it will wait for the response or a timeout before returning. + + .TP +@@ -82,7 +82,7 @@ Remove a command registration. + .BR openipmi_conparms (7) + + .SH "KNOWN PROBLEMS" +-The asychronous nature of the program can be annoying. ++The asynchronous nature of the program can be annoying. + + .SH AUTHOR + .PP +diff --git a/man/openipmigui.1 b/man/openipmigui.1 +index 04f880b..0c8c10f 100644 +--- a/man/openipmigui.1 ++++ b/man/openipmigui.1 +@@ -38,7 +38,7 @@ Turn on message debugging, this will dump all messages to debug log output. + .TP + .B \-\-drawmsg + Turn on raw message debugging, this will dump all low-level messages to +-debug log output. This differes from normal message debugging in that all ++debug log output. This differs from normal message debugging in that all + protocol messages are also dumped, not just IPMI messages. + .TP + .B \-\-dmem +@@ -81,7 +81,7 @@ tree. + + The tree window has a top-level list of all the domains for which + OpenIPMI has connections (or pending connection). Each domain +-exapands into domain-specific information and a list of entities and ++expands into domain-specific information and a list of entities and + Management Controllers (MCs) for that domain. + + Right click drives most of the operations in the tree window. Many +@@ -92,7 +92,7 @@ Color is used in the GUI to denote error status, and shading is used + to denote availability. If a sensor has an error, the tree entry for + that sensor will change colors. Black means no error, yellow means + warning, red means critical, and blue means non-recoverable. These +-errors propigate up, so the entity containing that sensor will be the ++errors propagate up, so the entity containing that sensor will be the + same color as the most critical error for the sensors underneath it. + The same goes for domain, it will be the same color as the most + critical error for the entities underneath it. This way, if you watch +@@ -146,7 +146,7 @@ that sensor. + + .SH CONTROLS + +-Controls are available under the entity they belong to. control ++Controls are available under the entity they belong to. Control + information is beyond the scope of this document, as IPMI controls are + very complex. See the IPMI document from OpenIPMI for information + about controls. +@@ -214,7 +214,7 @@ channel listing. Note that some user setting (the name and password) + are global to all channels on the MC. + + Due to the IPMI spec and some unfortunate implementation bugs, some +-wierd issues exist with this information. The user has an Enabled ++weird issues exist with this information. The user has an Enabled + value that tells whether the user is enabled or not. When initially + displayed, this field shows as a "?" because this field is not + readable. It will displayed as the actual value when it is modified, +@@ -247,7 +247,7 @@ changed. + .SH SOLPARMS + + In the channel display on a 8023_LAN channel, a LANPARM configuration +-command is available if the MC supporte SOL (Serial Over LAN). This ++command is available if the MC supports SOL (Serial Over LAN). This + pulls up all the parameters for the LAN and allows them to be set. + Right-clicking on an item allows it to be changed. + +diff --git a/man/openipmish.1 b/man/openipmish.1 +index 36b1e43..2c902e4 100644 +--- a/man/openipmish.1 ++++ b/man/openipmish.1 +@@ -26,7 +26,7 @@ Turn on message debugging, this will dump all messages to debug log output. + .TP + .B \-\-drawmsg + Turn on raw message debugging, this will dump all low-level messages to +-debug log output. This differes from normal message debugging in that all ++debug log output. This differs from normal message debugging in that all + protocol messages are also dumped, not just IPMI messages. + .TP + .B \-\-dmem +@@ -34,11 +34,21 @@ Turn on memory debugging, this will cause memory allocation and + deallocations to be checked. When the program terminates, it will + dump all memory that was not properly freed (leaked). + .TP ++.B \-\-dmsgerr ++Turn on printing out low-level message errors. ++.TP + .B \-\-dlock + Turn on lock debugging, this will check lock operations to make sure + that locks are help in all the proper places and make sure that locks + are properly nested. + .TP ++\fB-x\fR\ ,\ \fB\-\-execute\fR\ ++Execute the given string at startup. This may be entered multiple times ++for multiple commands. ++.TP ++.B \-\-glib ++Use glib for the OS handler. ++.TP + .B \-\-snmp + Enable the SNMP trap handler. + .B openipmish +diff --git a/man/rmcp_ping.1 b/man/rmcp_ping.1 +index d60019a..ce5cab0 100644 +--- a/man/rmcp_ping.1 ++++ b/man/rmcp_ping.1 +@@ -38,7 +38,7 @@ starttag. This is zero by default + Turns on debugging to standard output. + .TP + .I destination +-The target address, default is the boradcast address (default 255.255.255.255) ++The target address, default is the broadcast address (default 255.255.255.255) + + .SH AUTHOR + .PP +diff --git a/man/solterm.1 b/man/solterm.1 +index 1479a1b..ada15d8 100644 +--- a/man/solterm.1 ++++ b/man/solterm.1 +@@ -37,9 +37,9 @@ These are all described in openipmi_conparms (7) + .TP + .BI \-e\ escape_char + The character to use to escape, or exit, the program. Entering this +-chatacter right after a newline is entered causes the program to go ++character right after a newline is entered causes the program to go + into command mode. A single character after this performs a command. +-The default escape character is "~" as shown below. Suppported ++The default escape character is "~" as shown below. Supported + commands are: + .RS + .IP ~. +@@ -98,7 +98,7 @@ the SoL session. This is the default. + .TP + .BI \-holdoff + Specifies that CTS, DTR, and DSR are to be deasserted at the start of +-the SoL session so that the configuration may be modifeid before the ++the SoL session so that the configuration may be modified before the + handshake is released. + + .TP +diff --git a/sample/ipmicmd.c b/sample/ipmicmd.c +index 6cbcdc5..5f5c1ec 100644 +--- a/sample/ipmicmd.c ++++ b/sample/ipmicmd.c +@@ -124,6 +124,7 @@ void usage(void) + printf("%s [-k ] [-v] \n", progname); + printf("Where is one of:"); + ipmi_parse_args_iter_help(con_usage, NULL); ++ printf("\n"); + } + + char * +diff --git a/sample/rmcp_ping.c b/sample/rmcp_ping.c +index 7814792..5778fea 100644 +--- a/sample/rmcp_ping.c ++++ b/sample/rmcp_ping.c +@@ -156,6 +156,11 @@ main(int argc, char *argv[]) + if (strcmp(argv[i], "--") == 0) { + i++; + break; ++ } else if ((strcmp(argv[i], "--help") == 0) || ++ (strcmp(argv[i], "-?") == 0) || ++ (strcmp(argv[i], "-h") == 0)) { ++ i++; ++ usage(); + } else if (strcmp(argv[i], "-p") == 0) { + i++; + if (i >= argc) { +diff --git a/sample/solterm.c b/sample/solterm.c +index 38a3f9d..a3e52de 100644 +--- a/sample/solterm.c ++++ b/sample/solterm.c +@@ -743,7 +743,12 @@ int main(int argc, char *argv[]) + + /* Now we make sure "lan" is the first argument so we get the + right connection type... */ +- if (strcmp(argv[1], "lan") != 0) { ++ if ((strcmp(argv[1], "-h") == 0) || ++ (strcmp(argv[1], "--help") == 0) || ++ (strcmp(argv[1], "-?") == 0)) { ++ usage(); ++ exit(1); ++ } else if (strcmp(argv[1], "lan") != 0) { + fprintf(stderr, "main: %s only supports lan connections\n", + progname); + exit(1); +diff --git a/ui/basic_ui.c b/ui/basic_ui.c +index 6993eb2..84889cb 100644 +--- a/ui/basic_ui.c ++++ b/ui/basic_ui.c +@@ -306,6 +306,26 @@ snmp_init(os_handler_t *os_hnd) + static void snmp_setup_fds(os_handler_t *os_hnd) { } + #endif /* HAVE_UCDSNMP */ + ++void help(void) ++{ ++ fprintf(stdout, "ipmi_ui [ options ] smi smi-num\n"); ++ fprintf(stdout, "ipmi_ui [ oprions ] lan IP port [IP2 port2] auth priv user pass\n"); ++ fprintf(stdout, "\n"); ++ fprintf(stdout, "Options:\n"); ++ fprintf(stdout, " -c Command line mode\n"); ++ fprintf(stdout, " -dlock Lock debugging ON\n"); ++ fprintf(stdout, " -dmem Memory debugging ON\n"); ++ fprintf(stdout, " -drawmsg Raw message ON\n"); ++ fprintf(stdout, " -dmsg Dump all messages.\n"); ++#ifdef HAVE_UCDSNMP ++ fprintf(stdout, " -snmp SNMP trap handler ON\n"); ++#endif ++ fprintf(stdout, "Auth:\n"); ++ fprintf(stdout, " none | straight | md5 | md2\n"); ++ fprintf(stdout, "Priv:\n"); ++ fprintf(stdout, " callback | user | operator | admin\n"); ++} ++ + int + main(int argc, char *argv[]) + { +@@ -327,6 +347,11 @@ main(int argc, char *argv[]) + curr_arg++; + if (strcmp(arg, "--") == 0) { + break; ++ } else if (strcmp(arg, "-?") == 0 || ++ strcmp(arg, "-h") == 0 || ++ strcmp(arg, "--help") == 0) { ++ help(); ++ return(1); + } else if (strcmp(arg, "-c") == 0) { + full_screen = 0; + } else if (strcmp(arg, "-dlock") == 0) { +-- +2.7.4 + diff --git a/EMPTY b/EMPTY deleted file mode 100644 index 0519ecb..0000000 --- a/EMPTY +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/OpenIPMI-collectd.patch b/OpenIPMI-collectd.patch new file mode 100644 index 0000000..0ddfaf8 --- /dev/null +++ b/OpenIPMI-collectd.patch @@ -0,0 +1,12 @@ +diff -urNp a/unix/posix_thread_os_hnd.c b/unix/posix_thread_os_hnd.c +--- a/unix/posix_thread_os_hnd.c 2021-08-02 15:36:49.536860558 +0200 ++++ b/unix/posix_thread_os_hnd.c 2021-08-02 15:38:48.990041616 +0200 +@@ -140,8 +140,6 @@ add_fd(os_handler_t *handler, + fd_data->data_ready = data_ready; + fd_data->handler = handler; + fd_data->freed = freed; +- sel_set_fd_write_handler(posix_sel, fd, SEL_FD_HANDLER_DISABLED); +- sel_set_fd_except_handler(posix_sel, fd, SEL_FD_HANDLER_DISABLED); + rv = sel_set_fd_handlers(posix_sel, fd, fd_data, fd_handler, NULL, NULL, + free_fd_data); + if (rv) { diff --git a/OpenIPMI.spec b/OpenIPMI.spec new file mode 100644 index 0000000..4c7151c --- /dev/null +++ b/OpenIPMI.spec @@ -0,0 +1,629 @@ +%global _hardened_build 1 + +Summary: IPMI (Intelligent Platform Management Interface) library and tools +Name: OpenIPMI + +Version: 2.0.31 +Release: 3%{?dist} +License: LGPLv2+ and GPLv2+ or BSD +URL: http://sourceforge.net/projects/openipmi/ +Source: http://downloads.sourceforge.net/openipmi/%{name}-%{version}.tar.gz +Source1: openipmi.sysconf +Source2: openipmi-helper +Source3: ipmi.service +Patch1: 0001-man.patch +Patch4: OpenIPMI-collectd.patch +Patch5: restore-api-compatibility.patch + +BuildRequires: gdbm-devel swig glib2-devel net-snmp-devel ncurses-devel +BuildRequires: openssl-devel python3-devel perl-devel perl-generators +BuildRequires: pkgconfig +BuildRequires: readline-devel +BuildRequires: automake +BuildRequires: autoconf +BuildRequires: libtool +%{?systemd_requires} +BuildRequires: systemd + +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + + +%description +The Open IPMI project aims to develop an open code base to allow access to +platform information using Intelligent Platform Management Interface (IPMI). +This package contains the tools of the OpenIPMI project. + +%package libs +Summary: The OpenIPMI runtime libraries + +%description libs +The OpenIPMI-libs package contains the runtime libraries for shared binaries +and applications. + +%package perl +Summary: IPMI Perl language bindings +Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description perl +The OpenIPMI-perl package contains the Perl language bindings for OpenIPMI. + +%package -n python3-openipmi +%{?python_provide:%python_provide python3-openipmi} +%{?python_provide:%python_provide python3-OpenIPMI} +# Remove before F30 +Provides: %{name}-python = %{version}-%{release} +Provides: %{name}-python%{?_isa} = %{version}-%{release} +Obsoletes: %{name}-python2 < %{version}-%{release} +Summary: IPMI Python language bindings +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description -n python3-openipmi +The OpenIPMI-python package contains the Python language bindings for OpenIPMI. + +%package devel +Summary: The development environment for the OpenIPMI project +Requires: pkgconfig +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{version}-%{release} +Requires: %{name}-lanserv%{?_isa} = %{version}-%{release} + +%description devel +The OpenIPMI-devel package contains the development libraries and header files +of the OpenIPMI project. + +%package lanserv +Summary: Emulates an IPMI network listener +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description lanserv +This package contains a network IPMI listener. + + +%prep +%autosetup -p1 + +%build +# Patch5 changes Makefile.am +%{__automake} --add-missing --copy --foreign + +%configure \ + CFLAGS="-fPIC %{optflags} -z now -fno-strict-aliasing" \ + LDFLAGS="%{__global_ldflags} -Wl,--as-needed" \ + --disable-dependency-tracking \ + --disable-static \ + --with-pythoninstall=%{python3_sitearch} \ + --with-python=%{__python3} \ + --with-tcl=no \ + --with-tkinter=no + +# https://fedoraproject.org/wiki/Packaging:Guidelines?rd=Packaging/Guidelines#Beware_of_Rpath +# get rid of rpath still present in OpenIPMI-perl package +sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool +sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool + +make # not %%{?_smp_mflags} safe + +%install +make install DESTDIR=%{buildroot} + +install -d %{buildroot}{%{_sysconfdir}/sysconfig,%{_unitdir},%{_libexecdir}} +install -m 644 %SOURCE1 %{buildroot}%{_sysconfdir}/sysconfig/ipmi +install -m 755 %SOURCE2 %{buildroot}%{_libexecdir}/openipmi-helper +install -m 644 %SOURCE3 %{buildroot}%{_unitdir}/ipmi.service +install -d %{buildroot}%{_sysconfdir}/modprobe.d + +rm %{buildroot}/%{_mandir}/man1/openipmigui.1 %{buildroot}%{_libdir}/*.la + +# add missing documentation +echo ".so man1/ipmicmd.1" > %{buildroot}%{_mandir}/man1/ipmicmd.1 +echo ".so man1/openipmish.1" > %{buildroot}%{_mandir}/man1/ipmish.1 + +%post +%systemd_post ipmi.service + +%preun +%systemd_preun ipmi.service + +%postun +%systemd_postun_with_restart ipmi.service + +%ldconfig_scriptlets libs +%ldconfig_scriptlets lanserv + +### A sysv => systemd migration contains all of the same scriptlets as a +### systemd package. These are additional scriptlets + +%triggerun -- OpenIPMI < 2.0.18-14 +# Save the current service runlevel info +# User must manually run systemd-sysv-convert --apply httpd +# to migrate them to systemd targets +/usr/bin/systemd-sysv-convert --save ipmi >/dev/null 2>&1 ||: +/bin/systemctl --no-reload enable ipmi.service >/dev/null 2>&1 ||: +# Run these because the SysV package being removed won't do them +/sbin/chkconfig --del ipmi >/dev/null 2>&1 || : +/bin/systemctl try-restart ipmi.service >/dev/null 2>&1 || : + +%files +%license COPYING COPYING.BSD COPYING.LIB +%doc CONFIGURING_FOR_LAN FAQ README README.Force README.MotorolaMXP +%config(noreplace) %{_sysconfdir}/sysconfig/ipmi +%{_libexecdir}/openipmi-helper +%{_bindir}/ipmicmd +%{_bindir}/ipmish +%{_bindir}/ipmi_ui +%{_bindir}/openipmicmd +%{_bindir}/openipmish +%{_bindir}/rmcp_ping +%{_bindir}/solterm +%{_bindir}/openipmi_eventd +%{_unitdir}/ipmi.service +%{_mandir}/man1/ipmi_ui* +%{_mandir}/man1/openipmicmd* +%{_mandir}/man1/openipmish* +%{_mandir}/man1/rmcp_ping* +%{_mandir}/man1/solterm* +%{_mandir}/man1/ipmish* +%{_mandir}/man1/ipmicmd* +%{_mandir}/man1/openipmi_eventd* +%{_mandir}/man7/ipmi_cmdlang* +%{_mandir}/man7/openipmi_conparms* + +%files perl +%attr(644,root,root) %{perl_vendorarch}/OpenIPMI.pm +%{perl_vendorarch}/auto/OpenIPMI + +%files -n python3-openipmi +%{python3_sitearch}/*OpenIPMI* +%{python3_sitearch}/__pycache__/OpenIPMI.*.pyc + +%files libs +%{_libdir}/libOpenIPMI*.so.* + +%files devel +%{_includedir}/OpenIPMI +%{_libdir}/*.so +%{_libdir}/pkgconfig/*.pc + +%files lanserv +%config(noreplace) %{_sysconfdir}/ipmi/ipmisim1.emu +%config(noreplace) %{_sysconfdir}/ipmi/lan.conf +%dir %{_sysconfdir}/ipmi +%{_bindir}/ipmilan +%{_bindir}/ipmi_sim +%{_bindir}/sdrcomp +%{_libdir}/libIPMIlanserv.so.* +%{_mandir}/man8/ipmilan.8* +%{_mandir}/man1/ipmi_sim.1* +%{_mandir}/man5/ipmi_lan.5* +%{_mandir}/man5/ipmi_sim_cmd.5* + +%changelog +* Fri Aug 27 2021 Pavel Cahyna - 2.0.31-3 +- Resolve issues found by rpmdiff + - add explicit Requires: on subpackages to avoid the need to test + interoperability between the various combinations of old and new + subpackages + - add code to restore binary compatibility in libIPMIlanserv.so + and libOpenIPMIcmdlang.so broken in 2.0.31, while keeping + compatibility with 2.0.31 as well. + +* Fri Aug 6 2021 Pavel Cahyna - 2.0.31-2 +- fix collectd-ipmi crash (#1990072) + +* Fri Jul 9 2021 Pavel Cahyna - 2.0.31-1 +- New upstream release 2.0.31 (#1923044) + +* Wed Nov 18 2020 Josef Ridky - 2.0.29-1 +- New upstream release 2.0.29 (#1796588) + +* Tue Oct 08 2019 Vaclav Dolezal - 2.0.27-1 +- New upstream release 2.0.27 + +* Thu Aug 09 2018 Josef Ridky - 2.0.25-4 +- Rebuild for Net-SNMP + +* Mon Jul 30 2018 Florian Weimer - 2.0.25-3 +- Rebuild with fixed binutils + +* Wed Jul 25 2018 Petr Kubat - 2.0.25-2 +- Rebuilt for gdbm + +* Fri Apr 20 2018 Josef Ridky - 2.0.25-1 +- New upstream release 2.0.25 (#1568194) +- Replace Python2 with Python3 +- Drop OpenIPMI-python2 and set it as Obsolete +- Introduce new OpenIPMI-python3 package +- use ldconfig macros +- remove old systemd dependencies +- use autosetup + +* Wed Aug 02 2017 Fedora Release Engineering - 2.0.23-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.0.23-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Jun 15 2017 Josef Ridky - 2.0.23-1 +- New upstream release 2.0.23 (#1461606) + +* Sun Jun 04 2017 Jitka Plesnikova - 2.0.22-6 +- Perl 5.26 rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 2.0.22-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Oct 17 2016 Josef Ridky - 2.0.22-4 +- Add support for openssl-1.1.0 library (#1383995) + +* Tue Jul 19 2016 Fedora Release Engineering - 2.0.22-3 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Fri Jul 15 2016 Boris Ranto - 0:2.0.22-2 +- Rebuild for glibc hack + +* Thu Jun 02 2016 Boris Ranto - 0:2.0.22-1 +- New version (0:2.0.22-1) +- Apply 'OpenIPMI-2.0.18-pthread-pkgconfig.patch' +- Apply './OpenIPMI-2.0.19-man.patch' +- Apply 'OpenIPMI-2.0.21-nobundle.patch' + +* Tue May 17 2016 Jitka Plesnikova - 2.0.21-13 +- Perl 5.24 rebuild + +* Wed Feb 03 2016 Fedora Release Engineering - 2.0.21-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Dec 09 2015 Boris Ranto - 2.0.21-11 +- Avoid warning on update/removal (#1256798) + +* Tue Nov 24 2015 Boris Ranto - 2.0.21-10 +- Remove duplicities in filelists + +* Tue Jun 16 2015 Fedora Release Engineering - 2.0.21-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Jun 05 2015 Jitka Plesnikova - 2.0.21-8 +- Perl 5.22 rebuild + +* Wed Apr 22 2015 Ales Ledvinka - 2.0.21-7 +- Remove modalias subpackage. + +* Tue Aug 26 2014 Jitka Plesnikova - 2.0.21-6 +- Perl 5.20 rebuild + +* Fri Aug 15 2014 Fedora Release Engineering - 2.0.21-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Aug 12 2014 Ledvinka Ales - 2.0.21-4 +- Use system libedit instead of the old one bundled with source. + +* Fri Jun 06 2014 Fedora Release Engineering - 2.0.21-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 13 2014 Jaromir Capik - 2.0.21-2 +- Fixing FTBFS due to unpackaged files (#1075696) + +* Wed Jan 29 2014 Ledvinka Ales - 2.0.21-1 +- Update to new upstream (fixed case 2nd) release. + +* Tue Jan 14 2014 Ledvinka Ales - 2.0.19-11 +- Probe modules on installation. Do not wait until reboot. + +* Wed Nov 13 2013 Ledvinka Ales - 2.0.19-10 +- Correct aliases matching module strings. + +* Tue Nov 05 2013 Fedora Release Engineering - 2.0.19-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Fri Aug 02 2013 Fedora Release Engineering - 2.0.19-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Fri Jul 19 2013 Ledvinka Ales - 2.0.19-7 +- Hint compilation to avoid strict aliasing and prevent type-punned pointer issues. +- Fix rPath regression for OpenIPMI-perl library. + +* Wed Jul 17 2013 Petr Pisar - 2.0.19-6 +- Perl 5.18 rebuild + +* Tue Jun 4 2013 Ledvinka Ales - 2.0.19-5 +- Support aarch64 by replicating release toolchain. +- Configuration subpackage with kernel probed wildcard module aliases. + as workaround for bz#961878 and fesco#1110 +- Man pages symlinks same as bin symlinks. +- ipmi_ui command help argument. +- ipmilan missing options. +- Fixed build requirements. + +* Thu Apr 25 2013 Ledvinka Ales - 2.0.19-4 +- rpmdiff fixes + +* Wed Feb 13 2013 Fedora Release Engineering - 2.0.19-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Aug 27 2012 Jan Safranek - 2.0.19-2 +- Updated RPM scriptlets with latest systemd-rpm macros (#850246) +- Fixed fedora-review tool complaints + +* Wed Aug 8 2012 Jan Safranek - 2.0.19-1 +- Update to 2.0.19 + +* Wed Jul 18 2012 Fedora Release Engineering - 2.0.18-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jun 11 2012 Petr Pisar - 2.0.18-15 +- Perl 5.16 rebuild + +* Mon May 7 2012 Jan Safranek - 2.0.18-14 +- Added ipmi systemd unit + +* Thu Jan 12 2012 Fedora Release Engineering - 2.0.18-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Thu Jul 21 2011 Petr Sabata - 2.0.18-12 +- Perl mass rebuild + +* Wed Jul 20 2011 Petr Sabata - 2.0.18-11 +- Perl mass rebuild + +* Fri Jul 8 2011 Jan Safranek - 2.0.18-10 +- Rebuilt for new Net-SNMP + +* Fri Jun 17 2011 Marcela Mašláňová - 2.0.18-9 +- Perl mass rebuild + +* Fri Jun 10 2011 Marcela Mašláňová - 2.0.18-8 +- Perl 5.14 mass rebuild + +* Mon Feb 07 2011 Fedora Release Engineering - 2.0.18-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Nov 1 2010 Jan Safranek - 2.0.18-6 +- Removed the openipmigui tool, it does not work with TCL without thread + support (#646184) + +* Tue Oct 26 2010 Jan Safranek - 2.0.18-5 +- Rebuilt for new Net-SNMP + +* Wed Jul 21 2010 David Malcolm - 2.0.18-4 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Thu Jul 8 2010 Jan Safranek - 2.0.18-3 +- added lincense files to OpenIPMI-libs subpackage as requested by + Fedora Licensing Guidelines + +* Tue Jun 01 2010 Marcela Maslanova - 2.0.18-2 +- Mass rebuild with perl-5.12.0 + +* Wed May 5 2010 Jan Safranek - 2.0.18-1 +- updated to OpenIPMI-2.0.18 +- fixed OpenIPMIpthread pkgconfig file (#468067) + +* Mon May 3 2010 Jan Safranek - 2.0.17-1 +- updated to OpenIPMI-2.0.17 + +* Thu Mar 18 2010 Jan Safranek - 2.0.16-12 +- implemented mandatory 'force-reload' command in ipmi service + +* Thu Mar 11 2010 Jan Safranek - 2.0.16-11 +- rebuild against new gdbm + +* Wed Mar 3 2010 Jan Safranek - 2.0.16-10 +- add README.initscript describing /etc/init.d/ipmi initscript exit codes + (#562151) + +* Mon Feb 22 2010 Jan Safranek - 2.0.16-9 +- fix package License: field, there *are* sources with BSD header +- distribute README files and COPYING in package + +* Tue Jan 5 2010 Jan Safranek - 2.0.16-8 +- fix package License: field, there is no source with BSD header + +* Mon Dec 7 2009 Stepan Kasal - 2.0.16-7 +- rebuild against perl 5.10.1 + +* Tue Dec 1 2009 Jan Safranek - 2.0.16-6 +- fix package compilation to remove rpmlint errors + +* Wed Sep 30 2009 Jan Safranek - 2.0.16-5 +- rebuilt with new net-snmp + +* Fri Aug 21 2009 Tomas Mraz - 2.0.16-4 +- rebuilt with new openssl + +* Fri Jul 24 2009 Fedora Release Engineering - 2.0.16-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Apr 15 2009 Jan Safranek - 2.0.16-2 +- fix compilation flags, debuginfo package is correctly generated now + +* Thu Mar 19 2009 Jan Safranek - 2.0.16-1 +- new upstream release + +* Mon Feb 23 2009 Fedora Release Engineering - 2.0.14-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sat Jan 17 2009 Tomas Mraz - 2.0.14-10 +- rebuild with new openssl + +* Thu Dec 11 2008 Jan Safranek - 2.0.14-9 +- fix linking without rpath, prelink won't screw up the libraries + anymore (#475265) + +* Wed Dec 10 2008 Jan Safranek - 2.0.14-8 +- shorter probe interval is used in init script, making the service startup + quicker in most situations (#475101) + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 2.0.14-7 +- Rebuild for Python 2.6 + +* Thu Oct 30 2008 Jan Safranek - 2.0.14-6 +- removed static libraries from the -devel subpackage +- fixed openipmigui.desktop file + +* Thu Oct 23 2008 Jan Safranek - 2.0.14-5 +- fixed typos in the descriptions +- added .desktop file for openipmigui tool + +* Mon Oct 20 2008 Jan Safranek - 2.0.14-4 +- fixed description of the package + +* Thu Oct 16 2008 Jan Safranek - 2.0.14-3 +- split ipmitool to separate package +- added 'reload' functionality to init script +- added seraparate -gui subpackage + +* Wed Jul 30 2008 Phil Knirsch - 2.0.14-2 +- Fixed rpath problem in libOpenIPMIposix.so.0.0.1 + +* Tue Jul 29 2008 Phil Knirsch - 2.0.14-1 +- Fixed several specfile problems (#453751) +- Update to OpenIPMI-2.0.14 + +* Tue Feb 19 2008 Fedora Release Engineering - 2.0.13-2 +- Autorebuild for GCC 4.3 + +* Wed Dec 05 2007 Phil Knirsch - 2.0.13-1 +- Updated to OpenIPMI-2.0.13 +- Rebuild due to new openssl + +* Wed Oct 10 2007 Phil Knirsch - 2.0.11-3 +- Added missing perl-devel buildrequires + +* Mon Sep 24 2007 Phil Knirsch - 2.0.11-2 +- Added missing popt-devel buildrequires + +* Fri Aug 17 2007 Phil Knirsch - 2.0.11-2 +- Fix rebuild problems due to glibc change +- License review and fixes + +* Tue Apr 24 2007 Phil Knirsch - 2.0.11-1 +- Update to OpenIPMI-2.0.11 + +* Tue Feb 27 2007 Phil Knirsch - 2.0.6-8 +- Update for ipmitool-1.8.9 + +* Thu Dec 7 2006 Jeremy Katz - 2.0.6-7 +- rebuild for python 2.5 + +* Tue Nov 28 2006 Phil Knirsch - 2.0.6-6.fc7 +- Update due to new net-snmp-5.4 +- Some specfile updates + +* Tue Jul 18 2006 Phil Knirsch - 2.0.6-5 +- Fixed check for udev in initscript (#197956) + +* Wed Jul 12 2006 Jesse Keating - 2.0.6-4.1 +- rebuild + +* Fri Jun 16 2006 Bill Nottingham 2.0.6-4 +- don't include + +* Fri Jun 16 2006 Jon Masters 2.0.6-3 +- Fix a build requires (needs glibc-kernheaders) + +* Thu Jun 15 2006 Jesse Keating 2.0.6-2 +- Bump for new glib2 + +* Tue May 16 2006 Phil Knirsch 2.0.6-1 +- Fixed bug with type conversion in ipmitool (#191091) +- Added python bindings +- Split off perl and python bindings in separate subpackages +- Dropped obsolete patches +- Added missing buildprereq on readline-devel +- Made it install the python bindings properly on 64bit archs + +* Mon May 15 2006 Phil Knirsch +- Updated ipmitool to 1.8.8 +- Updated OpenIPMI to 2.0.6 + +* Fri Feb 17 2006 Phil Knirsch 1.4.14-19 +- Added missing PreReq for chkconfig + +* Mon Feb 13 2006 Jesse Keating - 1.4.14-18.2.1 +- rebump for build order issues during double-long bump + +* Fri Feb 10 2006 Jesse Keating - 1.4.14-18.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.4.14-18.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Feb 06 2006 Phil Knirsch 1.4.14-18 +- Updated ipmitool to latest upstream version. +- Removed 3 patches for already fixed bugs in latest ipmitool. +- Adapted warning message fix for ipmitool for latest version. + +* Tue Jan 24 2006 Phil Knirsch 1.4.14-17 +- Fixed some minor things in initscripts. + +* Mon Jan 09 2006 Phil Knirsch 1.4.14-16 +- Included FRU fix for displaying FRUs with ipmitool +- Included patch for new option to specify a BMC password for IPMI 2.0 sessions + +* Tue Jan 03 2006 Radek Vokal 1.4.14-15 +- Rebuilt against new libnetsnmp + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Nov 23 2005 Phil Knirsch 1.4.14-14 +- Some more initscript and sysconfig updates from Dell. + +* Wed Nov 09 2005 Phil Knirsch 1.4.14-13 +- Rebuilt to link against latest openssl libs. +- Fixed ipmitool not setting session privilege level (#172312) + +* Wed Nov 02 2005 Phil Knirsch 1.4.14-11 +- Rebuild to link against new net-snmp libs. + +* Tue Oct 11 2005 Phil Knirsch 1.4.14-10 +- Updated initscript to fix missing redhat-lsb bug (#169901) + +* Thu Sep 08 2005 Phil Knirsch 1.4.14-9 +- Another update to latest initscripts from Dell +- Fixed some missing return statements for non-void functions (#164138) + +* Thu Sep 01 2005 Phil Knirsch 1.4.14-8 +- Updated initscript to latest version from Dell + +* Fri Aug 12 2005 Phil Knirsch 1.4.14-7 +- Fixed the unwanted output of failed module loading of the initscript. Behaves + now like all our other initscripts (#165476) + +* Fri Aug 05 2005 Phil Knirsch 1.4.14-6 +- Fixed build problem on 64bit machines + +* Fri Jul 15 2005 Phil Knirsch 1.4.14-5 +- Fixed missing change to not autostart in the initscript + +* Wed Jul 06 2005 Phil Knirsch 1.4.14-4 +- Made the initscript a replacing configfile + +* Mon Jul 04 2005 Phil Knirsch 1.4.14-3 +- Updated versions of the initscripts and sysconf files +- Fixed typo in preun script and changelog + +* Mon Jun 27 2005 Phil Knirsch 1.4.14-2 +- Updated to OpenIPMI-1.4.14 +- Split the main package into normal and libs package for multilib support +- Added ipmitool-1.8.2 to OpenIPMI and put it in tools package +- Added sysconf and initscript (#158270) +- Fixed oob subscripts (#149142) + +* Wed Mar 30 2005 Phil Knirsch 1.4.11-5 +- Correctly put libs in the proper packages + +* Thu Mar 17 2005 Phil Knirsch 1.4.11-4 +- gcc4 rebuild fixes +- Added missing gdbm-devel buildprereq + +* Wed Mar 02 2005 Phil Knirsch 1.4.11-3 +- bump release and rebuild with gcc 4 + +* Tue Feb 08 2005 Karsten Hopp 1.4.11-2 +- update + +* Tue Oct 26 2004 Phil Knirsch +- Initial version diff --git a/ipmi.service b/ipmi.service new file mode 100644 index 0000000..fa14993 --- /dev/null +++ b/ipmi.service @@ -0,0 +1,12 @@ +[Unit] +Description=IPMI Driver +After=network.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/libexec/openipmi-helper start +ExecStop=/usr/libexec/openipmi-helper stop + +[Install] +WantedBy=multi-user.target diff --git a/openipmi-helper b/openipmi-helper new file mode 100644 index 0000000..4cebfb9 --- /dev/null +++ b/openipmi-helper @@ -0,0 +1,512 @@ +#!/bin/sh +############################################################################# +# +# ipmi: OpenIPMI Driver helper script +# +# Authors: Jan Safranek +# +# Based on IPMI init script by: +# Matt Domsch +# Chris Poblete +# +# Status return code bits +# no bits set = no errors +# bit 0 set = minimum modules aren't loaded +# bit 1 set = requested feature module isn't loaded +# bit 2 set = /dev/ipmi0 (or /dev/imb if using that instead) doesn't exist +# bit 3 set = /dev/watchdog doesn't exist +# bit 4 set = lockfile doesn't exist +# bit 5 set = modules are loaded even when asked to be unloaded + +CONFIGFILE=/etc/sysconfig/ipmi +# source config info +[ -r ${CONFIGFILE} ] && . ${CONFIGFILE} + +############################################################################# +# GLOBALS +############################################################################# +MODULE_NAME="ipmi" +INTF_NUM=0 + +IPMI_SMB_MODULE_NAME="ipmi_smb" +IPMI_SI_MODULE_NAME="ipmi_si" +kernel=`uname -r | cut -d. -f1-2` +if [ "${kernel}" == "2.4" ]; then + IPMI_SMB_MODULE_NAME="ipmi_smb_intf" + IPMI_SI_MODULE_NAME="ipmi_si_drv" +fi + +MODULES_INTERFACES="" +[ "${DEV_IPMI}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_devintf" +[ "${IPMI_IMB}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_imb" + +MODULES_FEATURES="" +[ "${IPMI_WATCHDOG}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_watchdog" +[ "${IPMI_POWEROFF}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_poweroff" + +MODULES_HW="" +[ "${IPMI_SI}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SI_MODULE_NAME}" +[ "${IPMI_SMB}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SMB_MODULE_NAME}" + +MODULES_BASE="ipmi_msghandler" +MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} ${MODULES_BASE}" + +RETVAL=0 +LOCKFILE=/var/lock/subsys/ipmi +DEV_IPMI_TIMEOUT=150 + +UDEV_EXISTS=0 +if [ -e /sbin/udev -o -e /sbin/udevd ]; then + UDEV_EXISTS=1 +fi + +############################################################################# +# NOTES: +# * /dev/ipmi0 is unconditionally deleted here on ipmi_devintf unload, +# because SLES9 and RHEL4 kernels don't send a message for udev to delete +# it for us. +# +############################################################################# + +modules_loaded_verbose() +{ + OnePlusLoaded=0 + OnePlusUnloaded=0 + for m in $@; do + if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then + echo "$m module loaded." + OnePlusLoaded=1 + else + echo "$m module not loaded." + OnePlusUnloaded=1 + fi + done +} + +modules_loaded() +{ + OnePlusLoaded=0 + OnePlusUnloaded=0 + for m in $@; do + if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then + OnePlusLoaded=1 + else + OnePlusUnloaded=1 + fi + done +} + +device_node_exists () +{ + if [ -e "$1" ]; then + echo "$1 exists." + return 1 + fi + echo "$1 does not exist." + return 0 +} + +minimum_modules_loaded() +{ + rc_base=1 + rc_hw=1 + modules_loaded_verbose "${MODULES_BASE}" + [ ${OnePlusLoaded} -eq 0 ] && rc_base=0 + + modules_loaded_verbose "${MODULES_HW}" + [ ${OnePlusLoaded} -eq 0 ] && rc_hw=0 + + return $((rc_base && rc_hw)) +} + +############################################################################# + +load_si() +{ + if [ "${IPMI_SI}" = "yes" ]; then + modprobe ${IPMI_SI_MODULE_NAME} > /dev/null 2>&1 + modules_loaded ${IPMI_SI_MODULE_NAME} + [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1)) + fi +} + +load_smb() +{ + if [ "${IPMI_SMB}" = "yes" ]; then + modprobe ${IPMI_SMB_MODULE_NAME} > /dev/null 2>&1 + modules_loaded ${IPMI_SMB_MODULE_NAME} + [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1)) + fi +} + +load_hw_modules() +{ + load_si + load_smb +} + +start_watchdog_common() +{ + load_hw_modules + modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1 + modules_loaded ipmi_watchdog + [ ${OnePlusUnloaded} -ne 0 ] && + RETVAL=$((RETVAL | 2)) && + echo "Watchdog startup failed: cannot load ipmi_watchdog module" && + return + if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then + mknod -m 0600 /dev/watchdog c 10 130 + [ $? -ne 0 ] && + RETVAL=$((RETVAL | 8)) && + echo "Watchdog startup failed: cannot create /dev/watchdog" && + return + fi +} + +start_watchdog_quiet() +{ + [ "${IPMI_WATCHDOG}" != "yes" ] && + return + start_watchdog_common +} + +start_watchdog() +{ + [ "${IPMI_WATCHDOG}" != "yes" ] && + RETVAL=$((RETVAL | 2)) && + echo "Watchdog not configured" && + return + start_watchdog_common +} + +stop_watchdog() +{ + modprobe -q -r ipmi_watchdog > /dev/null 2>&1 + modules_loaded ipmi_watchdog + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Watchog shutdown failed: cannot unload ipmi_watchdog module" + else + if [ "${IPMI_WATCHDOG}" = "yes" ]; then + [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog + fi + fi +} + +stop_watchdog_quiet() +{ + modprobe -q -r ipmi_watchdog > /dev/null 2>&1 + modules_loaded ipmi_watchdog + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + else + if [ "${IPMI_WATCHDOG}" = "yes" ]; then + [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog + fi + fi +} + +start_powercontrol_common() +{ + local poweroff_opts="" + load_hw_modules + if [ "${IPMI_POWERCYCLE}" == "yes" ]; then + modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > /dev/null 2>&1 && \ + poweroff_opts="poweroff_control=2" + modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > /dev/null 2>&1 && \ + poweroff_opts="poweroff_powercycle=1" + fi + modprobe ipmi_poweroff "${poweroff_opts}" > /dev/null 2>&1 + modules_loaded ipmi_poweroff + [ ${OnePlusUnloaded} -ne 0 ] && + RETVAL=$((RETVAL | 2)) && + echo "Powercontroll startup failed: cannot load ipmi_poweroff module" && + return +} + +start_powercontrol_quiet() +{ + [ "${IPMI_POWEROFF}" != "yes" ] && + return + start_powercontrol_common +} + +start_powercontrol() +{ + [ "${IPMI_POWEROFF}" != "yes" ] && + RETVAL=$((RETVAL | 2)) && + echo "Powercontroll not configured" && + return + start_powercontrol_common +} + +stop_powercontrol() +{ + modprobe -q -r ipmi_poweroff > /dev/null 2>&1 + modules_loaded ipmi_poweroff + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Powercontroll shutdown failed: cannot unload ipmi_poweroff module" + fi +} + +stop_powercontrol_quiet() +{ + modprobe -q -r ipmi_poweroff > /dev/null 2>&1 + modules_loaded ipmi_poweroff + [ ${OnePlusLoaded} -ne 0 ] && RETVAL=$((RETVAL | 32)) +} + +############################################################################# +unload_all_ipmi_modules() +{ + stop_watchdog_quiet + stop_powercontrol_quiet + for m in ${MODULES}; do + modprobe -q -r ${m} > /dev/null 2>&1 + done + # delete interface node ONLY if ipmi_devintf is unloaded + [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] && + rm -f "/dev/ipmi${INTF_NUM}" +} + +unload_ipmi_modules_leave_features() +{ + for m in ${MODULES_INTERFACES}; do + modprobe -q -r ${m} > /dev/null 2>&1 + done + # delete interface node ONLY if ipmi_devintf is unloaded + [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] && + rm -f "/dev/ipmi${INTF_NUM}" + lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1 + if [ "$?" -ne "0" ]; then + stop_watchdog_quiet + stop_powercontrol_quiet + for m in ${MODULES}; do + modprobe -q -r ${m} > /dev/null 2>&1 + done + fi +} + +############################################################################# +load_ipmi_modules () +{ + local locdelay + modprobe ipmi_msghandler > /dev/null 2>&1 + modules_loaded ipmi_msghandler + [ ${OnePlusLoaded} -ne 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return + load_hw_modules + [ $((RETVAL & 1)) -eq 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return + + if [ "${DEV_IPMI}" = "yes" ]; then + modprobe ipmi_devintf > /dev/null 2>&1 + modules_loaded ipmi_devintf + RETVAL=$((RETVAL & ~2)) + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + if [ ${OnePlusLoaded} -eq 1 ]; then + if [ ${UDEV_EXISTS} -eq 0 ]; then + DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'` + rm -f /dev/ipmi${INTF_NUM} + mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4)) + fi + + # udev can take several seconds to create /dev/ipmi0, + # but it happens asynchronously, so delay here + locdelay=${DEV_IPMI_TIMEOUT} + while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 ]; do + locdelay=$((locdelay - 1)) + sleep 0.1 + done + fi + fi + + if [ "${IPMI_IMB}" = "yes" ]; then + modprobe ipmi_imb > /dev/null 2>&1 + modules_loaded ipmi_imb + RETVAL=$((RETVAL & ~2)) + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + if [ ${OnePlusLoaded} -eq 1 ]; then + DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'` + rm -f /dev/imb + mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4)) + fi + fi + + # Per Corey Minyard, essentially no one uses ipmi_radisys + # and we don't want to encourage its further use + # so it won't be handled here. + return +} + +############################################################################# +start() +{ + load_ipmi_modules + if [ ${RETVAL} -eq 0 ]; then + touch ${LOCKFILE} + else + if [ $((RETVAL & 1)) -eq 1 ]; then + echo "Startup failed." + else + touch ${LOCKFILE} && echo "Warning!?" + fi + fi + start_watchdog_quiet + start_powercontrol_quiet +} + +############################################################################# +stop() +{ + unload_ipmi_modules_leave_features + modules_loaded ${MODULES_INTERFACES} + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Shutdown failed, something may be in use" + else + rm -f ${LOCKFILE} + fi +} + +stop_all() +{ + unload_all_ipmi_modules + modules_loaded ${MODULES} + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Shutdown failed, something may be in use" + else + rm -f ${LOCKFILE} + fi +} + +############################################################################# +restart() +{ + stop_all + RETVAL=0 + start +} + +############################################################################# + +reload() +{ + stop_all + RETVAL=0 + start +} + +############################################################################# + +status_all() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES} + [ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2)) + + if [ "${DEV_IPMI}" = "yes" ]; then + device_node_exists /dev/ipmi${INTF_NUM} + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi + + if [ "${IPMI_IMB}" = "yes" ]; then + device_node_exists /dev/imb + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi + + if [ "${IPMI_WATCHDOG}" = "yes" ]; then + device_node_exists /dev/watchdog + [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) + fi + + [ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16)) +} + +status() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + if [ "${DEV_IPMI}" = "yes" ]; then + modules_loaded_verbose ipmi_devintf + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + + device_node_exists /dev/ipmi${INTF_NUM} + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi + + if [ "${IPMI_IMB}" = "yes" ]; then + device_node_exists /dev/imb + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi +} + +status_watchdog() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + modules_loaded_verbose ipmi_watchdog + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + + device_node_exists /dev/watchdog + [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) +} + +status_powercontrol() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + modules_loaded_verbose ipmi_powercontrol + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) +} + +############################################################################# +usage () +{ + echo $"Usage: $0 {start|stop|status" 1>&2 + echo $" restart|condrestart|try-restart|reload|force-reload" 1>&2 + echo $" start-watchdog|stop-watchdog|status-watchdog" 1>&2 + echo $" start-powercontrol|stop-powercontrol|status-powercontrol" 1>&2 + echo $" stop-all|status-all}" 1>&2 + RETVAL=2 +} + +condrestart () +{ + [ -e ${LOCKFILE} ] && restart +} + +############################################################################# +# MAIN +############################################################################# +case "$1" in + start) start ;; + stop) stop ;; + restart) restart ;; + force-reload) reload ;; + reload) reload ;; + status) status ;; + status-all) status_all ;; + condrestart) condrestart ;; + try-restart) condrestart ;; + start-watchdog) start_watchdog ;; + stop-watchdog) stop_watchdog ;; + status-watchdog) status_watchdog ;; + start-powercontrol) start_powercontrol ;; + stop-powercontrol) stop_powercontrol ;; + status-powercontrol) status_powercontrol ;; + stop-all) stop_all ;; + *) usage ;; +esac + +exit ${RETVAL} + +############################################################################# +# end of file +############################################################################# + diff --git a/openipmi.sysconf b/openipmi.sysconf new file mode 100644 index 0000000..715c6e4 --- /dev/null +++ b/openipmi.sysconf @@ -0,0 +1,68 @@ +## Path: Hardware/IPMI +## Description: Enable standard hardware interfaces (KCS, BT, SMIC) +## Type: yesno +## Default: "yes" +## Config: ipmi +# Enable standard hardware interfaces (KCS, BT, SMIC) +# You probably want this enabled. +IPMI_SI=yes + +## Path: Hardware/IPMI +## Description: Enable /dev/ipmi0 interface, used by ipmitool, ipmicmd, +## Type: yesno +## Default: "yes" +## Config: ipmi +# Enable /dev/ipmi0 interface, used by ipmitool, ipmicmd, +# and other userspace IPMI-using applications. +# You probably want this enabled. +DEV_IPMI=yes + +## Path: Hardware/IPMI +## Description: Enable IPMI_WATCHDOG if you want the IPMI watchdog +## Type: yesno +## Default: "no" +## Config: ipmi +# Enable IPMI_WATCHDOG if you want the IPMI watchdog +# to reboot the system if it hangs +IPMI_WATCHDOG=no + +## Path: Hardware/IPMI +## Description: Watchdog options - modinfo ipmi_watchdog for details +## Type: string +## Default: "timeout=60" +## Config: ipmi +# Watchdog options - modinfo ipmi_watchdog for details +# watchdog timeout value in seconds +# as there is no userspace ping application that runs during shutdown, +# be sure to give it enough time for any device drivers to +# do their cleanup (e.g. megaraid cache flushes) +# without the watchdog triggering prematurely +IPMI_WATCHDOG_OPTIONS="timeout=60" + +## Path: Hardware/IPMI +## Description: Enable IPMI_POWEROFF if you want the IPMI poweroff module to be loaded. +## Type: yesno +## Default: "no" +## Config: ipmi +# Enable IPMI_POWEROFF if you want the IPMI +# poweroff module to be loaded. +IPMI_POWEROFF=no + +## Path: Hardware/IPMI +## Description: Enable IPMI_POWERCYCLE if you want the system to be power-cycled on reboot +## Type: yesno +## Default: "no" +## Config: ipmi +# Enable IPMI_POWERCYCLE if you want the system to be power-cycled (power +# down, delay briefly, power on) rather than power off, on systems +# that support such. IPMI_POWEROFF=yes is also required. +IPMI_POWERCYCLE=no + +## Path: Hardware/IPMI +## Description: Enable "legacy" interfaces for applications +## Type: yesno +## Default: "no" +## Config: ipmi +# Enable "legacy" interfaces for applications +# Intel IMB driver interface +IPMI_IMB=no diff --git a/restore-api-compatibility.patch b/restore-api-compatibility.patch new file mode 100644 index 0000000..235fc83 --- /dev/null +++ b/restore-api-compatibility.patch @@ -0,0 +1,870 @@ +diff --git a/cmdlang/Makefile.am b/cmdlang/Makefile.am +index 9326e3ea..192623f3 100644 +--- a/cmdlang/Makefile.am ++++ b/cmdlang/Makefile.am +@@ -2,8 +2,6 @@ + LIB_VERSION = 0.0.5 + LD_VERSION = 0:5:0 + +-noinst_HEADERS = cmdlang.h +- + AM_CFLAGS = -Wall -Wsign-compare -I$(top_builddir)/include \ + -I$(top_srcdir)/include \ + -DIPMI_CHECK_LOCKS $(GLIB_CFLAGS) \ +diff --git a/cmdlang/cmd_conn.c b/cmdlang/cmd_conn.c +index cdd700b6..338e9c77 100644 +--- a/cmdlang/cmd_conn.c ++++ b/cmdlang/cmd_conn.c +@@ -38,7 +38,6 @@ + #include + #include + #include +-#include "cmdlang.h" + + static void + con_list_handler(ipmi_domain_t *domain, int conn, void *cb_data) +diff --git a/cmdlang/cmd_control.c b/cmdlang/cmd_control.c +index feefe73c..06cf1c27 100644 +--- a/cmdlang/cmd_control.c ++++ b/cmdlang/cmd_control.c +@@ -41,7 +41,6 @@ + + /* Internal includes, do not use in your programs */ + #include +-#include "cmdlang.h" + + static void + control_list_handler(ipmi_entity_t *entity, ipmi_control_t *control, +diff --git a/cmdlang/cmd_domain.c b/cmdlang/cmd_domain.c +index dec5765d..0ca0b25d 100644 +--- a/cmdlang/cmd_domain.c ++++ b/cmdlang/cmd_domain.c +@@ -45,7 +45,6 @@ + + /* Internal includes, do not use in your programs */ + #include +-#include "cmdlang.h" + + /* Don't pollute the namespace iwth ipmi_fru_t. */ + void ipmi_cmdlang_dump_fru_info(ipmi_cmd_info_t *cmd_info, ipmi_fru_t *fru); +diff --git a/cmdlang/cmd_entity.c b/cmdlang/cmd_entity.c +index e88854ac..a5ad1475 100644 +--- a/cmdlang/cmd_entity.c ++++ b/cmdlang/cmd_entity.c +@@ -42,7 +42,6 @@ + + /* Internal includes, do not use in your programs */ + #include +-#include "cmdlang.h" + + /* Don't pollute the namespace iwth ipmi_fru_t. */ + void ipmi_cmdlang_dump_fru_info(ipmi_cmd_info_t *cmd_info, ipmi_fru_t *fru); +diff --git a/cmdlang/cmd_fru.c b/cmdlang/cmd_fru.c +index 5cc2a1ac..cea4b70c 100644 +--- a/cmdlang/cmd_fru.c ++++ b/cmdlang/cmd_fru.c +@@ -43,7 +43,6 @@ + + /* Internal includes, do not use in your programs */ + #include +-#include "cmdlang.h" + + /* Don't pollute the namespace iwth ipmi_fru_t. */ + void ipmi_cmdlang_dump_fru_info(ipmi_cmd_info_t *cmd_info, ipmi_fru_t *fru); +diff --git a/cmdlang/cmd_lanparm.c b/cmdlang/cmd_lanparm.c +index b6e86701..7afd7dd2 100644 +--- a/cmdlang/cmd_lanparm.c ++++ b/cmdlang/cmd_lanparm.c +@@ -44,7 +44,6 @@ + /* Internal includes, do not use in your programs */ + #include + #include +-#include "cmdlang.h" + + static locked_list_t *lancs; + +diff --git a/cmdlang/cmd_mc.c b/cmdlang/cmd_mc.c +index 645506e7..0a3f6440 100644 +--- a/cmdlang/cmd_mc.c ++++ b/cmdlang/cmd_mc.c +@@ -47,7 +47,6 @@ + + /* Internal includes, do not use in your programs */ + #include +-#include "cmdlang.h" + + static void + mc_list_handler(ipmi_domain_t *domain, ipmi_mc_t *mc, void *cb_data) +diff --git a/cmdlang/cmd_pef.c b/cmdlang/cmd_pef.c +index c8503299..47ab2bd1 100644 +--- a/cmdlang/cmd_pef.c ++++ b/cmdlang/cmd_pef.c +@@ -44,7 +44,6 @@ + /* Internal includes, do not use in your programs */ + #include + #include +-#include "cmdlang.h" + + static locked_list_t *pefs; + +diff --git a/cmdlang/cmd_pet.c b/cmdlang/cmd_pet.c +index 5730159e..77d3f90d 100644 +--- a/cmdlang/cmd_pet.c ++++ b/cmdlang/cmd_pet.c +@@ -40,7 +40,6 @@ + #include + #include + #include +-#include "cmdlang.h" + + + static void +diff --git a/cmdlang/cmd_sel.c b/cmdlang/cmd_sel.c +index 660f58a7..545b12f2 100644 +--- a/cmdlang/cmd_sel.c ++++ b/cmdlang/cmd_sel.c +@@ -42,7 +42,6 @@ + + /* Internal includes, do not use in your programs */ + #include +-#include "cmdlang.h" + + static int + discrete_event_handler(ipmi_sensor_t *sensor, +diff --git a/cmdlang/cmd_sensor.c b/cmdlang/cmd_sensor.c +index a4abc77c..99b8a634 100644 +--- a/cmdlang/cmd_sensor.c ++++ b/cmdlang/cmd_sensor.c +@@ -41,7 +41,6 @@ + + /* Internal includes, do not use in your programs */ + #include +-#include "cmdlang.h" + + static void + sensor_list_handler(ipmi_entity_t *entity, ipmi_sensor_t *sensor, +diff --git a/cmdlang/cmd_solparm.c b/cmdlang/cmd_solparm.c +index f584f8f3..df32c3f7 100644 +--- a/cmdlang/cmd_solparm.c ++++ b/cmdlang/cmd_solparm.c +@@ -44,7 +44,6 @@ + /* Internal includes, do not use in your programs */ + #include + #include +-#include "cmdlang.h" + + static locked_list_t *solcs; + +diff --git a/cmdlang/cmdlang.c b/cmdlang/cmdlang.c +index b690e24c..416fce7f 100644 +--- a/cmdlang/cmdlang.c ++++ b/cmdlang/cmdlang.c +@@ -54,7 +54,6 @@ + #include + #include + #include +-#include "cmdlang.h" + + /* + * This is the value passed to a command handler. +@@ -2480,6 +2479,8 @@ event_done(ipmi_cmdlang_t *cmdlang) + ipmi_mem_free(cmdlang->errstr); + } else if (ipmi_cmdlang_event_rpt) { + ipmi_cmdlang_event_rpt(event); ++ } else if (ipmi_cmdlang_report_event) { ++ ipmi_cmdlang_report_event(event); + } + + if (cmdlang->objstr) +diff --git a/cmdlang/cmdlang.h b/cmdlang/cmdlang.h +deleted file mode 100644 +index 0758cb5d..00000000 +--- a/cmdlang/cmdlang.h ++++ /dev/null +@@ -1,43 +0,0 @@ +-/* +- * cmdlang.h +- * +- * A command interpreter for OpenIPMI +- * +- * Author: MontaVista Software, Inc. +- * Corey Minyard +- * source@mvista.com +- * +- * Copyright 2020 MontaVista Software Inc. +- * +- * This program 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 of +- * the License, or (at your option) any later version. +- * +- * +- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this program; if not, write to the Free +- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +- */ +- +-#ifndef CMDLANG_H +-#define CMDLANG_H +- +-/* Used to log errors inside the cmdlang. */ +-void ipmi_cmdlang_global_err(char *objstr, +- char *location, +- char *errstr, +- int errval); +- +-#endif /* CMDLANG_H */ +diff --git a/include/OpenIPMI/Makefile.am b/include/OpenIPMI/Makefile.am +index 8e86afc8..644cc84a 100644 +--- a/include/OpenIPMI/Makefile.am ++++ b/include/OpenIPMI/Makefile.am +@@ -8,7 +8,7 @@ pkginclude_HEADERS = \ + ipmi_conn.h ipmi_lan.h ipmi_pet.h ipmi_ui.h \ + ipmi_debug.h ipmi_lanparm.h ipmi_picmg.h ipmi_string.h \ + ipmi_sol.h ipmi_solparm.h ipmi_tcl.h deprecator.h \ +- dllvisibility.h ++ dllvisibility.h weaksyms.h + + SUBDIRS = internal + +diff --git a/include/OpenIPMI/ipmi_cmdlang.h b/include/OpenIPMI/ipmi_cmdlang.h +index 80e5cb8a..682279e9 100644 +--- a/include/OpenIPMI/ipmi_cmdlang.h ++++ b/include/OpenIPMI/ipmi_cmdlang.h +@@ -35,6 +35,7 @@ + #define OPENIPMI_CMDLANG_H + + #include ++#include + #include + #include + #include +@@ -44,6 +45,14 @@ + extern "C" { + #endif + ++#ifdef BUILDING_IPMI_CMDLANG_DLL ++ #define IPMI_CMDLANG_WEAK(ret, sym, decl) IPMI_WEAK_DLL(ret, sym, decl) ++ #define IPMI_CMDLANG_WEAK_DEFAULT(ret, sym, decl) IPMI_WEAK_DLL_DEFAULT(ret, sym, decl) ++#else ++ #define IPMI_CMDLANG_WEAK(ret, sym, decl) IPMI_WEAK_USER(ret, sym, decl) ++ #define IPMI_CMDLANG_WEAK_DEFAULT(ret, sym, decl) IPMI_WEAK_USER(ret, sym, decl) ++#endif ++ + #if defined _WIN32 || defined __CYGWIN__ + #ifdef BUILDING_IPMI_CMDLANG_DLL + #ifdef __GNUC__ +@@ -427,10 +436,15 @@ extern void (*ipmi_cmdlang_err_rpt)(char *objstr, + char *location, + char *errstr, + int errval); ++IPMI_CMDLANG_WEAK_DEFAULT(void, ipmi_cmdlang_global_err, (char *objstr, ++ char *location, ++ char *errstr, ++ int errval)); + + /* Supplied by the user to report events. */ + IPMI_CMDLANG_DLL_PUBLIC + extern void (*ipmi_cmdlang_event_rpt)(ipmi_cmdlang_event_t *event); ++IPMI_CMDLANG_WEAK(void, ipmi_cmdlang_report_event, (ipmi_cmdlang_event_t *event)); + + /* In callbacks, you must use these to lock the cmd_info structure. */ + IPMI_CMDLANG_DLL_PUBLIC +diff --git a/include/OpenIPMI/ipmi_posix.h b/include/OpenIPMI/ipmi_posix.h +index f3000eca..0d7e82ee 100644 +--- a/include/OpenIPMI/ipmi_posix.h ++++ b/include/OpenIPMI/ipmi_posix.h +@@ -43,6 +43,19 @@ + extern "C" { + #endif + ++/* These are the defined OS handlers for POSIX with and without ++ threading. If you use these (and thus link with the OpenIPMIposix ++ or OpenIPMIpthread libraries) you must provide posix_vlog(). It is ++ not provided by the library. */ ++/* DEPRECATED - This should no longer be used, you should use the ++ OS-handler function to set your log handler. If you do not supply ++ your own os_vlog handler, logs will go to stderr. If you supply a ++ posix_vlog handler and don't call set_log_handler in the OS handler, ++ posix_vlog() will still be used. */ ++IPMI_SEL_WEAK(void, posix_vlog, (char *format, ++ enum ipmi_log_type_e log_type, ++ va_list ap)); ++ + /* Non-threaded os handler operations */ + + /********************************************************************** +diff --git a/include/OpenIPMI/selector.h b/include/OpenIPMI/selector.h +index ca1f7f9c..d803d9f4 100644 +--- a/include/OpenIPMI/selector.h ++++ b/include/OpenIPMI/selector.h +@@ -46,6 +46,14 @@ + typedef int sigset_t; + #endif + ++#include ++ ++#if defined BUILDING_IPMI_SELECTOR_DLL ++ #define IPMI_SEL_WEAK(ret, sym, decl) IPMI_WEAK_DLL(ret, sym, decl) ++#else ++ #define IPMI_SEL_WEAK(ret, sym, decl) IPMI_WEAK_USER(ret, sym, decl) ++#endif ++ + #if defined _WIN32 || defined __CYGWIN__ + #ifdef BUILDING_IPMI_SELECTOR_DLL + #ifdef __GNUC__ +diff --git a/include/OpenIPMI/weaksyms.h b/include/OpenIPMI/weaksyms.h +new file mode 100644 +index 00000000..07004243 +--- /dev/null ++++ b/include/OpenIPMI/weaksyms.h +@@ -0,0 +1,80 @@ ++/* ++ * weaksyms.h ++ * ++ * MontaVista IPMI weak symbol defines ++ * ++ * Author: MontaVista Software, Inc. ++ * Corey Minyard ++ * source@mvista.com ++ * ++ * Copyright 2003,2004,2005 MontaVista Software Inc. ++ * ++ * This software is available to you under a choice of one of two ++ * licenses. You may choose to be licensed under the terms of the GNU ++ * Lesser General Public License (GPL) Version 2 or the modified BSD ++ * license below. The following disclamer applies to both licenses: ++ * ++ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED ++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, ++ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS ++` * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ++ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ * GNU Lesser General Public Licence ++ * ++ * This program 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 of ++ * the License, or (at your option) any later version. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this program; if not, write to the Free ++ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ * Modified BSD Licence ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions and the following disclaimer. ++ * 2. Redistributions in binary form must reproduce the above ++ * copyright notice, this list of conditions and the following ++ * disclaimer in the documentation and/or other materials provided ++ * with the distribution. ++ * 3. The name of the author may not be used to endorse or promote ++ * products derived from this software without specific prior ++ * written permission. ++ */ ++ ++#ifndef __WEAKSYMS_H ++#define __WEAKSYMS_H ++ ++#include ++ ++#if defined _WIN32 || defined __CYGWIN__ ++ // Calling back to user code not supported, set the weak symbol to NULL always. ++ #define IPMI_WEAK_DLL(ret, sym, decl) static ret (*sym)decl = NULL ++ // Weak symbol with a default value, do not set to zero ++ #define IPMI_WEAK_DLL_DEFAULT(ret, sym, decl) ret sym decl ++ #define IPMI_WEAK_USER(ret, sym, decl) // Nothing, omit the prototype ++#else ++ #ifdef __GNUC__ ++ #define IPMI_WEAK_DLL(ret, sym, decl) __attribute__ ((weak)) ret sym decl ++ #define IPMI_WEAK_DLL_DEFAULT(ret, sym, decl) IPMI_WEAK_DLL(ret, sym, decl) ++ #define IPMI_WEAK_USER(ret, sym, decl) ret sym decl ++ #else ++ // Weak symbol not supported as we can not generate #pragma nor _Pragma from cpp ++ #define IPMI_WEAK_DLL(ret, sym, decl) static ret (*sym)decl = NULL ++ #define IPMI_WEAK_DLL_DEFAULT(ret, sym, decl) ret sym decl ++ #define IPMI_WEAK_USER(ret, sym, decl) // Nothing, omit the prototype ++ #endif ++#endif ++ ++#endif /* __WEAKSYMS_H */ +diff --git a/lanserv/Makefile.am b/lanserv/Makefile.am +index 371ec52d..e4409423 100644 +--- a/lanserv/Makefile.am ++++ b/lanserv/Makefile.am +@@ -30,7 +30,7 @@ bin_PROGRAMS = ipmi_sim $(IPMILAN_PROG) + + noinst_PROGRAMS = ipmi_checksum + +-noinst_HEADERS = emu.h bmc.h ipmi_sim.h sol.h ++noinst_HEADERS = emu.h bmc.h ipmi_sim.h sol.h callback.h + + libIPMIlanserv_la_SOURCES = lanserv_ipmi.c lanserv_asf.c priv_table.c \ + lanserv_oem_force.c lanserv_config.c config.c serv.c serial_ipmi.c \ +diff --git a/lanserv/OpenIPMI/Makefile.am b/lanserv/OpenIPMI/Makefile.am +index 80fb44ea..f9fbf2cf 100644 +--- a/lanserv/OpenIPMI/Makefile.am ++++ b/lanserv/OpenIPMI/Makefile.am +@@ -1,3 +1,3 @@ + + pkginclude_HEADERS = lanserv.h serserv.h serv.h extcmd.h persist.h msg.h \ +- mcserv.h ipmbserv.h lanserv_dllvisibility.h ++ mcserv.h ipmbserv.h lanserv_dllvisibility.h lanserv_weaksyms.h +diff --git a/lanserv/OpenIPMI/lanserv.h b/lanserv/OpenIPMI/lanserv.h +index 57ed757e..867f2741 100644 +--- a/lanserv/OpenIPMI/lanserv.h ++++ b/lanserv/OpenIPMI/lanserv.h +@@ -57,6 +57,7 @@ + #define __LANSERV_H + + #include ++#include + + #include + #include +@@ -236,6 +237,8 @@ typedef struct ipmi_tick_handler_s { + struct ipmi_tick_handler_s *next; + } ipmi_tick_handler_t; + ++IPMI_LANSERV_WEAK(void, ipmi_register_tick_handler, (ipmi_tick_handler_t *handler)); ++ + typedef struct oem_handlers_s + { + void *oem_data; +diff --git a/lanserv/OpenIPMI/lanserv_weaksyms.h b/lanserv/OpenIPMI/lanserv_weaksyms.h +new file mode 100644 +index 00000000..e68d6bd2 +--- /dev/null ++++ b/lanserv/OpenIPMI/lanserv_weaksyms.h +@@ -0,0 +1,67 @@ ++/* ++ * lanserv.h ++ * ++ * MontaVista IPMI LAN server include file ++ * ++ * Author: MontaVista Software, Inc. ++ * Corey Minyard ++ * source@mvista.com ++ * ++ * Copyright 2003,2004,2005 MontaVista Software Inc. ++ * ++ * This software is available to you under a choice of one of two ++ * licenses. You may choose to be licensed under the terms of the GNU ++ * Lesser General Public License (GPL) Version 2 or the modified BSD ++ * license below. The following disclamer applies to both licenses: ++ * ++ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED ++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, ++ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS ++` * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ++ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ * GNU Lesser General Public Licence ++ * ++ * This program 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 of ++ * the License, or (at your option) any later version. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this program; if not, write to the Free ++ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ * Modified BSD Licence ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions and the following disclaimer. ++ * 2. Redistributions in binary form must reproduce the above ++ * copyright notice, this list of conditions and the following ++ * disclaimer in the documentation and/or other materials provided ++ * with the distribution. ++ * 3. The name of the author may not be used to endorse or promote ++ * products derived from this software without specific prior ++ * written permission. ++ */ ++ ++#ifndef __LANSERV_WEAKSYMS_H ++#define __LANSERV_WEAKSYMS_H ++ ++#include ++ ++#if defined BUILDING_IPMI_LANSERV_DLL ++ #define IPMI_LANSERV_WEAK(ret, sym, decl) IPMI_WEAK_DLL(ret, sym, decl) ++#else ++ #define IPMI_LANSERV_WEAK(ret, sym, decl) IPMI_WEAK_USER(ret, sym, decl) ++#endif ++ ++#endif /* __LANSERV_WEAKSYMS_H */ +diff --git a/lanserv/OpenIPMI/mcserv.h b/lanserv/OpenIPMI/mcserv.h +index c2a04648..de8d1440 100644 +--- a/lanserv/OpenIPMI/mcserv.h ++++ b/lanserv/OpenIPMI/mcserv.h +@@ -84,6 +84,19 @@ void ipmi_mc_set_chassis_control_func(lmc_data_t *mc, + void *cb_data), + void *cb_data); + ++IPMI_LANSERV_WEAK(int, ipmi_mc_alloc_unconfigured, (sys_data_t *sys, unsigned char ipmb, ++ lmc_data_t **rmc)); ++ ++IPMI_LANSERV_WEAK(unsigned char, ipmi_mc_get_ipmb, (lmc_data_t *mc)); ++IPMI_LANSERV_WEAK(channel_t **, ipmi_mc_get_channelset, (lmc_data_t *mc)); ++IPMI_LANSERV_WEAK(ipmi_sol_t *, ipmi_mc_get_sol, (lmc_data_t *mc)); ++IPMI_LANSERV_WEAK(startcmd_t *, ipmi_mc_get_startcmdinfo, (lmc_data_t *mc)); ++IPMI_LANSERV_WEAK(user_t *, ipmi_mc_get_users, (lmc_data_t *mc)); ++IPMI_LANSERV_WEAK(pef_data_t *, ipmi_mc_get_pef, (lmc_data_t *mc)); ++ ++IPMI_LANSERV_WEAK(void, ipmi_resend_atn, (channel_t *chan)); ++IPMI_LANSERV_WEAK(msg_t *, ipmi_mc_get_next_recv_q, (channel_t *chan)); ++ + /* + * FRUs have a semaphore that can be use to grant exclusive access. + * The semaphore is attempted to get before read and write operations, +@@ -165,6 +178,8 @@ int check_msg_length(msg_t *msg, + unsigned int len, + unsigned char *rdata, + unsigned int *rdata_len); ++IPMI_LANSERV_WEAK(void, ipmi_set_chassis_control_prog, ++ (lmc_data_t *mc, const char *prog)); + + void ipmi_mc_set_dev_revision(lmc_data_t *mc, unsigned char dev_revision); + void ipmi_mc_set_fw_revision(lmc_data_t *mc, unsigned char fw_revision_major, +@@ -172,6 +187,10 @@ void ipmi_mc_set_fw_revision(lmc_data_t *mc, unsigned char fw_revision_major, + void ipmi_mc_set_aux_fw_revision(lmc_data_t *mc, + unsigned char aux_fw_revision[4]); + const char *get_lanserv_version(void); ++IPMI_LANSERV_WEAK(int, sol_read_config, ++ (char **tokptr, sys_data_t *sys, const char **err)); ++ ++IPMI_LANSERV_WEAK(int, ipmi_mc_users_changed, (lmc_data_t *mc)); + + /* + * Types and functions for registering handlers with the MC emulator. +diff --git a/lanserv/callback.h b/lanserv/callback.h +new file mode 100644 +index 00000000..eb9f18fa +--- /dev/null ++++ b/lanserv/callback.h +@@ -0,0 +1,68 @@ ++/* ++ * callback.h ++ * ++ * MontaVista IPMI LAN server include file ++ * ++ * Author: MontaVista Software, Inc. ++ * Corey Minyard ++ * source@mvista.com ++ * ++ * Copyright 2003,2004,2005 MontaVista Software Inc. ++ * ++ * This software is available to you under a choice of one of two ++ * licenses. You may choose to be licensed under the terms of the GNU ++ * Lesser General Public License (GPL) Version 2 or the modified BSD ++ * license below. The following disclamer applies to both licenses: ++ * ++ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED ++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, ++ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS ++` * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ++ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE ++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ * GNU Lesser General Public Licence ++ * ++ * This program 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 of ++ * the License, or (at your option) any later version. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this program; if not, write to the Free ++ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ * Modified BSD Licence ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions and the following disclaimer. ++ * 2. Redistributions in binary form must reproduce the above ++ * copyright notice, this list of conditions and the following ++ * disclaimer in the documentation and/or other materials provided ++ * with the distribution. ++ * 3. The name of the author may not be used to endorse or promote ++ * products derived from this software without specific prior ++ * written permission. ++ */ ++ ++#ifndef __CALLBACK_H ++#define __CALLBACK_H ++ ++/* ++ * Macros to get callbacks that exist either as function pointers in some structure ++ * or as functions in user code. ++ * Pointers take precedence, functions exist for backward compatibility. ++ */ ++ ++#define LANSERV_CB(obj, field, name) ( (obj)->field ? (obj)->field : (name) ) ++#define LANSERV_CB_IPMI(obj, name) LANSERV_CB(obj, name, ipmi_ ## name) ++ ++#endif /* __CALLBACK_H */ +diff --git a/lanserv/config.c b/lanserv/config.c +index 453750eb..d59e93fe 100644 +--- a/lanserv/config.c ++++ b/lanserv/config.c +@@ -65,6 +65,9 @@ + #include + #include + #include ++#include ++ ++#include "callback.h" + + void + read_persist_users(sys_data_t *sys) +@@ -80,11 +83,11 @@ read_persist_users(sys_data_t *sys) + if (!mc) + continue; + +- p = read_persist("users.mc%2.2x", sys->mc_get_ipmb(mc)); ++ p = read_persist("users.mc%2.2x", LANSERV_CB_IPMI(sys, mc_get_ipmb)(mc)); + if (!p) + continue; + +- users = sys->mc_get_users(mc); ++ users = LANSERV_CB_IPMI(sys, mc_get_users)(mc); + for (j = 0; j <= MAX_USERS; j++) { + void *data; + unsigned int len; +@@ -124,14 +127,14 @@ write_persist_users(sys_data_t *sys) + user_t *users; + persist_t *p; + +- if (!mc || !sys->mc_users_changed(mc)) ++ if (!mc || !LANSERV_CB_IPMI(sys, mc_users_changed)(mc)) + continue; + +- p = alloc_persist("users.mc%2.2x", sys->mc_get_ipmb(mc)); ++ p = alloc_persist("users.mc%2.2x", LANSERV_CB_IPMI(sys, mc_get_ipmb)(mc)); + if (!p) + return ENOMEM; + +- users = sys->mc_get_users(mc); ++ users = LANSERV_CB_IPMI(sys, mc_get_users)(mc); + for (j = 0; j <= MAX_USERS; j++) { + add_persist_int(p, users[j].valid, "%d.valid", j); + add_persist_int(p, users[j].link_auth, "%d.link_auth", j); +@@ -834,12 +837,13 @@ read_config(sys_data_t *sys, + } else if (strcmp(tok, "serial") == 0) { + err = serserv_read_config(&tokptr, sys, &errstr); + } else if (strcmp(tok, "sol") == 0) { +- err = sys->sol_read_config(&tokptr, sys, &errstr); ++ err = LANSERV_CB(sys, sol_read_config, sol_read_config) ++ (&tokptr, sys, &errstr); + } else if (strcmp(tok, "chassis_control") == 0) { + char *prog; + err = get_delim_str(&tokptr, &prog, &errstr); + if (!err) +- sys->set_chassis_control_prog(sys->mc, prog); ++ LANSERV_CB_IPMI(sys, set_chassis_control_prog)(sys->mc, prog); + } else if (strcmp(tok, "name") == 0) { + err = get_delim_str(&tokptr, &sys->name, &errstr); + } else if (strcmp(tok, "startcmd") == 0) { +@@ -860,7 +864,7 @@ read_config(sys_data_t *sys, + err = get_uchar(&tokptr, &ipmb, &errstr); + if (!err) { + lmc_data_t *mc; +- err = sys->mc_alloc_unconfigured(sys, ipmb, &mc); ++ err = LANSERV_CB_IPMI(sys, mc_alloc_unconfigured)(sys, ipmb, &mc); + if (err == ENOMEM) { + errstr = "Out of memory"; + err = -1; +@@ -869,11 +873,11 @@ read_config(sys_data_t *sys, + err = -1; + } else { + sys->mc = mc; +- sys->cusers = sys->mc_get_users(mc); +- sys->chan_set = sys->mc_get_channelset(mc); +- sys->cpef = sys->mc_get_pef(mc); +- sys->startcmd = sys->mc_get_startcmdinfo(mc); +- sys->sol = sys->mc_get_sol(mc); ++ sys->cusers = LANSERV_CB_IPMI(sys, mc_get_users)(mc); ++ sys->chan_set = LANSERV_CB_IPMI(sys, mc_get_channelset)(mc); ++ sys->cpef = LANSERV_CB_IPMI(sys, mc_get_pef)(mc); ++ sys->startcmd = LANSERV_CB_IPMI(sys, mc_get_startcmdinfo)(mc); ++ sys->sol = LANSERV_CB_IPMI(sys, mc_get_sol)(mc); + } + } + } else if (strcmp(tok, "console") == 0) { +diff --git a/lanserv/lanserv_ipmi.c b/lanserv/lanserv_ipmi.c +index ccd60015..c3c2cdbe 100644 +--- a/lanserv/lanserv_ipmi.c ++++ b/lanserv/lanserv_ipmi.c +@@ -73,6 +73,9 @@ + + #include + #include ++#include ++ ++#include "callback.h" + + static int + is_authval_null(uint8_t *val) +@@ -512,7 +515,7 @@ lan_return_rsp(channel_t *chan, msg_t *msg, rsp_msg_t *rsp) + + return_rsp(lan, msg, NULL, rsp); + +- msg = lan->sysinfo->mc_get_next_recv_q(chan); ++ msg = LANSERV_CB_IPMI(lan->sysinfo, mc_get_next_recv_q)(chan); + if (!msg) + return; + while (msg) { +@@ -531,7 +534,7 @@ lan_return_rsp(channel_t *chan, msg_t *msg, rsp_msg_t *rsp) + + chan->free(chan, msg); + +- msg = lan->sysinfo->mc_get_next_recv_q(chan); ++ msg = LANSERV_CB_IPMI(lan->sysinfo, mc_get_next_recv_q)(chan); + } + if (chan->recv_in_q) + chan->recv_in_q(chan, 0); +@@ -729,7 +732,7 @@ handle_get_channel_cipher_suites(lanserv_data_t *lan, msg_t *msg) + if (chan == 0xe) + chan = lan->channel.channel_num; + +- channels = lan->sysinfo->mc_get_channelset(lan->channel.mc); ++ channels = LANSERV_CB_IPMI(lan->sysinfo, mc_get_channelset)(lan->channel.mc); + channel = channels[chan]; + if (!channel) { + return_err(lan, msg, NULL, IPMI_NOT_PRESENT_CC); +@@ -3202,7 +3205,7 @@ ipmi_lan_init(lanserv_data_t *lan) + + lan->tick_handler.handler = ipmi_lan_tick; + lan->tick_handler.info = lan; +- lan->sysinfo->register_tick_handler(&lan->tick_handler); ++ LANSERV_CB_IPMI(lan->sysinfo, register_tick_handler)(&lan->tick_handler); + + out: + return rv; +diff --git a/lanserv/marvell-bmc/marvell_mod.c b/lanserv/marvell-bmc/marvell_mod.c +index b5b15e05..41a07b5c 100644 +--- a/lanserv/marvell-bmc/marvell_mod.c ++++ b/lanserv/marvell-bmc/marvell_mod.c +@@ -72,6 +72,7 @@ + #include + #include + ++#include "callback.h" + #include "wiw.h" + + #define PVERSION "2.0.12" +@@ -3052,7 +3053,7 @@ ipmi_sim_module_init(sys_data_t *sys, const char *initstr_i) + } + } + +- rv = sys->mc_alloc_unconfigured(sys, 0x20, &bmc_mc); ++ rv = LANSERV_CB_IPMI(sys, mc_alloc_unconfigured)(sys, 0x20, &bmc_mc); + if (rv) { + sys->log(sys, OS_ERROR, NULL, + "Unable to allocate an mc: %s", strerror(rv)); +@@ -3099,7 +3100,7 @@ ipmi_sim_module_init(sys_data_t *sys, const char *initstr_i) + } + } + +- rv = sys->mc_alloc_unconfigured(sys, board_ipmb[num], &mc); ++ rv = LANSERV_CB_IPMI(sys, mc_alloc_unconfigured)(sys, board_ipmb[num], &mc); + if (rv) { + sys->log(sys, OS_ERROR, NULL, + "Unable to allocate an mc: %s", strerror(rv)); +@@ -3285,7 +3286,7 @@ ipmi_sim_module_post_init(sys_data_t *sys) + */ + unsigned char data[13]; + memset(data, 0, sizeof(data)); +- data[4] = sys->mc_get_ipmb(bmc_mc); ++ data[4] = LANSERV_CB_IPMI(sys, mc_get_ipmb)(bmc_mc); + data[5] = 0; /* LUN */ + data[6] = 0x04; /* Event message revision for IPMI 1.5. */ + data[7] = 0x1d; /* System boot initiated. */ +diff --git a/lanserv/serial_ipmi.c b/lanserv/serial_ipmi.c +index 8ba8f7d0..b7255341 100644 +--- a/lanserv/serial_ipmi.c ++++ b/lanserv/serial_ipmi.c +@@ -63,6 +63,7 @@ + #include + #include + #include ++#include + + #define EVENT_BUFFER_GLOBAL_ENABLE (1 << 2) + #define EVENT_LOG_GLOBAL_ENABLE (1 << 3) +@@ -1008,6 +1009,8 @@ vm_connected(serserv_data_t *si) + si->connected = 1; + if (si->sysinfo->resend_atn) + si->sysinfo->resend_atn(&si->channel); ++ else if (ipmi_resend_atn) ++ ipmi_resend_atn(&si->channel); + } + + static void +diff --git a/unix/posix_os_hnd.c b/unix/posix_os_hnd.c +index f84ba270..54910c4b 100644 +--- a/unix/posix_os_hnd.c ++++ b/unix/posix_os_hnd.c +@@ -376,6 +376,8 @@ sposix_vlog(os_handler_t *handler, + + if (log_handler) + log_handler(handler, format, log_type, ap); ++ else if (posix_vlog) ++ posix_vlog((char *) format, log_type, ap); + else + default_vlog(format, log_type, ap); + } +diff --git a/unix/posix_thread_os_hnd.c b/unix/posix_thread_os_hnd.c +index cb315c5e..3bec32f6 100644 +--- a/unix/posix_thread_os_hnd.c ++++ b/unix/posix_thread_os_hnd.c +@@ -377,6 +377,8 @@ sposix_vlog(os_handler_t *handler, + + if (log_handler) + log_handler(handler, format, log_type, ap); ++ else if (posix_vlog) ++ posix_vlog((char *) format, log_type, ap); + else + default_vlog(format, log_type, ap); + } diff --git a/sources b/sources new file mode 100644 index 0000000..f58fa1e --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (OpenIPMI-2.0.31.tar.gz) = de1b364315e97daffb4c601bcf3bf33591795449d71690496ae368bd0730a117c1716508ecaddef5d55498f56e73481a32f509791185e80e2475667d7abd73e7