Add support for post code handling/eventing
Add support to consume a JSON configuration which
will let a platform configuration to dictate if
we need to do special handling or logging based
on specific post codes received.
Tested:
1. Created the following config and after restarting
`xyz.openbmc_project.State.Boot.PostCode@0.service`:
```
[
{
"primary": [1,2,5],
"event": {
"name": "xyz.openbmc_project.State.SMC.SMCFailed",
"arguments": {
"IDENTIFIER": "test",
"FAILURE_TYPE": "world"
}
}
}
]
```
Created the primary post code:
```
root@bmc:~# busctl set-property xyz.openbmc_project.State.Boot.Raw /xyz/openbmc_project/state/boot/raw0 xyz.openbmc_project.State.Boot.Raw Value '(ayay)' 3 0x1 0x2 0x5 0x0
```
Check that the log is created:
```
root@bmc:~# busctl introspect -l xyz.openbmc_project.Logging /xyz/openbmc_project/logging/entry/2 xyz.openbmc_project.Logging.Entry | grep "AdditionalData\|Message"
.AdditionalData property a{ss} 6 "FAILURE_TYPE" "world" "IDENTIFIER" "test" <snip>
.Message property s "xyz.openbmc_project.State.SMC.SMCFailed"
```
2. Replace the config with:
```
[
{
"primary": [1,2,6],
"targets": ["testservice.service"]
}
]
```
Create a test unit file:
testservice.service:
```
[Unit]
Description=A simple oneshot service
[Service]
Type=oneshot
ExecStart=/bin/bash -c "echo Hello world > /tmp/test.txt"
```
Issue a new post code with the new config.
```
systemctl daemon-reload
systemctl restart xyz.openbmc_project.State.Boot.PostCode@0.service
root@bmc:/usr/lib/systemd/system# busctl set-property xyz.openbmc_project.State.Boot.Raw /xyz/openbmc_project/state/boot/raw0 xyz.openbmc_project.State.Boot.Raw Value '(ayay)' 3 0x1 0x2 0x5 0x0
root@bmc:/usr/lib/systemd/system# cat /tmp/test.txt
Hello world
```
Change-Id: Ibaa09fb88190a344fd7c4fadd24dda4aa4ae0633
Signed-off-by: Amithash Prasad <amithash@meta.com>
diff --git a/meson.build b/meson.build
index c7e9e16..dbb94d6 100644
--- a/meson.build
+++ b/meson.build
@@ -7,6 +7,8 @@
version: '1.0',
)
+# Disable JSON implicit conversions.
+add_project_arguments('-DJSON_USE_IMPLICIT_CONVERSIONS=0', language: 'cpp')
conf_data = configuration_data()
conf_data.set_quoted(
@@ -33,6 +35,7 @@
sdbusplus = dependency('sdbusplus')
phosphor_logging = dependency('phosphor-logging')
phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
+json = dependency('nlohmann_json', include_type: 'system')
cxx = meson.get_compiler('cpp')
cereal_dep = dependency('cereal', required: false)
@@ -66,6 +69,14 @@
strip_directory: true,
)
+packagedir = join_paths(
+ get_option('prefix'),
+ get_option('datadir'),
+ 'phosphor-post-code-manager',
+)
+
+install_data(sources: 'post-code-handlers.json', install_dir: packagedir)
+
executable(
'post-code-manager',
'src/main.cpp',
@@ -76,6 +87,7 @@
phosphor_dbus_interfaces,
phosphor_logging,
cereal_dep,
+ json,
],
include_directories: 'inc',
)