summaryrefslogtreecommitdiff
path: root/kernel
diff options
authorMichael Vogt <mvo@ubuntu.com>2021-09-22 13:40:20 +0200
committerMichael Vogt <mvo@ubuntu.com>2021-09-22 13:40:20 +0200
commit982e8fbf8e0ec5bc938749750b8aef75abf10ba7 (patch)
tree136a5039f3fd9eb6c5305827a13eb955c6a1b0f9 /kernel
parent673cd60a39058f7e31cd9e01470a866923a07ee4 (diff)
fde,devicestate: add new fde.CheckFeatures() and use in DeviceManager
Diffstat (limited to 'kernel')
-rw-r--r--kernel/fde/fde.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/fde/fde.go b/kernel/fde/fde.go
index 65e96679f4..cfe0fc507d 100644
--- a/kernel/fde/fde.go
+++ b/kernel/fde/fde.go
@@ -116,3 +116,28 @@ func InitialSetup(runSetupHook RunSetupHookFunc, params *InitialSetupParams) (*I
}
return res, nil
}
+
+// CheckFeatures returns the features of fde-setup hook.
+func CheckFeatures(runSetupHook RunSetupHookFunc) ([]string, error) {
+ req := &SetupRequest{
+ Op: "features",
+ }
+ output, err := runSetupHook(req)
+ if err != nil {
+ return nil, err
+ }
+ var res struct {
+ Features []string `json:"features"`
+ Error string `json:"error"`
+ }
+ if err := json.Unmarshal(output, &res); err != nil {
+ return nil, fmt.Errorf("cannot parse hook output %q: %v", output, err)
+ }
+ if res.Features == nil && res.Error == "" {
+ return nil, fmt.Errorf(`cannot use hook: neither "features" nor "error" returned`)
+ }
+ if res.Error != "" {
+ return nil, fmt.Errorf("cannot use hook: it returned error: %v", res.Error)
+ }
+ return res.Features, nil
+}