diff options
39 files changed, 137 insertions, 106 deletions
diff --git a/bmc/firmware_handler.cpp b/bmc/firmware_handler.cpp index aaabe83..5f16846 100644 --- a/bmc/firmware_handler.cpp +++ b/bmc/firmware_handler.cpp @@ -16,6 +16,8 @@ #include "firmware_handler.hpp" +#include "data.hpp" +#include "flags.hpp" #include "image_handler.hpp" #include "status.hpp" #include "util.hpp" @@ -511,7 +513,7 @@ bool FirmwareBlobHandler::write(uint16_t session, uint32_t offset, std::vector<std::uint8_t> bytes; - if (item->second->flags & UpdateFlags::ipmi) + if (item->second->flags & FirmwareFlags::UpdateFlags::ipmi) { bytes = data; } @@ -550,7 +552,7 @@ bool FirmwareBlobHandler::writeMeta(uint16_t session, uint32_t offset, return false; } - if (item->second->flags & UpdateFlags::ipmi) + if (item->second->flags & FirmwareFlags::UpdateFlags::ipmi) { return false; } diff --git a/bmc/firmware_handler.hpp b/bmc/firmware_handler.hpp index 8c7cb04..3dd4978 100644 --- a/bmc/firmware_handler.hpp +++ b/bmc/firmware_handler.hpp @@ -51,26 +51,12 @@ struct Session std::string activePath; }; -struct ExtChunkHdr -{ - std::uint32_t length; /* Length of the data queued (little endian). */ -} __attribute__((packed)); - /** * Register only one firmware blob handler that will manage all sessions. */ class FirmwareBlobHandler : public blobs::GenericBlobInterface { public: - enum UpdateFlags : std::uint16_t - { - openRead = (1 << 0), /* Flag for reading. */ - openWrite = (1 << 1), /* Flag for writing. */ - ipmi = (1 << 8), /* Expect to send contents over IPMI BlockTransfer. */ - p2a = (1 << 9), /* Expect to send contents over P2A bridge. */ - lpc = (1 << 10), /* Expect to send contents over LPC bridge. */ - }; - /** The state of the firmware update process. */ enum class UpdateState { diff --git a/bmc/main.cpp b/bmc/main.cpp index 2dd9531..ea27b3d 100644 --- a/bmc/main.cpp +++ b/bmc/main.cpp @@ -18,6 +18,7 @@ #include "file_handler.hpp" #include "firmware_handler.hpp" +#include "flags.hpp" #include "image_handler.hpp" #include "lpc_aspeed.hpp" #include "lpc_handler.hpp" @@ -80,12 +81,12 @@ std::vector<HandlerPack> supportedFirmware = { }; std::vector<DataHandlerPack> supportedTransports = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, #ifdef ENABLE_PCI_BRIDGE - {FirmwareBlobHandler::UpdateFlags::p2a, &pciDataHandler}, + {FirmwareFlags::UpdateFlags::p2a, &pciDataHandler}, #endif #ifdef ENABLE_LPC_BRIDGE - {FirmwareBlobHandler::UpdateFlags::lpc, &lpcDataHandler}, + {FirmwareFlags::UpdateFlags::lpc, &lpcDataHandler}, #endif }; diff --git a/bmc/pci_handler.cpp b/bmc/pci_handler.cpp index 436c63e..1b6b7ff 100644 --- a/bmc/pci_handler.cpp +++ b/bmc/pci_handler.cpp @@ -16,6 +16,8 @@ #include "pci_handler.hpp" +#include "data.hpp" + #include <fcntl.h> #include <linux/aspeed-p2a-ctrl.h> diff --git a/bmc/pci_handler.hpp b/bmc/pci_handler.hpp index 1cafc32..9b2c5b6 100644 --- a/bmc/pci_handler.hpp +++ b/bmc/pci_handler.hpp @@ -10,12 +10,6 @@ namespace ipmi_flash { -/** P2A configuration response. */ -struct PciConfigResponse -{ - std::uint32_t address; -} __attribute__((packed)); - /** * Data handler for reading and writing data via the P2A bridge. * diff --git a/bmc/test/firmware_canhandle_unittest.cpp b/bmc/test/firmware_canhandle_unittest.cpp index dabf8ef..13bf943 100644 --- a/bmc/test/firmware_canhandle_unittest.cpp +++ b/bmc/test/firmware_canhandle_unittest.cpp @@ -1,5 +1,6 @@ #include "data_mock.hpp" #include "firmware_handler.hpp" +#include "flags.hpp" #include "image_mock.hpp" #include "triggerable_mock.hpp" #include "util.hpp" @@ -29,7 +30,7 @@ TEST(FirmwareHandlerCanHandleTest, VerifyItemsInListAreOk) {"bcdf", &imageMock}, }; std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, }; auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( diff --git a/bmc/test/firmware_close_unittest.cpp b/bmc/test/firmware_close_unittest.cpp index 66b9c83..d4e7cf8 100644 --- a/bmc/test/firmware_close_unittest.cpp +++ b/bmc/test/firmware_close_unittest.cpp @@ -33,7 +33,7 @@ TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithDataHandler) EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, hashBlobId)); /* The active hash blob_id was added. */ @@ -60,7 +60,7 @@ TEST_F(FirmwareHandlerCloseTest, CloseSucceedsWithoutDataHandler) EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, hashBlobId)); /* The active hash blob_id was added. */ diff --git a/bmc/test/firmware_commit_unittest.cpp b/bmc/test/firmware_commit_unittest.cpp index b8c651e..a6ab172 100644 --- a/bmc/test/firmware_commit_unittest.cpp +++ b/bmc/test/firmware_commit_unittest.cpp @@ -1,5 +1,6 @@ #include "data_mock.hpp" #include "firmware_handler.hpp" +#include "flags.hpp" #include "image_mock.hpp" #include "triggerable_mock.hpp" #include "util.hpp" @@ -33,7 +34,7 @@ class FirmwareHandlerCommitTest : public ::testing::Test }; data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, }; } }; @@ -55,8 +56,7 @@ TEST_F(FirmwareHandlerCommitTest, VerifyCannotCommitOnFlashImage) EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf")); EXPECT_FALSE(handler->commit(0, {})); } @@ -78,7 +78,7 @@ TEST_F(FirmwareHandlerCommitTest, VerifyCannotCommitOnHashFile) EXPECT_CALL(imageMock1, open(StrEq(hashBlobId))).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, hashBlobId)); EXPECT_FALSE(handler->commit(0, {})); diff --git a/bmc/test/firmware_createhandler_unittest.cpp b/bmc/test/firmware_createhandler_unittest.cpp index dd09cbe..d7b99a6 100644 --- a/bmc/test/firmware_createhandler_unittest.cpp +++ b/bmc/test/firmware_createhandler_unittest.cpp @@ -1,5 +1,6 @@ #include "data_mock.hpp" #include "firmware_handler.hpp" +#include "flags.hpp" #include "image_mock.hpp" #include "triggerable_mock.hpp" #include "util.hpp" @@ -26,8 +27,8 @@ TEST(FirmwareHandlerBlobTest, VerifyFirmwareCounts) }; std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, - {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::lpc, &dataMock}, }; auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( diff --git a/bmc/test/firmware_handler_unittest.cpp b/bmc/test/firmware_handler_unittest.cpp index 27bd517..7ab224d 100644 --- a/bmc/test/firmware_handler_unittest.cpp +++ b/bmc/test/firmware_handler_unittest.cpp @@ -1,4 +1,5 @@ #include "firmware_handler.hpp" +#include "flags.hpp" #include "image_mock.hpp" #include "triggerable_mock.hpp" #include "util.hpp" @@ -18,7 +19,7 @@ using ::testing::UnorderedElementsAreArray; TEST(FirmwareHandlerTest, CreateEmptyListVerifyFails) { std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, }; auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( @@ -49,7 +50,7 @@ TEST(FirmwareHandlerTest, VerifyHashRequiredForHappiness) {"asdf", &imageMock}, }; std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, }; auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( diff --git a/bmc/test/firmware_sessionstat_unittest.cpp b/bmc/test/firmware_sessionstat_unittest.cpp index d2d1896..dcb16d9 100644 --- a/bmc/test/firmware_sessionstat_unittest.cpp +++ b/bmc/test/firmware_sessionstat_unittest.cpp @@ -30,8 +30,7 @@ TEST_F(FirmwareSessionStateTestIpmiOnly, DataTypeIpmiNoMetadata) EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf")); int size = 512; EXPECT_CALL(imageMock, getSize()).WillOnce(Return(size)); @@ -39,7 +38,7 @@ TEST_F(FirmwareSessionStateTestIpmiOnly, DataTypeIpmiNoMetadata) blobs::BlobMeta meta; EXPECT_TRUE(handler->stat(0, &meta)); EXPECT_EQ(meta.blobState, - blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi); + blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi); EXPECT_EQ(meta.size, size); EXPECT_EQ(meta.metadata.size(), 0); } @@ -54,8 +53,7 @@ TEST_F(FirmwareSessionStateTestLpc, DataTypeP2AReturnsMetadata) EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf")); int size = 512; EXPECT_CALL(imageMock, getSize()).WillOnce(Return(size)); @@ -65,7 +63,7 @@ TEST_F(FirmwareSessionStateTestLpc, DataTypeP2AReturnsMetadata) blobs::BlobMeta meta; EXPECT_TRUE(handler->stat(0, &meta)); EXPECT_EQ(meta.blobState, - blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc); + blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc); EXPECT_EQ(meta.size, size); EXPECT_EQ(meta.metadata.size(), mBytes.size()); EXPECT_EQ(meta.metadata[0], mBytes[0]); diff --git a/bmc/test/firmware_stat_unittest.cpp b/bmc/test/firmware_stat_unittest.cpp index 99ae770..021dca8 100644 --- a/bmc/test/firmware_stat_unittest.cpp +++ b/bmc/test/firmware_stat_unittest.cpp @@ -1,4 +1,5 @@ #include "firmware_handler.hpp" +#include "flags.hpp" #include "image_mock.hpp" #include "triggerable_mock.hpp" #include "util.hpp" @@ -25,7 +26,7 @@ TEST(FirmwareHandlerStatTest, StatOnInactiveBlobIDReturnsTransport) {"asdf", &imageMock}, }; std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, }; auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( @@ -34,7 +35,7 @@ TEST(FirmwareHandlerStatTest, StatOnInactiveBlobIDReturnsTransport) blobs::BlobMeta meta; EXPECT_TRUE(handler->stat("asdf", &meta)); - EXPECT_EQ(FirmwareBlobHandler::UpdateFlags::ipmi, meta.blobState); + EXPECT_EQ(FirmwareFlags::UpdateFlags::ipmi, meta.blobState); } } // namespace ipmi_flash diff --git a/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp b/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp index 275763c..bdf6046 100644 --- a/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp +++ b/bmc/test/firmware_state_notyetstarted_tarball_unittest.cpp @@ -56,14 +56,14 @@ class FirmwareHandlerNotYetStartedUbitTest : public ::testing::Test ImageHandlerMock imageMock; std::vector<HandlerPack> blobs; std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}}; + {FirmwareFlags::UpdateFlags::ipmi, nullptr}}; std::unique_ptr<blobs::GenericBlobInterface> handler; TriggerMock* verifyMockPtr; TriggerMock* updateMockPtr; std::uint16_t session = 1; std::uint16_t flags = - blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi; + blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi; }; TEST_F(FirmwareHandlerNotYetStartedUbitTest, diff --git a/bmc/test/firmware_state_notyetstarted_unittest.cpp b/bmc/test/firmware_state_notyetstarted_unittest.cpp index 54ab7f8..8681064 100644 --- a/bmc/test/firmware_state_notyetstarted_unittest.cpp +++ b/bmc/test/firmware_state_notyetstarted_unittest.cpp @@ -76,7 +76,7 @@ TEST_F(FirmwareHandlerNotYetStartedTest, StatEachBlobIdVerifyResults) * transported supported. */ blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; auto blobs = handler->getBlobIds(); diff --git a/bmc/test/firmware_state_updatecompleted_unittest.cpp b/bmc/test/firmware_state_updatecompleted_unittest.cpp index 9e43edb..fd7f583 100644 --- a/bmc/test/firmware_state_updatecompleted_unittest.cpp +++ b/bmc/test/firmware_state_updatecompleted_unittest.cpp @@ -123,7 +123,7 @@ TEST_F(FirmwareHandlerUpdateCompletedTest, StatOnNormalBlobsReturnsSuccess) getToUpdateCompleted(ActionStatus::success); blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId}; diff --git a/bmc/test/firmware_state_updatepending_unittest.cpp b/bmc/test/firmware_state_updatepending_unittest.cpp index d09c820..6f5162f 100644 --- a/bmc/test/firmware_state_updatepending_unittest.cpp +++ b/bmc/test/firmware_state_updatepending_unittest.cpp @@ -164,7 +164,7 @@ TEST_F(FirmwareHandlerUpdatePendingTest, StatOnNormalBlobsReturnsSuccess) getToUpdatePending(); blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; for (const auto& blob : startingBlobs) diff --git a/bmc/test/firmware_state_updatestarted_unittest.cpp b/bmc/test/firmware_state_updatestarted_unittest.cpp index 237e0e9..2e4f020 100644 --- a/bmc/test/firmware_state_updatestarted_unittest.cpp +++ b/bmc/test/firmware_state_updatestarted_unittest.cpp @@ -114,7 +114,7 @@ TEST_F(FirmwareHandlerUpdateStartedTest, StatOnNormalBlobsReturnsSuccess) getToUpdateStarted(); blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId}; diff --git a/bmc/test/firmware_state_uploadinprogress_unittest.cpp b/bmc/test/firmware_state_uploadinprogress_unittest.cpp index 005ca3f..be3269e 100644 --- a/bmc/test/firmware_state_uploadinprogress_unittest.cpp +++ b/bmc/test/firmware_state_uploadinprogress_unittest.cpp @@ -96,7 +96,7 @@ TEST_F(FirmwareHandlerUploadInProgressTest, StatOnNormalBlobsReturnsSuccess) * return the same information as in the notYetStarted state. */ blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; openToInProgress(staticLayoutBlobId); @@ -126,7 +126,7 @@ TEST_F(FirmwareHandlerUploadInProgressTest, blobs::BlobMeta meta, expectedMeta = {}; expectedMeta.size = 32; expectedMeta.blobState = - blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi; + blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi; EXPECT_TRUE(handler->stat(session, &meta)); EXPECT_EQ(expectedMeta, meta); } diff --git a/bmc/test/firmware_state_verificationcompleted_unittest.cpp b/bmc/test/firmware_state_verificationcompleted_unittest.cpp index 8754e15..85f1895 100644 --- a/bmc/test/firmware_state_verificationcompleted_unittest.cpp +++ b/bmc/test/firmware_state_verificationcompleted_unittest.cpp @@ -142,7 +142,7 @@ TEST_F(FirmwareHandlerVerificationCompletedTest, getToVerificationCompleted(ActionStatus::success); blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId}; diff --git a/bmc/test/firmware_state_verificationpending_unittest.cpp b/bmc/test/firmware_state_verificationpending_unittest.cpp index dd2df27..fbcd73d 100644 --- a/bmc/test/firmware_state_verificationpending_unittest.cpp +++ b/bmc/test/firmware_state_verificationpending_unittest.cpp @@ -165,7 +165,7 @@ TEST_F(FirmwareHandlerVerificationPendingTest, StatOnNormalBlobsReturnsSuccess) getToVerificationPending(staticLayoutBlobId); blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId}; diff --git a/bmc/test/firmware_state_verificationstarted_unittest.cpp b/bmc/test/firmware_state_verificationstarted_unittest.cpp index 74e24b2..b183db0 100644 --- a/bmc/test/firmware_state_verificationstarted_unittest.cpp +++ b/bmc/test/firmware_state_verificationstarted_unittest.cpp @@ -195,7 +195,7 @@ TEST_F(FirmwareHandlerVerificationStartedTest, StatOnNormalBlobsReturnsSuccess) getToVerificationStarted(staticLayoutBlobId); blobs::BlobMeta expected; - expected.blobState = FirmwareBlobHandler::UpdateFlags::ipmi; + expected.blobState = FirmwareFlags::UpdateFlags::ipmi; expected.size = 0; std::vector<std::string> testBlobs = {staticLayoutBlobId, hashBlobId}; diff --git a/bmc/test/firmware_unittest.hpp b/bmc/test/firmware_unittest.hpp index 8d92fe8..6b97289 100644 --- a/bmc/test/firmware_unittest.hpp +++ b/bmc/test/firmware_unittest.hpp @@ -2,6 +2,7 @@ #include "data_mock.hpp" #include "firmware_handler.hpp" +#include "flags.hpp" #include "image_mock.hpp" #include "triggerable_mock.hpp" @@ -121,7 +122,7 @@ class IpmiOnlyFirmwareStaticTest : public ::testing::Test ImageHandlerMock imageMock; std::vector<HandlerPack> blobs; std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}}; + {FirmwareFlags::UpdateFlags::ipmi, nullptr}}; std::unique_ptr<blobs::GenericBlobInterface> handler; TriggerMock* prepareMockPtr; TriggerMock* verifyMockPtr; @@ -129,7 +130,7 @@ class IpmiOnlyFirmwareStaticTest : public ::testing::Test std::uint16_t session = 1; std::uint16_t flags = - blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi; + blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi; std::vector<std::string> startingBlobs = {staticLayoutBlobId, hashBlobId}; }; @@ -140,7 +141,7 @@ class IpmiOnlyFirmwareTest : public ::testing::Test ImageHandlerMock imageMock; std::vector<HandlerPack> blobs; std::vector<DataHandlerPack> data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}}; + {FirmwareFlags::UpdateFlags::ipmi, nullptr}}; std::unique_ptr<blobs::GenericBlobInterface> handler; void SetUp() override @@ -171,8 +172,8 @@ class FakeLpcFirmwareTest : public ::testing::Test {"asdf", &imageMock}, }; data = { - {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}, - {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock}, + {FirmwareFlags::UpdateFlags::ipmi, nullptr}, + {FirmwareFlags::UpdateFlags::lpc, &dataMock}, }; handler = FirmwareBlobHandler::CreateFirmwareBlobHandler( blobs, data, CreateTriggerMock(), CreateTriggerMock(), diff --git a/bmc/test/firmware_write_unittest.cpp b/bmc/test/firmware_write_unittest.cpp index d74f3c8..b3353c9 100644 --- a/bmc/test/firmware_write_unittest.cpp +++ b/bmc/test/firmware_write_unittest.cpp @@ -1,3 +1,4 @@ +#include "data.hpp" #include "data_mock.hpp" #include "firmware_handler.hpp" #include "firmware_unittest.hpp" @@ -30,8 +31,7 @@ TEST_F(FirmwareHandlerWriteTestIpmiOnly, DataTypeIpmiWriteSuccess) EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf")); std::vector<std::uint8_t> bytes = {0xaa, 0x55}; @@ -46,8 +46,7 @@ TEST_F(FirmwareHandlerWriteTestLpc, DataTypeNonIpmiWriteSuccess) EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf")); struct ExtChunkHdr request; request.length = 4; /* number of bytes to read. */ @@ -70,8 +69,7 @@ TEST_F(FirmwareHandlerWriteTestLpc, DataTypeNonIpmiWriteFailsBadRequest) EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf")); struct ExtChunkHdr request; request.length = 4; /* number of bytes to read. */ diff --git a/bmc/test/firmware_writemeta_unittest.cpp b/bmc/test/firmware_writemeta_unittest.cpp index 491d669..cb1c965 100644 --- a/bmc/test/firmware_writemeta_unittest.cpp +++ b/bmc/test/firmware_writemeta_unittest.cpp @@ -24,8 +24,7 @@ TEST_F(FirmwareHandlerWriteMetaTest, WriteConfigParametersFailIfOverIPMI) EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::ipmi, "asdf")); std::vector<std::uint8_t> bytes = {0xaa, 0x55}; @@ -38,8 +37,7 @@ TEST_F(FirmwareHandlerWriteMetaTest, WriteConfigParametersPassedThrough) EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true)); EXPECT_TRUE(handler->open( - 0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, - "asdf")); + 0, blobs::OpenFlags::write | FirmwareFlags::UpdateFlags::lpc, "asdf")); std::vector<std::uint8_t> bytes = {0x01, 0x02, 0x03, 0x04}; diff --git a/configure.ac b/configure.ac index 929413a..756c89b 100644 --- a/configure.ac +++ b/configure.ac @@ -64,6 +64,12 @@ AS_IF([test "x$enable_build_host_tool" != "xyes"], [ ) PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging]) + + AC_CHECK_HEADER( + [blobs-ipmid/blobs.hpp], + [], + [AC_MSG_ERROR(["phosphor-ipmi-blobs required and not found."])] + ) ]) # These packages are required for both the BMC and the host-tool. @@ -81,11 +87,6 @@ PKG_CHECK_MODULES( [], [AC_MSG_ERROR([Could not find libpci... pciutils package required])] ) -AC_CHECK_HEADER( - [blobs-ipmid/blobs.hpp], - [], - [AC_MSG_ERROR(["phosphor-ipmi-blobs required and not found."])] -) AX_PTHREAD([], [AC_MSG_ERROR(["pthread required and not found"])]) # Configurability diff --git a/data.hpp b/data.hpp new file mode 100644 index 0000000..6ef8911 --- /dev/null +++ b/data.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include <cstdint> + +namespace ipmi_flash +{ + +struct ExtChunkHdr +{ + std::uint32_t length; /* Length of the data queued (little endian). */ +} __attribute__((packed)); + +/** P2A configuration response. */ +struct PciConfigResponse +{ + std::uint32_t address; +} __attribute__((packed)); + +} // namespace ipmi_flash diff --git a/flags.hpp b/flags.hpp new file mode 100644 index 0000000..d7c89d5 --- /dev/null +++ b/flags.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include <cstdint> + +namespace ipmi_flash +{ + +class FirmwareFlags +{ + public: + enum UpdateFlags : std::uint16_t + { + openRead = (1 << 0), /* Flag for reading. */ + openWrite = (1 << 1), /* Flag for writing. */ + ipmi = (1 << 8), /* Expect to send contents over IPMI BlockTransfer. */ + p2a = (1 << 9), /* Expect to send contents over P2A bridge. */ + lpc = (1 << 10), /* Expect to send contents over LPC bridge. */ + }; +}; + +} // namespace ipmi_flash diff --git a/tools/Makefile.am b/tools/Makefile.am index 96f8a7e..e54b301 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -4,14 +4,12 @@ burn_my_bmc_SOURCES = main.cpp burn_my_bmc_LDADD = libupdater.la $(CODE_COVERAGE_LIBS) burn_my_bmc_CXXFLAGS = \ -I$(top_srcdir) \ - -I$(top_srcdir)/bmc/ \ $(CODE_COVERAGE_CXXFLAGS) noinst_LTLIBRARIES = libupdater.la libupdater_la_LDFLAGS = -static $(CODE_COVERAGE_LIBS) $(IPMIBLOB_LIBS) $(PCILIB_LIBS) libupdater_la_CXXFLAGS = \ -I$(top_srcdir) \ - -I$(top_srcdir)/bmc/ \ $(CODE_COVERAGE_CXXFLAGS) \ $(IPMIBLOB_CFLAGS) \ $(PCILIB_CFLAGS) diff --git a/tools/bt.hpp b/tools/bt.hpp index 9caac5d..729f74d 100644 --- a/tools/bt.hpp +++ b/tools/bt.hpp @@ -17,9 +17,9 @@ class BtDataHandler : public DataInterface sys(sys){}; bool sendContents(const std::string& input, std::uint16_t session) override; - ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override + ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const override { - return ipmi_flash::FirmwareBlobHandler::UpdateFlags::ipmi; + return ipmi_flash::FirmwareFlags::UpdateFlags::ipmi; } private: diff --git a/tools/handler.cpp b/tools/handler.cpp index 147a457..65596f5 100644 --- a/tools/handler.cpp +++ b/tools/handler.cpp @@ -16,13 +16,13 @@ #include "handler.hpp" +#include "flags.hpp" #include "helper.hpp" #include "status.hpp" #include "tool_errors.hpp" #include "util.hpp" #include <algorithm> -#include <blobs-ipmid/blobs.hpp> #include <cstdint> #include <cstring> #include <ipmiblob/blob_errors.hpp> @@ -85,7 +85,8 @@ void UpdateHandler::sendFile(const std::string& target, const std::string& path) { session = blob->openBlob( target, static_cast<std::uint16_t>(supported) | - static_cast<std::uint16_t>(blobs::OpenFlags::write)); + static_cast<std::uint16_t>( + ipmi_flash::FirmwareFlags::UpdateFlags::openWrite)); } catch (const ipmiblob::BlobException& b) { @@ -113,7 +114,8 @@ bool UpdateHandler::verifyFile(const std::string& target) try { session = blob->openBlob( - target, static_cast<std::uint16_t>(blobs::OpenFlags::write)); + target, static_cast<std::uint16_t>( + ipmi_flash::FirmwareFlags::UpdateFlags::openWrite)); } catch (const ipmiblob::BlobException& b) { @@ -162,9 +164,10 @@ void UpdateHandler::cleanArtifacts() try { std::fprintf(stderr, "Opening the cleanup blob\n"); - session = - blob->openBlob(ipmi_flash::cleanupBlobId, - static_cast<std::uint16_t>(blobs::OpenFlags::write)); + session = blob->openBlob( + ipmi_flash::cleanupBlobId, + static_cast<std::uint16_t>( + ipmi_flash::FirmwareFlags::UpdateFlags::openWrite)); } catch (...) { diff --git a/tools/interface.hpp b/tools/interface.hpp index ae341ec..2c993bf 100644 --- a/tools/interface.hpp +++ b/tools/interface.hpp @@ -1,6 +1,6 @@ #pragma once -#include "firmware_handler.hpp" +#include "flags.hpp" #include <cstdint> #include <string> @@ -30,8 +30,7 @@ class DataInterface * * @return the enum value corresponding to the supported type. */ - virtual ipmi_flash::FirmwareBlobHandler::UpdateFlags - supportedType() const = 0; + virtual ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const = 0; }; } // namespace host_tool diff --git a/tools/lpc.cpp b/tools/lpc.cpp index 9359b92..7dbfaf3 100644 --- a/tools/lpc.cpp +++ b/tools/lpc.cpp @@ -16,9 +16,14 @@ #include "lpc.hpp" +#include "data.hpp" + #include <cerrno> +#include <cstdint> #include <cstring> #include <ipmiblob/blob_errors.hpp> +#include <memory> +#include <string> namespace host_tool { diff --git a/tools/lpc.hpp b/tools/lpc.hpp index 32e1d8c..2c3a723 100644 --- a/tools/lpc.hpp +++ b/tools/lpc.hpp @@ -28,9 +28,9 @@ class LpcDataHandler : public DataInterface io(io), address(address), length(length), sys(sys){}; bool sendContents(const std::string& input, std::uint16_t session) override; - ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override + ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const override { - return ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc; + return ipmi_flash::FirmwareFlags::UpdateFlags::lpc; } private: diff --git a/tools/p2a.cpp b/tools/p2a.cpp index 9e246ae..66fc62e 100644 --- a/tools/p2a.cpp +++ b/tools/p2a.cpp @@ -16,12 +16,15 @@ #include "p2a.hpp" -#include "firmware_handler.hpp" +#include "data.hpp" +#include "flags.hpp" #include "pci.hpp" -#include "pci_handler.hpp" +#include <cstdint> #include <cstring> #include <ipmiblob/blob_errors.hpp> +#include <memory> +#include <string> namespace host_tool { diff --git a/tools/p2a.hpp b/tools/p2a.hpp index 920422f..c84f12d 100644 --- a/tools/p2a.hpp +++ b/tools/p2a.hpp @@ -30,9 +30,9 @@ class P2aDataHandler : public DataInterface } bool sendContents(const std::string& input, std::uint16_t session) override; - ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override + ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const override { - return ipmi_flash::FirmwareBlobHandler::UpdateFlags::p2a; + return ipmi_flash::FirmwareFlags::UpdateFlags::p2a; } private: diff --git a/tools/test/Makefile.am b/tools/test/Makefile.am index a0e2912..c05654b 100644 --- a/tools/test/Makefile.am +++ b/tools/test/Makefile.am @@ -3,7 +3,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/ \ -I$(top_srcdir)/tools/ \ - -I$(top_srcdir)/bmc \ $(GTEST_CFLAGS) \ $(GMOCK_CFLAGS) \ $(CODE_COVERAGE_CPPFLAGS) diff --git a/tools/test/data_interface_mock.hpp b/tools/test/data_interface_mock.hpp index 3189e5b..0ee799b 100644 --- a/tools/test/data_interface_mock.hpp +++ b/tools/test/data_interface_mock.hpp @@ -14,8 +14,7 @@ class DataInterfaceMock : public DataInterface virtual ~DataInterfaceMock() = default; MOCK_METHOD2(sendContents, bool(const std::string&, std::uint16_t)); - MOCK_CONST_METHOD0(supportedType, - ipmi_flash::FirmwareBlobHandler::UpdateFlags()); + MOCK_CONST_METHOD0(supportedType, ipmi_flash::FirmwareFlags::UpdateFlags()); }; } // namespace host_tool diff --git a/tools/test/tools_updater_unittest.cpp b/tools/test/tools_updater_unittest.cpp index 85f86bc..0c9e6b5 100644 --- a/tools/test/tools_updater_unittest.cpp +++ b/tools/test/tools_updater_unittest.cpp @@ -1,11 +1,11 @@ #include "data_interface_mock.hpp" +#include "flags.hpp" #include "status.hpp" #include "tool_errors.hpp" #include "updater.hpp" #include "updater_mock.hpp" #include "util.hpp" -#include <blobs-ipmid/blobs.hpp> #include <ipmiblob/test/blob_interface_mock.hpp> #include <string> @@ -32,8 +32,8 @@ class UpdateHandlerTest : public ::testing::Test TEST_F(UpdateHandlerTest, CheckAvailableSuccess) { ipmiblob::StatResponse statObj = {}; - statObj.blob_state = ipmi_flash::FirmwareBlobHandler::UpdateFlags::ipmi | - ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc; + statObj.blob_state = ipmi_flash::FirmwareFlags::UpdateFlags::ipmi | + ipmi_flash::FirmwareFlags::UpdateFlags::lpc; EXPECT_CALL(blobMock, getBlobList()) .WillOnce( @@ -43,7 +43,7 @@ TEST_F(UpdateHandlerTest, CheckAvailableSuccess) .WillOnce(Return(statObj)); EXPECT_CALL(handlerMock, supportedType()) - .WillOnce(Return(ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc)); + .WillOnce(Return(ipmi_flash::FirmwareFlags::UpdateFlags::lpc)); EXPECT_TRUE(updater.checkAvailable(ipmi_flash::staticLayoutBlobId)); } @@ -55,11 +55,12 @@ TEST_F(UpdateHandlerTest, SendFileSuccess) std::uint16_t supported = static_cast<std::uint16_t>( - ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc) | - static_cast<std::uint16_t>(blobs::OpenFlags::write); + ipmi_flash::FirmwareFlags::UpdateFlags::lpc) | + static_cast<std::uint16_t>( + ipmi_flash::FirmwareFlags::UpdateFlags::openWrite); EXPECT_CALL(handlerMock, supportedType()) - .WillOnce(Return(ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc)); + .WillOnce(Return(ipmi_flash::FirmwareFlags::UpdateFlags::lpc)); EXPECT_CALL(blobMock, openBlob(ipmi_flash::staticLayoutBlobId, supported)) .WillOnce(Return(session)); diff --git a/tools/updater.cpp b/tools/updater.cpp index 438fc4a..4d150db 100644 --- a/tools/updater.cpp +++ b/tools/updater.cpp @@ -16,14 +16,13 @@ #include "updater.hpp" -#include "firmware_handler.hpp" +#include "flags.hpp" #include "handler.hpp" #include "status.hpp" #include "tool_errors.hpp" #include "util.hpp" #include <algorithm> -#include <blobs-ipmid/blobs.hpp> #include <cstring> #include <ipmiblob/blob_errors.hpp> #include <memory> |