diff options
author | Matt Spinler <spinler@us.ibm.com> | 2017-02-28 09:37:38 -0600 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2017-03-14 13:21:26 -0500 |
commit | f716f32ab2b6007de5a0f5196d3c4a7e5b6fc6cc (patch) | |
tree | 235ceae4f6745716cf2396ee768882d9567c6d83 /proc_control.cpp | |
parent | 3697b7031b3b9fc9a8e480fb03c0bb46d8d20723 (diff) | |
download | openpower-proc-control-f716f32ab2b6007de5a0f5196d3c4a7e5b6fc6cc.tar.gz openpower-proc-control-f716f32ab2b6007de5a0f5196d3c4a7e5b6fc6cc.zip |
Add startHost and vcsWorkaround stubs
Change-Id: Id696a7735930806373c214da50660ee0ee830598
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Diffstat (limited to 'proc_control.cpp')
-rw-r--r-- | proc_control.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/proc_control.cpp b/proc_control.cpp new file mode 100644 index 0000000..8f6f86c --- /dev/null +++ b/proc_control.cpp @@ -0,0 +1,74 @@ +/** + * Copyright © 2017 IBM Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include <algorithm> +#include <functional> +#include <iostream> +#include <phosphor-logging/log.hpp> +#include "p9_procedures.hpp" + +constexpr auto procedures = +{ + std::make_tuple("startHost", openpower::p9::startHost), + std::make_tuple("vcsWorkaround", openpower::p9::vcsWorkaround) +}; + +void usage(char** argv) +{ + std::cerr << "Usage: " << argv[0] << " [action]\n"; + std::cerr << " actions:\n"; + + for (const auto& p : procedures) + { + std::cerr << " " << std::get<0>(p) << "\n"; + } +} + +int main(int argc, char** argv) +{ + if (argc != 2) + { + usage(argv); + return -1; + } + + std::string action{argv[1]}; + + auto finder = [&action](const auto& p) + { + return std::get<0>(p) == action; + }; + auto procedure = std::find_if(procedures.begin(), procedures.end(), finder); + + if (procedure == procedures.end()) + { + usage(argv); + return -1; + } + + auto function = std::get<1>(*procedure); + try + { + function(); + } + catch (std::exception& e) + { + //TODO: commit an actual error that does a callout + phosphor::logging::log<phosphor::logging::level::ERR>(e.what()); + return -1; + } + + return 0; +} |