eth: Support looking up alternate interace channels
This makes it possible to use the GetEthDevice command to look up
interfaces other than the default NCSI interface.
Change-Id: I3a5563743a28b39adc753d8957f68f0bc330cf3a
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/eth_unittest.cpp b/test/eth_unittest.cpp
index 1053d4b..9807c91 100644
--- a/test/eth_unittest.cpp
+++ b/test/eth_unittest.cpp
@@ -27,10 +27,10 @@
size_t dataLen = request.size();
std::uint8_t reply[MAX_IPMI_BUFFER];
const std::uint8_t expectedAnswer[4] = {'e', 't', 'h', '0'};
- const std::uint8_t expectedChannel = 1;
+ const std::uint8_t expectedChannel = 14;
HandlerMock hMock;
- EXPECT_CALL(hMock, getEthDetails())
+ EXPECT_CALL(hMock, getEthDetails(""))
.WillOnce(Return(std::make_tuple(
expectedChannel,
std::string(expectedAnswer,
@@ -47,5 +47,30 @@
sizeof(expectedAnswer)));
}
+TEST(EthCommandTest, ValidPopulatedReturnsSuccess)
+{
+ std::vector<std::uint8_t> request = {SysOEMCommands::SysGetEthDevice, 'e'};
+ size_t dataLen = request.size();
+ std::uint8_t reply[MAX_IPMI_BUFFER];
+ const std::uint8_t expectedAnswer[1] = {'e'};
+ const std::uint8_t expectedChannel = 11;
+
+ HandlerMock hMock;
+ EXPECT_CALL(hMock, getEthDetails("e"))
+ .WillOnce(Return(std::make_tuple(
+ expectedChannel,
+ std::string(expectedAnswer,
+ expectedAnswer + sizeof(expectedAnswer)))));
+
+ EXPECT_EQ(IPMI_CC_OK,
+ getEthDevice(request.data(), &reply[0], &dataLen, &hMock));
+ struct EthDeviceReply check;
+ std::memcpy(&check, &reply[0], sizeof(check));
+ EXPECT_EQ(check.subcommand, SysOEMCommands::SysGetEthDevice);
+ EXPECT_EQ(check.channel, expectedChannel);
+ EXPECT_EQ(check.ifNameLength, sizeof(expectedAnswer));
+ EXPECT_EQ(0, std::memcmp(expectedAnswer, &reply[sizeof(check)],
+ sizeof(expectedAnswer)));
+}
} // namespace ipmi
} // namespace google