From 19b878add9337a1328f974d685c1b236e126e91a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sat, 27 Nov 2021 13:00:21 +0100 Subject: New upstream version 3.1.8 --- util/ipmilanplus.c | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) (limited to 'util/ipmilanplus.c') diff --git a/util/ipmilanplus.c b/util/ipmilanplus.c index f018b36..d3ea3c3 100644 --- a/util/ipmilanplus.c +++ b/util/ipmilanplus.c @@ -1,7 +1,7 @@ /* * ipmilanplus.c * - * Interface to call libintf_lanplus from ipmitool to do RMCP+ protocol. + * Interface to call libintf_lanplus to do RMCP+ protocol. * * 01/09/07 Andy Cress - created * 02/22/07 Andy Cress - initialize cipher_suite to 3 (was 0) @@ -42,7 +42,10 @@ struct oemvalstr { const char * str; }; int ipmi_open_lan2(char *node, char *user, char *pswd, int fdebugcmd) -{ if (fdebugcmd) verbose = 1; return(LAN_ERR_INVPARAM); } +{ if (fdebugcmd) verbose = 1; + printf("ipmi_open_lan2: lanplus not configured\n"); + return(LAN_ERR_INVPARAM); +} int ipmi_close_lan2(char *node) { return(LAN_ERR_INVPARAM); } @@ -92,7 +95,7 @@ static void sol_output_handler(void *rsp) { return; } static void dbg_dump(char *tag, uchar *pdata, int len, int fascii) { return; } #endif int ipmi_close_lan2(char *node); /*prototype*/ -extern LAN_OPT lanp; /* from ipmicmd.c */ +extern LAN_OPT lanp; /* LAN_OPT global from ipmicmd.c */ //extern char *gnode; /* from ipmicmd.c */ //extern char *guser; /* from ipmicmd.c */ //extern char *gpswd; /* from ipmicmd.c */ @@ -240,6 +243,7 @@ int ipmi_open_lan2(char *node, char *puser, char *pswd, int fdebugcmd) else if (fdebugcmd) fdebugcmd = 1; /*debug, no packets*/ if (fdebugcmd) fdebugcmd = 4; /*max debug*/ #endif + if (fdebugcmd) fdebugcmd = 4; /*max debug ++++*/ switch (fdebugcmd) { case 4: /* max debug */ loglvl = 8; /* 8=(LOG_DEBUG=1, max), 7=LOG_DEBUG */ @@ -315,9 +319,13 @@ int ipmi_open_lan2(char *node, char *puser, char *pswd, int fdebugcmd) strncpy(intf->session->authcode, pswd, n); } rv = intf->open(intf); - if (fdebugcmd) +#ifdef WIN32 + /* this debug can cause problems */ + if (fdebugcmd) printf("lan2 open.intf(auth=%d,priv=%d,cipher=%d) returned %d\n", - lanp.auth_type,lanp.priv,lanp.cipher, rv); + 0,0,0,rv); + // lanp.auth_type,lanp.priv,lanp.cipher, rv); +#endif if (rv != -1) { /*success is >= 0*/ sol_seq = 0; /*init new session, will call inc_sol_seq*/ sol_len = 0; @@ -447,13 +455,15 @@ int ipmi_cmd_lan2(char *node, ushort cmd, uchar *pdata, int sdata, -#define NOEM 4 -static struct { int id; char *name; } oem_list[NOEM] = { - {0x000157, "intelplus"}, /*VENDOR_INTEL*/ - {0x002A7C, "supermicro"}, /*VENDOR_SUPERMICRO*/ - /* { 0, "icts"}, *ICTS testware, needs user option*/ - {0x00000B, "hp"}, /*VENDOR_HP*/ - {0x000002, "ibm"} /*VENDOR_IBM*/ +#define NOEM 5 +static struct { int id; int prod; char *name; } oem_list[NOEM] = { + {0x000157, 0, "intelplus"}, /*VENDOR_INTEL*/ + {0x002A7C, 0, "supermicro"}, /*VENDOR_SUPERMICRO*/ + /* { 0, 0, "icts"}, *ICTS testware, needs user option*/ + {0x000157, 0x002D, "i82571spt"}, /* Intel 82571 MAC with integrated RMCP+ support in super pass-through mode */ + /* Is this ClearBay? Need to verify product id */ + {0x00000B, 0, "hp"}, /*VENDOR_HP*/ + {0x000002, 0, "ibm"} /*VENDOR_IBM*/ }; #ifdef METACOMMAND extern int is_lan2intel(int vend, int prod); /*oem_intel.c*/ @@ -470,11 +480,12 @@ static int is_lan2intel(int vend, int prod) { int ipmi_oem_active(struct ipmi_intf * intf, const char * oemtype) { int i, vend, prod, dtype; + if (intf == NULL || oemtype == NULL) return 0; get_mfgid(&vend,&prod); dtype = get_driver_type(); if (verbose) lprintf(LOG_INFO,"oem_active(is_type==%s ?) vend=%x prod=%x", oemtype,vend,prod); - if (strncmp("intelplus", oemtype, strlen(oemtype)) == 0) { + if (strncmp("intelplus", oemtype, 9) == 0) { /*was strlen(oemtype)*/ /* special case to detect intelplus, not all Intel platforms */ if (dtype == DRV_LAN2I) { i = 1; @@ -492,9 +503,14 @@ int ipmi_oem_active(struct ipmi_intf * intf, const char * oemtype) } else { // if (intf->oem == NULL) return 0; for (i = 0; i < NOEM; i++) { - if (strncmp(oem_list[i].name,oemtype,strlen(oemtype)) == 0) + if (strncmp(oem_list[i].name,oemtype,strlen(oem_list[i].name)) == 0) if (oem_list[i].id == vend) { - if (verbose) lprintf(LOG_WARN,"%s detected, vend=%x",oemtype,vend); + if (strncmp("i82571spt", oemtype, strlen(oem_list[i].name)) == 0) { + /* special case, check product id also */ + if (oem_list[i].prod == prod) i = 1; + else i = 0; + } + if (verbose) lprintf(LOG_WARN,"oem_active: vend=%x detected, %s",vend,oemtype); return 1; } } -- cgit v1.2.3