1 // Copyright 2021 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #pragma once 16 17 #include <cstdint> 18 #include <map> 19 #include <string> 20 #include <tuple> 21 #include <vector> 22 23 namespace google 24 { 25 namespace ipmi 26 { 27 28 using VersionTuple = 29 std::tuple<std::uint8_t, std::uint8_t, std::uint8_t, std::uint8_t>; 30 31 class HandlerInterface 32 { 33 public: 34 virtual ~HandlerInterface() = default; 35 36 /** 37 * Return ethernet details (hard-coded). 38 * 39 * @return tuple of ethernet details (channel, if name). 40 */ 41 virtual std::tuple<std::uint8_t, std::string> 42 getEthDetails(std::string intf) const = 0; 43 44 /** 45 * Return the value of rx_packets, given a if_name. 46 * 47 * @param[in] name, the interface name. 48 * @return the number of packets received. 49 * @throw IpmiException on failure. 50 */ 51 virtual std::int64_t getRxPackets(const std::string& name) const = 0; 52 53 /** 54 * Return the values from a cpld version file. 55 * 56 * @param[in] id - the cpld id number. 57 * @return the quad of numbers as a tuple (maj,min,pt,subpt) 58 * @throw IpmiException on failure. 59 */ 60 virtual VersionTuple getCpldVersion(unsigned int id) const = 0; 61 62 /** 63 * Set the PSU Reset delay. 64 * 65 * @param[in] delay - delay in seconds. 66 * @throw IpmiException on failure. 67 */ 68 virtual void psuResetDelay(std::uint32_t delay) const = 0; 69 70 /** 71 * Arm for PSU reset on host shutdown. 72 * 73 * @throw IpmiException on failure. 74 */ 75 virtual void psuResetOnShutdown() const = 0; 76 77 /** 78 * Return the entity name. 79 * On the first call to this method it'll build the list of entities. 80 * @todo Consider moving the list building to construction time (and ignore 81 * failures). 82 * 83 * @param[in] id - the entity id value 84 * @param[in] instance - the entity instance 85 * @return the entity's name 86 * @throw IpmiException on failure. 87 */ 88 virtual std::string getEntityName(std::uint8_t id, 89 std::uint8_t instance) = 0; 90 91 /** 92 * Return the flash size of bmc chip. 93 * 94 * @return the flash size of bmc chip 95 * @throw IpmiException on failure. 96 */ 97 virtual uint32_t getFlashSize() = 0; 98 99 /** 100 * Return the name of the machine, parsed from release information. 101 * 102 * @return the machine name 103 * @throw IpmiException on failure. 104 */ 105 virtual std::string getMachineName() = 0; 106 107 /** 108 * Populate the i2c-pcie mapping vector. 109 */ 110 virtual void buildI2cPcieMapping() = 0; 111 112 /** 113 * Return the size of the i2c-pcie mapping vector. 114 * 115 * @return the size of the vector holding the i2c-pcie mapping tuples. 116 */ 117 virtual size_t getI2cPcieMappingSize() const = 0; 118 119 /** 120 * Return a copy of the entry in the vector. 121 * 122 * @param[in] entry - the index into the vector. 123 * @return the tuple at that index. 124 */ 125 virtual std::tuple<std::uint32_t, std::string> 126 getI2cEntry(unsigned int entry) const = 0; 127 128 /** 129 * Set the Host Power Off delay. 130 * 131 * @param[in] delay - delay in seconds. 132 * @throw IpmiException on failure. 133 */ 134 virtual void hostPowerOffDelay(std::uint32_t delay) const = 0; 135 }; 136 137 } // namespace ipmi 138 } // namespace google 139