mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-11 19:17:22 +00:00
Allow ipmitool/ipmievd to target specific device nodes on multi-BMC systems
This commit is contained in:
parent
c4a368edfb
commit
edb0ba9c6d
@ -2,7 +2,7 @@
|
|||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
ipmievd \- IPMI event daemon for sending events to syslog
|
ipmievd \- IPMI event daemon for sending events to syslog
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
ipmievd [\fB\-c\fR|\fB\-h\fR|\fB\-v\fR|\fB\-V\fR]
|
ipmievd [\fB\-c\fR|\fB\-h\fR|\fB\-d \fIN\fP\fR|\fB\-v\fR|\fB\-V\fR]
|
||||||
\fB\-I\fR \fIopen\fP <\fIopen\fR | \fIsel\fR> [<\fIoption\fP>]
|
\fB\-I\fR \fIopen\fP <\fIopen\fR | \fIsel\fR> [<\fIoption\fP>]
|
||||||
|
|
||||||
ipmievd [\fB\-c\fR|\fB\-h\fR|\fB\-v\fR|\fB\-V\fR]
|
ipmievd [\fB\-c\fR|\fB\-h\fR|\fB\-v\fR|\fB\-V\fR]
|
||||||
@ -116,6 +116,13 @@ Bridge IPMI requests to the remote target address.
|
|||||||
\fB\-U\fR <\fIusername\fP>
|
\fB\-U\fR <\fIusername\fP>
|
||||||
Remote server username, default is NULL user.
|
Remote server username, default is NULL user.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-d \fIN\fP\fR
|
||||||
|
Use device number N to specify the /dev/ipmiN (or
|
||||||
|
/dev/ipmi/N or /dev/ipmidev/N) device to use for in-band
|
||||||
|
BMC communication. Used to target a specific BMC on a
|
||||||
|
multi-node, multi-BMC system through the ipmi device
|
||||||
|
driver interface. Default is 0.
|
||||||
|
.TP
|
||||||
\fB\-v\fR
|
\fB\-v\fR
|
||||||
Increase verbose output level. This option may be specified
|
Increase verbose output level. This option may be specified
|
||||||
multiple times to increase the level of debug output. If given
|
multiple times to increase the level of debug output. If given
|
||||||
@ -167,7 +174,8 @@ Do NOT become a daemon, instead log all messages to stderr.
|
|||||||
.TP
|
.TP
|
||||||
\fIpidfile\fP=<\fBfilename\fR>
|
\fIpidfile\fP=<\fBfilename\fR>
|
||||||
Save process ID to this file when in daemon mode. Defaults to
|
Save process ID to this file when in daemon mode. Defaults to
|
||||||
/var/run/ipmievd.pid.
|
/var/run/ipmievd.pid\fIN\fP (where \fIN\fP is the ipmi device
|
||||||
|
number -- defaults to 0).
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
@ -189,7 +197,8 @@ Do NOT become a daemon, instead log all messages to stderr.
|
|||||||
.TP
|
.TP
|
||||||
\fIpidfile\fP=<\fBfilename\fR>
|
\fIpidfile\fP=<\fBfilename\fR>
|
||||||
Save process ID to this file when in daemon mode. Defaults to
|
Save process ID to this file when in daemon mode. Defaults to
|
||||||
/var/run/ipmievd.pid.
|
/var/run/ipmievd.pid\fIN\fP (where \fIN\fP is the ipmi device
|
||||||
|
number -- defaults to 0).
|
||||||
.TP
|
.TP
|
||||||
\fItimeout\fP=<\fBseconds\fR>
|
\fItimeout\fP=<\fBseconds\fR>
|
||||||
Time between checks for SEL polling method. Default is 10 seconds.
|
Time between checks for SEL polling method. Default is 10 seconds.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
ipmitool \- utility for controlling IPMI\-enabled devices
|
ipmitool \- utility for controlling IPMI\-enabled devices
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
ipmitool [\fB\-c\fR|\fB\-h\fR|\fB\-v\fR|\fB\-V\fR]
|
ipmitool [\fB\-c\fR|\fB\-h\fR|\fB\-d \fIN\fP\fR|\fB\-v\fR|\fB\-V\fR]
|
||||||
\fB\-I\fR \fIopen\fP <\fIcommand\fP>
|
\fB\-I\fR \fIopen\fP <\fIcommand\fP>
|
||||||
|
|
||||||
ipmitool [\fB\-c\fR|\fB\-h\fR|\fB\-v\fR|\fB\-V\fR]
|
ipmitool [\fB\-c\fR|\fB\-h\fR|\fB\-v\fR|\fB\-V\fR]
|
||||||
@ -130,6 +130,13 @@ Bridge IPMI requests to the remote target address.
|
|||||||
.TP
|
.TP
|
||||||
\fB\-U\fR <\fIusername\fP>
|
\fB\-U\fR <\fIusername\fP>
|
||||||
Remote server username, default is NULL user.
|
Remote server username, default is NULL user.
|
||||||
|
.TP
|
||||||
|
\fB\-d \fIN\fP\fR
|
||||||
|
Use device number N to specify the /dev/ipmiN (or
|
||||||
|
/dev/ipmi/N or /dev/ipmidev/N) device to use for in-band
|
||||||
|
BMC communication. Used to target a specific BMC on a
|
||||||
|
multi-node, multi-BMC system through the ipmi device
|
||||||
|
driver interface. Default is 0.
|
||||||
.TP
|
.TP
|
||||||
\fB\-v\fR
|
\fB\-v\fR
|
||||||
Increase verbose output level. This option may be specified
|
Increase verbose output level. This option may be specified
|
||||||
|
@ -174,6 +174,8 @@ struct ipmi_intf {
|
|||||||
uint8_t target_lun;
|
uint8_t target_lun;
|
||||||
uint8_t target_channel;
|
uint8_t target_channel;
|
||||||
|
|
||||||
|
uint8_t devnum;
|
||||||
|
|
||||||
int (*setup)(struct ipmi_intf * intf);
|
int (*setup)(struct ipmi_intf * intf);
|
||||||
int (*open)(struct ipmi_intf * intf);
|
int (*open)(struct ipmi_intf * intf);
|
||||||
void (*close)(struct ipmi_intf * intf);
|
void (*close)(struct ipmi_intf * intf);
|
||||||
|
@ -71,9 +71,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_ALL_OPTIONS
|
#ifdef ENABLE_ALL_OPTIONS
|
||||||
# define OPTION_STRING "I:hVvcgsEao:H:P:f:U:p:C:L:A:t:m:S:l:b:e:k:O:"
|
# define OPTION_STRING "I:hVvcgsEao:H:d:P:f:U:p:C:L:A:t:m:S:l:b:e:k:O:"
|
||||||
#else
|
#else
|
||||||
# define OPTION_STRING "I:hVvcH:f:U:p:S:"
|
# define OPTION_STRING "I:hVvcH:f:U:p:d:S:"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int verbose;
|
extern int verbose;
|
||||||
@ -216,6 +216,7 @@ ipmi_option_usage(const char * progname, struct ipmi_cmd * cmdlist, struct ipmi_
|
|||||||
lprintf(LOG_NOTICE, " -V Show version information");
|
lprintf(LOG_NOTICE, " -V Show version information");
|
||||||
lprintf(LOG_NOTICE, " -v Verbose (can use multiple times)");
|
lprintf(LOG_NOTICE, " -v Verbose (can use multiple times)");
|
||||||
lprintf(LOG_NOTICE, " -c Display output in comma separated format");
|
lprintf(LOG_NOTICE, " -c Display output in comma separated format");
|
||||||
|
lprintf(LOG_NOTICE, " -d N Specify a /dev/ipmiN device to use (default=0)");
|
||||||
lprintf(LOG_NOTICE, " -I intf Interface to use");
|
lprintf(LOG_NOTICE, " -I intf Interface to use");
|
||||||
lprintf(LOG_NOTICE, " -H hostname Remote host name for LAN interface");
|
lprintf(LOG_NOTICE, " -H hostname Remote host name for LAN interface");
|
||||||
lprintf(LOG_NOTICE, " -p port Remote RMCP port [default=623]");
|
lprintf(LOG_NOTICE, " -p port Remote RMCP port [default=623]");
|
||||||
@ -283,6 +284,7 @@ ipmi_main(int argc, char ** argv,
|
|||||||
char * kgkey = NULL;
|
char * kgkey = NULL;
|
||||||
char * seloem = NULL;
|
char * seloem = NULL;
|
||||||
int port = 0;
|
int port = 0;
|
||||||
|
int devnum = 0;
|
||||||
int cipher_suite_id = 3; /* See table 22-19 of the IPMIv2 spec */
|
int cipher_suite_id = 3; /* See table 22-19 of the IPMIv2 spec */
|
||||||
int argflag, i, found;
|
int argflag, i, found;
|
||||||
int rc = -1;
|
int rc = -1;
|
||||||
@ -325,6 +327,9 @@ ipmi_main(int argc, char ** argv,
|
|||||||
rc = 0;
|
rc = 0;
|
||||||
goto out_free;
|
goto out_free;
|
||||||
break;
|
break;
|
||||||
|
case 'd':
|
||||||
|
devnum = atoi(optarg);
|
||||||
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
port = atoi(optarg);
|
port = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
@ -582,6 +587,8 @@ ipmi_main(int argc, char ** argv,
|
|||||||
/* setup destination channel if given */
|
/* setup destination channel if given */
|
||||||
intf->target_channel = target_channel ;
|
intf->target_channel = target_channel ;
|
||||||
|
|
||||||
|
intf->devnum = devnum;
|
||||||
|
|
||||||
/* setup IPMB local and target address if given */
|
/* setup IPMB local and target address if given */
|
||||||
intf->my_addr = my_addr ? : IPMI_BMC_SLAVE_ADDR;
|
intf->my_addr = my_addr ? : IPMI_BMC_SLAVE_ADDR;
|
||||||
if (target_addr > 0) {
|
if (target_addr > 0) {
|
||||||
|
@ -624,7 +624,8 @@ ipmievd_main(struct ipmi_event_intf * eintf, int argc, char ** argv)
|
|||||||
struct sigaction act;
|
struct sigaction act;
|
||||||
|
|
||||||
memset(pidfile, 0, 64);
|
memset(pidfile, 0, 64);
|
||||||
strncpy(pidfile, DEFAULT_PIDFILE, strlen(DEFAULT_PIDFILE));
|
sprintf(pidfile, "%s%d", DEFAULT_PIDFILE, eintf->intf->devnum);
|
||||||
|
lprintf(LOG_NOTICE, "ipmievd: using pidfile %s", pidfile);
|
||||||
|
|
||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
if (strncasecmp(argv[i], "help", 4) == 0) {
|
if (strncasecmp(argv[i], "help", 4) == 0) {
|
||||||
|
@ -63,10 +63,6 @@
|
|||||||
|
|
||||||
extern int verbose;
|
extern int verbose;
|
||||||
|
|
||||||
#define IPMI_OPENIPMI_DEV "/dev/ipmi0"
|
|
||||||
#define IPMI_OPENIPMI_DEVFS "/dev/ipmi/0"
|
|
||||||
#define IPMI_OPENIPMI_DEVFS2 "/dev/ipmidev/0"
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ipmi_openipmi_open(struct ipmi_intf * intf)
|
ipmi_openipmi_open(struct ipmi_intf * intf)
|
||||||
{
|
{
|
||||||
@ -76,17 +72,28 @@ ipmi_openipmi_open(struct ipmi_intf * intf)
|
|||||||
struct ipmi_rs *rsp;
|
struct ipmi_rs *rsp;
|
||||||
char msg_data;
|
char msg_data;
|
||||||
#endif
|
#endif
|
||||||
|
char ipmi_dev[16];
|
||||||
|
char ipmi_devfs[16];
|
||||||
|
char ipmi_devfs2[16];
|
||||||
|
int devnum = 0;
|
||||||
|
|
||||||
intf->fd = open(IPMI_OPENIPMI_DEV, O_RDWR);
|
devnum = intf->devnum;
|
||||||
|
|
||||||
|
sprintf(ipmi_dev, "/dev/ipmi%d", devnum);
|
||||||
|
sprintf(ipmi_devfs, "/dev/ipmi/%d", devnum);
|
||||||
|
sprintf(ipmi_devfs2, "/dev/ipmidev/%d", devnum);
|
||||||
|
lprintf(LOG_DEBUG, "Using ipmi device %d", devnum);
|
||||||
|
|
||||||
|
intf->fd = open(ipmi_dev, O_RDWR);
|
||||||
|
|
||||||
if (intf->fd < 0) {
|
if (intf->fd < 0) {
|
||||||
intf->fd = open(IPMI_OPENIPMI_DEVFS, O_RDWR);
|
intf->fd = open(ipmi_devfs, O_RDWR);
|
||||||
if (intf->fd < 0) {
|
if (intf->fd < 0) {
|
||||||
intf->fd = open(IPMI_OPENIPMI_DEVFS2, O_RDWR);
|
intf->fd = open(ipmi_devfs2, O_RDWR);
|
||||||
}
|
}
|
||||||
if (intf->fd < 0) {
|
if (intf->fd < 0) {
|
||||||
lperror(LOG_ERR, "Could not open device at %s or %s or %s",
|
lperror(LOG_ERR, "Could not open device at %s or %s or %s",
|
||||||
IPMI_OPENIPMI_DEV, IPMI_OPENIPMI_DEVFS , IPMI_OPENIPMI_DEVFS2);
|
ipmi_dev, ipmi_devfs , ipmi_devfs2);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user