From 182fd656d22c5f47e9d10c22f9c121c7dd470a40 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Thu, 15 Apr 2004 20:26:18 +0000 Subject: [PATCH] rework these to open on first call to sendrecv --- ipmitool/src/plugins/lipmi/lipmi.c | 23 ++++++++++++++++------- ipmitool/src/plugins/lipmi/lipmi.h | 3 ++- ipmitool/src/plugins/open/open.c | 24 +++++++++++++++--------- ipmitool/src/plugins/open/open.h | 3 ++- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/ipmitool/src/plugins/lipmi/lipmi.c b/ipmitool/src/plugins/lipmi/lipmi.c index a0dfe7a..ba5ed7c 100644 --- a/ipmitool/src/plugins/lipmi/lipmi.c +++ b/ipmitool/src/plugins/lipmi/lipmi.c @@ -49,9 +49,7 @@ #include "lipmi.h" -static int curr_seq; extern int verbose; -struct ipmi_session lan_session; struct ipmi_intf ipmi_lipmi_intf = { .open = ipmi_lipmi_open, @@ -66,17 +64,14 @@ void ipmi_lipmi_close(struct ipmi_intf * intf) intf->fd = -1; } -int ipmi_lipmi_open(struct ipmi_intf * intf, char * dev, - int __unused1, char * __unused2, char * __unused3) +int ipmi_lipmi_open(struct ipmi_intf * intf) { - intf->fd = open(dev ? : LIPMI_DEV, O_RDWR); + intf->fd = open(LIPMI_DEV, O_RDWR); if (intf->fd < 0) { perror("Could not open lipmi device"); return -1; } - curr_seq = 0; - return intf->fd; } @@ -85,6 +80,19 @@ struct ipmi_rs * ipmi_lipmi_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * r struct strioctl istr; static struct lipmi_reqrsp reqrsp; static struct ipmi_rs rsp; + static int curr_seq = 0; + + if (!intf) + return NULL; + + if (!intf->opened) { + intf->opened = 1; + if (intf->open(intf) < 0) { + printf("Unable to open LIPMI interface!\n"); + intf->opened = 0; + return NULL; + } + } memset(&reqrsp, 0, sizeof(reqrsp)); reqrsp.req.fn = req->msg.netfn; @@ -128,3 +136,4 @@ int lipmi_intf_setup(struct ipmi_intf ** intf) } int intf_setup(struct ipmi_intf ** intf) __attribute__ ((weak, alias("lipmi_intf_setup"))); + diff --git a/ipmitool/src/plugins/lipmi/lipmi.h b/ipmitool/src/plugins/lipmi/lipmi.h index 9179109..3385629 100644 --- a/ipmitool/src/plugins/lipmi/lipmi.h +++ b/ipmitool/src/plugins/lipmi/lipmi.h @@ -38,11 +38,12 @@ #define IPMI_LIPMI_H #include +#include #define LIPMI_DEV "/dev/lipmi" struct ipmi_rs * ipmi_lipmi_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req); -int ipmi_lipmi_open(struct ipmi_intf * intf, char * dev, int __unused1, char * __unused2, char * __unused3); +int ipmi_lipmi_open(struct ipmi_intf * intf); void ipmi_lipmi_close(struct ipmi_intf * intf); int lipmi_intf_setup(struct ipmi_intf ** intf); diff --git a/ipmitool/src/plugins/open/open.c b/ipmitool/src/plugins/open/open.c index aa8cc71..cabdef3 100644 --- a/ipmitool/src/plugins/open/open.c +++ b/ipmitool/src/plugins/open/open.c @@ -51,9 +51,7 @@ #include "open.h" -static int curr_seq; extern int verbose; -struct ipmi_session lan_session; struct ipmi_intf ipmi_openipmi_intf = { .open = ipmi_openipmi_open, @@ -67,14 +65,11 @@ void ipmi_openipmi_close(struct ipmi_intf * intf) close(intf->fd); } -int ipmi_openipmi_open(struct ipmi_intf * intf, char * dev, int __unused1, char * __unused2, char * __unused3) +int ipmi_openipmi_open(struct ipmi_intf * intf) { int i = 0; - if (!dev) - intf->fd = open(OPENIPMI_DEV, O_RDWR); - else - intf->fd = open(dev, O_RDWR); + intf->fd = open(OPENIPMI_DEV, O_RDWR); if (intf->fd < 0) { perror("Could not open ipmi device"); @@ -86,8 +81,6 @@ int ipmi_openipmi_open(struct ipmi_intf * intf, char * dev, int __unused1, char return -1; } - curr_seq = 0; - return intf->fd; } @@ -98,8 +91,21 @@ struct ipmi_rs * ipmi_openipmi_send_cmd(struct ipmi_intf * intf, struct ipmi_rq struct ipmi_system_interface_addr bmc_addr; struct ipmi_req _req; static struct ipmi_rs rsp; + static int curr_seq = 0; fd_set rset; + if (!intf) + return NULL; + + if (!intf->opened) { + intf->opened = 1; + if (intf->open(intf) < 0) { + printf("Unable to open OpenIPMI interface!\n"); + intf->opened = 0; + return NULL; + } + } + if (!req) return NULL; diff --git a/ipmitool/src/plugins/open/open.h b/ipmitool/src/plugins/open/open.h index d64e2ee..a61db79 100644 --- a/ipmitool/src/plugins/open/open.h +++ b/ipmitool/src/plugins/open/open.h @@ -38,11 +38,12 @@ #define IPMI_OPENIPMI_H #include +#include #define OPENIPMI_DEV "/dev/ipmi0" struct ipmi_rs * ipmi_openipmi_send_cmd(struct ipmi_intf * intf, struct ipmi_rq * req); -int ipmi_openipmi_open(struct ipmi_intf * intf, char * dev, int __unused1, char * __unused2, char * __unused3); +int ipmi_openipmi_open(struct ipmi_intf * intf); void ipmi_openipmi_close(struct ipmi_intf * intf); int open_intf_setup(struct ipmi_intf ** intf);