From cee8fc659aa2fd3946974fd7a1a27fca35b420a7 Mon Sep 17 00:00:00 2001 From: Zdenek Styblik Date: Wed, 17 Jul 2013 10:36:07 +0000 Subject: [PATCH] ID: 70 - Fixes and updates for ipmitool hpm Added a new field to show the Deferred firmware version value as part of the 'hpm check' subcommand. The deferred firmware version is the version of the firmware which has been loaded with the 'hpm upgrade' command, but not yet activated. Commit for Dan Gora --- ipmitool/lib/ipmi_hpmfwupg.c | 204 ++++++++++++++++++++++------------- 1 file changed, 129 insertions(+), 75 deletions(-) diff --git a/ipmitool/lib/ipmi_hpmfwupg.c b/ipmitool/lib/ipmi_hpmfwupg.c index 3349dfd..b987f69 100644 --- a/ipmitool/lib/ipmi_hpmfwupg.c +++ b/ipmitool/lib/ipmi_hpmfwupg.c @@ -1014,6 +1014,9 @@ typedef struct _VERSIONINFO unsigned char rollbackMajor; unsigned char rollbackMinor; unsigned char rollbackAux[4]; + unsigned char deferredMajor; + unsigned char deferredMinor; + unsigned char deferredAux[4]; unsigned char imageMajor; unsigned char imageMinor; unsigned char imageAux[4]; @@ -1192,16 +1195,20 @@ void HpmDisplayVersionHeader(int mode) if ( mode & IMAGE_VER) { HpmDisplayLine("-",74 ); - printf("|ID | Name | Versions |\n"); - printf("| | | Active | Backup | File |\n"); + printf( + "|ID | Name | Versions |\n"); + printf( + "| | | Active | Backup | File |\n"); HpmDisplayLine("-",74 ); } else { - HpmDisplayLine("-",56 ); - printf("|ID | Name | Versions |\n"); - printf("| | | Active | Backup |\n"); - HpmDisplayLine("-",56 ); + HpmDisplayLine("-",74 ); + printf( + "|ID | Name | Versions |\n"); + printf( + "| | | Active | Backup | Deferred |\n"); + HpmDisplayLine("-",74 ); } } @@ -1214,70 +1221,89 @@ void HpmDisplayVersionHeader(int mode) *****************************************************************************/ void HpmDisplayVersion(int mode, VERSIONINFO *pVersion, int upgradable) { - char descString[16]; + char descString[16]; - memset(&descString,0x00,sizeof(descString)); - /* - * Added this to ensure that even if the description string - * is more than required it does not give problem in displaying it - */ - strncpy(descString,pVersion->descString,13); - /* - * If the cold reset is required then we can display * on it - * so that user is aware that he needs to do payload power - * cycle after upgrade - */ - printf("|%c%c%2d|%-13s|", - pVersion->coldResetRequired?'*':' ', - upgradable ? '^': ' ', - pVersion->componentId,descString); + memset(&descString,0x00,sizeof(descString)); + /* + * Added this to ensure that even if the description string + * is more than required it does not give problem in displaying it + */ + strncpy(descString,pVersion->descString,13); - if (mode & TARGET_VER) - { - if (pVersion->targetMajor == 0xFF && pVersion->targetMinor == 0xFF) - printf(" ---.-- -------- |"); - else - printf(" %3d.%02x %02X%02X%02X%02X |", - pVersion->targetMajor, - pVersion->targetMinor, - pVersion->targetAux[0], - pVersion->targetAux[1], - pVersion->targetAux[2], - pVersion->targetAux[3] - ); + /* + * If the cold reset is required then we can display * on it + * so that user is aware that he needs to do payload power + * cycle after upgrade + */ + printf("|%c%c%2d|%-13s|", + pVersion->coldResetRequired?'*':' ', + upgradable ? '^': ' ', + pVersion->componentId,descString); - if (mode & ROLLBACK_VER) - { - if (pVersion->rollbackMajor == 0xFF && pVersion->rollbackMinor == 0xFF) - printf(" ---.-- -------- |"); - else - printf(" %3d.%02x %02X%02X%02X%02X |", - pVersion->rollbackMajor, - pVersion->rollbackMinor, - pVersion->rollbackAux[0], - pVersion->rollbackAux[1], - pVersion->rollbackAux[2], - pVersion->rollbackAux[3]); - } - else - { - printf(" ---.-- -------- |"); - } - } + if (mode & TARGET_VER) + { + if ((pVersion->targetMajor == 0xFF || + (pVersion->targetMajor == 0x7F)) && + pVersion->targetMinor == 0xFF) + printf(" ---.-- -------- |"); + else + printf(" %3d.%02x %02X%02X%02X%02X |", + pVersion->targetMajor, + pVersion->targetMinor, + pVersion->targetAux[0], + pVersion->targetAux[1], + pVersion->targetAux[2], + pVersion->targetAux[3]); - if (mode & IMAGE_VER) - { - if (pVersion->imageMajor == 0xFF && pVersion->imageMinor == 0xFF) - printf(" ---.-- |"); - else - printf(" %3d.%02x %02X%02X%02X%02X |", - pVersion->imageMajor, - pVersion->imageMinor, - pVersion->imageAux[0], - pVersion->imageAux[1], - pVersion->imageAux[2], - pVersion->imageAux[3]); - } + if (mode & ROLLBACK_VER) + { + if ((pVersion->rollbackMajor == 0xFF || + (pVersion->rollbackMajor == 0x7F)) && + pVersion->rollbackMinor == 0xFF) + printf(" ---.-- -------- |"); + else + printf(" %3d.%02x %02X%02X%02X%02X |", + pVersion->rollbackMajor, + pVersion->rollbackMinor, + pVersion->rollbackAux[0], + pVersion->rollbackAux[1], + pVersion->rollbackAux[2], + pVersion->rollbackAux[3]); + } + else + printf(" ---.-- -------- |"); + } + + if (mode & IMAGE_VER) + { + if ((pVersion->imageMajor == 0xFF || + (pVersion->imageMajor == 0x7F)) && + pVersion->imageMinor == 0xFF) + printf(" ---.-- |"); + else + printf(" %3d.%02x %02X%02X%02X%02X |", + pVersion->imageMajor, + pVersion->imageMinor, + pVersion->imageAux[0], + pVersion->imageAux[1], + pVersion->imageAux[2], + pVersion->imageAux[3]); + } + else + { + if ((pVersion->deferredMajor == 0xFF || + (pVersion->deferredMajor == 0x7F)) && + pVersion->deferredMinor == 0xFF) + printf(" ---.-- -------- |"); + else + printf(" %3d.%02x %02X%02X%02X%02X |", + pVersion->deferredMajor, + pVersion->deferredMinor, + pVersion->deferredAux[0], + pVersion->deferredAux[1], + pVersion->deferredAux[2], + pVersion->deferredAux[3]); + } } @@ -1397,17 +1423,45 @@ int HpmfwupgTargetCheck(struct ipmi_intf * intf, int option) .Response.rollbackFwVersionResp.rollbackFwVersion[0]; gVersionInfo[componentId].rollbackMinor = getCompProp.resp .Response.rollbackFwVersionResp.rollbackFwVersion[1]; - gVersionInfo[componentId].rollbackAux[0] = getCompProp.resp.Response. - rollbackFwVersionResp.rollbackFwVersion[2]; - gVersionInfo[componentId].rollbackAux[1] = getCompProp.resp.Response. - rollbackFwVersionResp.rollbackFwVersion[3]; - gVersionInfo[componentId].rollbackAux[2] = getCompProp.resp.Response. - rollbackFwVersionResp.rollbackFwVersion[4]; - gVersionInfo[componentId].rollbackAux[3] = getCompProp.resp.Response. - rollbackFwVersionResp.rollbackFwVersion[5]; + gVersionInfo[componentId].rollbackAux[0] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[2]; + gVersionInfo[componentId].rollbackAux[1] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[3]; + gVersionInfo[componentId].rollbackAux[2] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[4]; + gVersionInfo[componentId].rollbackAux[3] = getCompProp.resp.Response.rollbackFwVersionResp.rollbackFwVersion[5]; + } + + getCompProp.req.selector = HPMFWUPG_COMP_DEFERRED_FIRMWARE_VERSION; + rc = HpmfwupgGetComponentProperties(intf, &getCompProp); + if (rc != HPMFWUPG_SUCCESS) + { + lprintf(LOG_NOTICE,"Get CompRollbackVersion Failed for component Id %d\n",componentId); + } else { + gVersionInfo[componentId].deferredMajor = getCompProp.resp + .Response.deferredFwVersionResp.deferredFwVersion[0]; + gVersionInfo[componentId].deferredMinor = getCompProp.resp + .Response.deferredFwVersionResp.deferredFwVersion[1]; + gVersionInfo[componentId].deferredAux[0] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[2]; + gVersionInfo[componentId].deferredAux[1] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[3]; + gVersionInfo[componentId].deferredAux[2] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[4]; + gVersionInfo[componentId].deferredAux[3] = getCompProp.resp.Response.deferredFwVersionResp.deferredFwVersion[5]; } mode |= ROLLBACK_VER; } + else + { + gVersionInfo[componentId].rollbackMajor = 0xff; + gVersionInfo[componentId].rollbackMinor = 0xff; + gVersionInfo[componentId].rollbackAux[0] = 0xff; + gVersionInfo[componentId].rollbackAux[1] = 0xff; + gVersionInfo[componentId].rollbackAux[2] = 0xff; + gVersionInfo[componentId].rollbackAux[3] = 0xff; + + gVersionInfo[componentId].deferredMajor = 0xff; + gVersionInfo[componentId].deferredMinor = 0xff; + gVersionInfo[componentId].deferredAux[0] = 0xff; + gVersionInfo[componentId].deferredAux[1] = 0xff; + gVersionInfo[componentId].deferredAux[2] = 0xff; + gVersionInfo[componentId].deferredAux[3] = 0xff; + } if (gVersionInfo[componentId].coldResetRequired) { @@ -1427,7 +1481,7 @@ int HpmfwupgTargetCheck(struct ipmi_intf * intf, int option) if (option & VIEW_MODE) { - HpmDisplayLine("-",56 ); + HpmDisplayLine("-",74 ); fflush(stdout); lprintf(LOG_NOTICE,"(*) Component requires Payload Cold Reset"); printf("\n\n");