Permit dynamic insertion of sensor type codes

The existing sensorTypes flat_map is an immutable data structure. This
makes adding OEM style sensor types difficult. New entries, that may
not be general purpose either need to be pushed upstream for all, or
they have to be updated by carrying a patch. Keeping a patch up to
date is an undesirable method.

Instead of using either of the prior methods, make the flat_map a
writable object. Adding new entries can be done at run time using the
flat_map emplace() function. Adding new sensor types is recommended to
be done by overriding the weak linked getOtherSensorsCount(), placed
in the sensorcommands_oem.cpp file. Using a GCC 'constructor' style
function does not work due to uncertainty of initialization order.

See commit 777cfaf2b3:bb6667fbbea7612255137970c3dbdb
Enable OEM creation of non-Type1 SDRs

Tested:
Added an emplace() call into the strong linked getOtherSensorCommands
Used 'ipmitool sdr dump sdrs.bin'
Inspected the resulting SDR data and confirmed the sensors of interest
had an OEM type code as dictated by the sensorTypes map

Change-Id: Ifcf6297a8b161b720651bc6411409014c37ce88c
Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
2 files changed
tree: b0bda6015bba0c92ed80de26a4f24d0bcd6babfb
  1. app/
  2. dbus-sdr/
  3. docs/
  4. include/
  5. libipmid/
  6. scripts/
  7. softoff/
  8. subprojects/
  9. test/
  10. user_channel/
  11. xyz/
  12. .build.sh
  13. .clang-format
  14. .gitignore
  15. .shellcheck
  16. .travis.yml
  17. apphandler.cpp
  18. apphandler.hpp
  19. chassishandler.cpp
  20. chassishandler.hpp
  21. dcmihandler.cpp
  22. dcmihandler.hpp
  23. error-HostEvent.hpp
  24. fruread.hpp
  25. generate_whitelist.sh
  26. generate_whitelist_create.sh
  27. globalhandler.cpp
  28. globalhandler.hpp
  29. groupext.cpp
  30. host-cmd-manager.cpp
  31. host-cmd-manager.hpp
  32. host-interface.cpp
  33. host-interface.hpp
  34. host-ipmid-whitelist.conf
  35. ipmi_fru_info_area.cpp
  36. ipmi_fru_info_area.hpp
  37. ipmiallowlist.hpp
  38. ipmid-new.cpp
  39. ipmisensor.cpp
  40. LICENSE
  41. meson.build
  42. meson.options
  43. OWNERS
  44. read_fru_data.cpp
  45. read_fru_data.hpp
  46. README.md
  47. selutility.cpp
  48. selutility.hpp
  49. sensordatahandler.cpp
  50. sensordatahandler.hpp
  51. sensorhandler.cpp
  52. sensorhandler.hpp
  53. settings.cpp
  54. settings.hpp
  55. storageaddsel.cpp
  56. storageaddsel.hpp
  57. storagehandler.cpp
  58. storagehandler.hpp
  59. sys_info_param.cpp
  60. sys_info_param.hpp
  61. systemintfcmds.cpp
  62. systemintfcmds.hpp
  63. transportconstants.hpp
  64. transporthandler.cpp
  65. transporthandler.hpp
  66. whitelist-filter.cpp
README.md

Compile ipmid with default options:

meson builddir
ninja -C builddir

Compile ipmid with yocto defaults:

meson builddir -Dbuildtype=minsize -Db_lto=true -Dtests=disabled
ninja -C builddir

If any of the dependencies are not found on the host system during configuration, meson automatically gets them via its wrap dependencies mentioned in ipmid/subprojects.

Enable/Disable meson wrap feature

meson builddir -Dwrap_mode=nofallback
ninja -C builddir

Enable debug traces

meson builddir -Dbuildtype=debug
ninja -C builddir

Generate test coverage report:

meson builddir -Db_coverage=true -Dtests=enabled
ninja -C builddir test
ninja -C builddir coverage