diff options
Diffstat (limited to 'contrib/kyua/engine/requirements.cpp')
| -rw-r--r-- | contrib/kyua/engine/requirements.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/contrib/kyua/engine/requirements.cpp b/contrib/kyua/engine/requirements.cpp index a6a4cae7511c..dff43e531a57 100644 --- a/contrib/kyua/engine/requirements.cpp +++ b/contrib/kyua/engine/requirements.cpp @@ -41,6 +41,10 @@ #include "utils/sanity.hpp" #include "utils/units.hpp" +#ifdef __FreeBSD__ +#include <libutil.h> +#endif + namespace config = utils::config; namespace fs = utils::fs; namespace passwd = utils::passwd; @@ -220,6 +224,26 @@ check_required_programs(const model::paths_set& required_programs) } +#ifdef __FreeBSD__ +/// Checks if all required kmods are loaded. +/// +/// \param required_programs Set of kmods. +/// +/// \return Empty if the required kmods are all loaded or an error +/// message otherwise. +static std::string +check_required_kmods(const model::strings_set& required_kmods) +{ + for (model::strings_set::const_iterator iter = required_kmods.begin(); + iter != required_kmods.end(); iter++) { + if (!kld_isloaded((*iter).c_str())) + return F("Required kmod '%s' not loaded") % *iter; + } + return ""; +} +#endif + + /// Checks if the current system has the specified amount of memory. /// /// \param required_memory Amount of required physical memory, or zero if not @@ -312,6 +336,12 @@ engine::check_reqs(const model::metadata& md, const config::tree& cfg, if (!reason.empty()) return reason; +#ifdef __FreeBSD__ + reason = check_required_kmods(md.required_kmods()); + if (!reason.empty()) + return reason; +#endif + reason = check_required_memory(md.required_memory()); if (!reason.empty()) return reason; |
