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. For example: root@octeon:~# ./ipmitool hpm check PICMG HPM.1 Upgrade Agent 1.0.8: -------Target Information------- Device Id : 0x12 Device Revision : 0x80 Product Id : 0xbaba Manufacturer Id : 0x400a (Pigeon Point Systems) -------------------------------------------------------------------------- |ID | Name | Versions | | | | Active | Backup | Deferred | -------------------------------------------------------------------------- |* 0|H8S-AMCc F/W | 2.00 10000000 | 2.00 0F000000 | ---.-- -------- | | 1|H8S-AMCc B/L | 2.00 00000000 | ---.-- -------- | ---.-- -------- | | 2|H8S-AMCc F/I | 2.00 10000000 | ---.-- -------- | ---.-- -------- | -------------------------------------------------------------------------- (*) Component requires Payload Cold Reset root@octeon:~# ./ipmitool hpm upgrade hpm1fw.img.16 PICMG HPM.1 Upgrade Agent 1.0.8: Validating firmware image integrity...OK Performing preparation stage... Services may be affected during upgrade. Do you wish to continue? y/n y OK Performing upgrade stage: ------------------------------------------------------------------------------- |ID | Name | Versions | % | | | | Active | Backup | File | | |----|-------------|-----------------|-----------------|-----------------|----| |* 0|H8S-AMCc F/W | 2.00 10000000 | 2.00 0F000000 | 2.00 10000000 |100%| | |Upload Time: 03:09 | Image Size: 143942 | ------------------------------------------------------------------------------- (*) Component requires Payload Cold Reset Firmware upgrade procedure successful root@octeon:~# ./ipmitool hpm check PICMG HPM.1 Upgrade Agent 1.0.8: -------Target Information------- Device Id : 0x12 Device Revision : 0x80 Product Id : 0xbaba Manufacturer Id : 0x400a (Pigeon Point Systems) -------------------------------------------------------------------------- |ID | Name | Versions | | | | Active | Backup | Deferred | -------------------------------------------------------------------------- |* 0|H8S-AMCc F/W | 2.00 10000000 | ---.-- -------- | 2.00 10000000 | | 1|H8S-AMCc B/L | 2.00 00000000 | ---.-- -------- | ---.-- -------- | | 2|H8S-AMCc F/I | 2.00 10000000 | ---.-- -------- | ---.-- -------- | -------------------------------------------------------------------------- (*) Component requires Payload Cold Reset t@octeon:~# ./ipmitool hpm activate PICMG HPM.1 Upgrade Agent 1.0.8: root@octeon:~# ./ipmitool hpm check PICMG HPM.1 Upgrade Agent 1.0.8: -------Target Information------- Device Id : 0x12 Device Revision : 0x80 Product Id : 0xbaba Manufacturer Id : 0x400a (Pigeon Point Systems) -------------------------------------------------------------------------- |ID | Name | Versions | | | | Active | Backup | Deferred | -------------------------------------------------------------------------- |* 0|H8S-AMCc F/W | 2.00 10000000 | 2.00 10000000 | ---.-- -------- | | 1|H8S-AMCc B/L | 2.00 00000000 | ---.-- -------- | ---.-- -------- | | 2|H8S-AMCc F/I | 2.00 10000000 | ---.-- -------- | ---.-- -------- | -------------------------------------------------------------------------- (*) Component requires Payload Cold Reset Signed-off-by: Dan Gora <d...@adax.com> --- ipmitool/lib/ipmi_hpmfwupg.c | 204 ++++++++++++++++++++++++++--------------- 1 files changed, 129 insertions(+), 75 deletions(-) diff --git a/ipmitool/lib/ipmi_hpmfwupg.c b/ipmitool/lib/ipmi_hpmfwupg.c index 7704104..27ba044 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"); -- 1.7.7 ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_mar _______________________________________________ Ipmitool-devel mailing list Ipmitool-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipmitool-devel