};
FAULTD_EVENT_HANDLER_REGISTER(action_executed_event_handler,
- action_executed_eh,
- FAULTD_MODULE_TYPE_ACTION_EXECUTOR)
+ action_executed_eh,
+ FAULTD_MODULE_TYPE_ACTION_EXECUTOR)
};
FAULTD_EVENT_HANDLER_REGISTER(action_executor.handler,
- action_executor_eh,
- FAULTD_MODULE_TYPE_ACTION_EXECUTOR)
+ action_executor_eh,
+ FAULTD_MODULE_TYPE_ACTION_EXECUTOR)
static int action_executor_callback(sd_event_source *s, int fd,
uint32_t revents, void *userdata)
int action_executor_action_register(struct faultd_action *act);
void action_executor_action_unregister(struct faultd_action *act);
-#define FAULTD_ACTION_REGISTER(ACT, NAME) \
-static int action_ ##NAME## _init(struct faultd_module *module, \
+#define FAULTD_ACTION_REGISTER(ACT, NAME) \
+static int action_ ##NAME## _init(struct faultd_module *module, \
struct faultd_config *config, \
sd_event *event_loop) \
{ \
- return action_executor_action_register(&ACT); \
+ return action_executor_action_register(&ACT); \
} \
\
static void action_ ##NAME## _cleanup(struct faultd_module *module) \
{ \
- action_executor_action_unregister(&ACT); \
+ action_executor_action_unregister(&ACT); \
} \
\
static struct faultd_module action_ ##NAME## _module = { \
- .name = #NAME, \
+ .name = #NAME, \
.type = FAULTD_MODULE_TYPE_ACTION, \
- .init = action_ ##NAME## _init, \
- .cleanup = action_ ##NAME## _cleanup, \
- .node = LIST_HEAD_INIT(action_ ##NAME## _module.node), \
+ .init = action_ ##NAME## _init, \
+ .cleanup = action_ ##NAME## _cleanup, \
+ .node = LIST_HEAD_INIT(action_ ##NAME## _module.node), \
}; \
\
FAULTD_MODULE_REGISTER(&action_ ##NAME## _module)
#include "log.h"
#include "systemd_dbus.h"
-#define REBOOT_PARAM_PATH "/run/systemd/reboot-param"
+#define REBOOT_PARAM_PATH "/run/systemd/reboot-param"
#define REBOOT_PARAM "recovery\n"
static int reboot_system_to_recovery(struct faultd_action *action)
static int init_event_factory(struct faultd_module *module,
struct faultd_config *config,
- sd_event *event_loop)
+ sd_event *event_loop)
{
return 0;
}
struct faultd_config *config, \
sd_event *event_loop) \
{ \
- return faultd_event_type_register(&EVENT_TYPE); \
+ return faultd_event_type_register(&EVENT_TYPE); \
} \
- \
+ \
static void CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _cleanup)(struct faultd_module *module) \
{ \
- faultd_event_type_unregister(&EVENT_TYPE); \
+ faultd_event_type_unregister(&EVENT_TYPE); \
} \
- \
+ \
static struct faultd_module CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _module) = { \
- .name = FAULTD_MODNAME, \
- .type = FAULTD_MODULE_TYPE_EVENT, \
- .init = CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _init), \
- .cleanup = CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _cleanup), \
- .node = LIST_HEAD_INIT(CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _module.node)), \
+ .name = FAULTD_MODNAME, \
+ .type = FAULTD_MODULE_TYPE_EVENT, \
+ .init = CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _init), \
+ .cleanup = CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _cleanup), \
+ .node = LIST_HEAD_INIT(CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _module.node)), \
}; \
- \
+ \
FAULTD_MODULE_REGISTER(&CONCAT(CONCAT(event_type_, FAULTD_MODNAME_T), _module))
int faultd_event_create(const char *type, void *data, struct faultd_event **ev);
/* called each time when new event arrived */
static int event_processor_callback(sd_event_source *s,
- int fd, uint32_t revents, void *userdata)
+ int fd, uint32_t revents, void *userdata)
{
struct event_processor *eprocessor = userdata;
struct faultd_event *ev = nqueue_pop(&eprocessor->pending_events,
}
static int event_processor_handler_callback(sd_event_source *s, int fd,
- uint32_t revents, void *userdata)
+ uint32_t revents, void *userdata)
{
struct faultd_event_handler *handler = userdata;
struct faultd_config *config, \
sd_event *event_loop) \
{ \
- return event_processor_handler_register(&EVENT_HANDLER); \
+ return event_processor_handler_register(&EVENT_HANDLER); \
} \
\
static void event_handler_ ##NAME## _cleanup(struct faultd_module *module) \
{ \
- event_processor_handler_unregister(&EVENT_HANDLER); \
+ event_processor_handler_unregister(&EVENT_HANDLER); \
} \
\
static struct faultd_module event_handler_ ##NAME## _module = { \
- .name = #NAME, \
- .type = TYPE, \
- .init = event_handler_ ##NAME## _init, \
- .cleanup = event_handler_ ##NAME## _cleanup, \
- .node = LIST_HEAD_INIT(event_handler_ ##NAME## _module.node), \
+ .name = #NAME, \
+ .type = TYPE, \
+ .init = event_handler_ ##NAME## _init, \
+ .cleanup = event_handler_ ##NAME## _cleanup, \
+ .node = LIST_HEAD_INIT(event_handler_ ##NAME## _module.node), \
}; \
\
FAULTD_MODULE_REGISTER(&event_handler_ ##NAME## _module)
ret = 0;
out:
free(filename);
- while (num-- > 0) {
+ while (num-- > 0)
free(namelist[num]);
- }
free(namelist);
return ret;
break;
case BSON_BINDATA:
switch (bson_iterator_bin_type(&it)) {
- case BSON_BIN_UUID:
- ret = faultd_object_append_uuid(out, key,
- (sd_id128_t *)bson_iterator_bin_data(&it));
- break;
- default:
- ret = -ENOTSUP;
- break;
+ case BSON_BIN_UUID:
+ ret = faultd_object_append_uuid(out, key,
+ (sd_id128_t *)bson_iterator_bin_data(&it));
+ break;
+ default:
+ ret = -ENOTSUP;
+ break;
}
break;
case BSON_OBJECT:
};
FAULTD_EVENT_HANDLER_REGISTER(resource_violation_event_handler,
- resource_violation_eh,
- FAULTD_MODULE_TYPE_DECISION_MAKER)
+ resource_violation_eh,
+ FAULTD_MODULE_TYPE_DECISION_MAKER)
};
FAULTD_EVENT_HANDLER_REGISTER(standard_fault_event_handler,
- standard_fault_eh,
- FAULTD_MODULE_TYPE_DECISION_MAKER)
+ standard_fault_eh,
+ FAULTD_MODULE_TYPE_DECISION_MAKER)
};
FAULTD_EVENT_HANDLER_REGISTER(vip_fault_event_handler,
- vip_fault_eh,
- FAULTD_MODULE_TYPE_DECISION_MAKER)
+ vip_fault_eh,
+ FAULTD_MODULE_TYPE_DECISION_MAKER)
#include "action_executed_event.h"
static int allocate_ae_event(struct faultd_event_type *type,
- void *data, struct faultd_event **ev)
+ void *data, struct faultd_event **ev)
{
struct action_executed_event *ae_ev;
struct ae_event_data *ae_ev_data = data;
#include "decision_made_event.h"
static int allocate_dm_event(struct faultd_event_type *type,
- void *data, struct faultd_event **ev)
+ void *data, struct faultd_event **ev)
{
struct decision_made_event *dm_ev;
struct dm_event_data *dm_ev_data = data;
#include "faultd_started_event.h"
static int fs_event_allocate(struct faultd_event_type *type,
- void *data, struct faultd_event **ev)
+ void *data, struct faultd_event **ev)
{
struct faultd_started_event *fs_ev;
int ret;
static void fs_event_release(struct faultd_event *ev)
{
- struct faultd_started_event *fs_ev =
+ struct faultd_started_event *fs_ev =
to_faultd_started_event(ev);
faultd_event_cleanup_internal(&fs_ev->event);
#include "resource_violation_event.h"
static int allocate_rv_event(struct faultd_event_type *type,
- void *data, struct faultd_event **ev)
+ void *data, struct faultd_event **ev)
{
struct resource_violation_event *rv_ev;
struct rv_event_data *rv_ev_data = data;
#include "service_failed_event.h"
static int allocate_sf_event(struct faultd_event_type *type,
- void *data, struct faultd_event **ev)
+ void *data, struct faultd_event **ev)
{
struct service_failed_event *sf_ev;
struct sf_event_data *sf_ev_data = data;
#include "system_booted_event.h"
static int allocate_sb_event(struct faultd_event_type *type,
- void *data, struct faultd_event **ev)
+ void *data, struct faultd_event **ev)
{
struct system_booted_event *sb_ev;
struct sb_event_data *sb_ev_data = data;
static void sb_event_release(struct faultd_event *ev)
{
- struct system_booted_event *sb_ev=
+ struct system_booted_event *sb_ev =
to_system_booted_event(ev);
faultd_event_cleanup_internal(&sb_ev->event);
static void sb_event_serialize(struct faultd_event *ev, struct faultd_object *out)
{
- struct system_booted_event *sb_ev=
+ struct system_booted_event *sb_ev =
to_system_booted_event(ev);
faultd_event_serialize_internal(ev, out);
void *userdata);
int sigint_handler(sd_event_source *s,
- const struct signalfd_siginfo *si,
- void *userdata)
+ const struct signalfd_siginfo *si,
+ void *userdata)
{
sd_event *loop = userdata;
container_of(MOD, struct systemd_listener, module)
static int on_unit_properties_changed(sd_bus_message *m, void *userdata,
- sd_bus_error *ret_error)
+ sd_bus_error *ret_error)
{
int rc = 1;
const char *interface;
rc = sd_bus_message_exit_container(m);
log_debug(" %s:%s", key, value);
- if (strcmp("failed", value) == 0) {
+ if (strcmp("failed", value) == 0)
has_failed = true;
- }
} else if (strncmp("ConditionTimestamp", key, 18) == 0) {
uint64_t value;
* Should be used only internally
*/
static inline void __list_add(struct list_head *new,
- struct list_head *prev,
- struct list_head *next)
+ struct list_head *prev,
+ struct list_head *next)
{
next->prev = new;
new->next = next;
}
int log_internal(int level,
- int error,
- const char *file,
- int line,
- const char *func,
- const char *format, ...)
+ int error,
+ const char *file,
+ int line,
+ const char *func,
+ const char *format, ...)
{
char buffer[LINE_MAX];
va_list ap;
#include <syslog.h>
#define log_full_errno(level, error, ...) ({ \
- int _l = (level), _e = error; \
- (LOG_PRI(_l) <= log_get_max_level()) ? \
+ int _l = (level), _e = error; \
+ (LOG_PRI(_l) <= log_get_max_level()) ? \
log_internal(_l, _e, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__) \
: -abs(_e); \
})
#define INIT_NQUEUE_NODE(node) INIT_QUEUE_HEAD(node)
static inline int nqueue_append(struct nqueue_head *head,
- struct nqueue_node *new)
+ struct nqueue_node *new)
{
ssize_t ret;
uint64_t buf = 1;
TEST_ENTRY_POINT_NAME(MOD, FUNC)
#define DECLARE_TEST_ENTRY_POINT(MOD, FUNC, RET, ...) \
- extern RET (*TEST_ENTRY_POINT_NAME(MOD, FUNC))(__VA_ARGS__)
+ extern RET(*TEST_ENTRY_POINT_NAME(MOD, FUNC))(__VA_ARGS__)
struct fdtf_test_group {
char *name;
{
for (int i = 0; i < size; ++i) {
switch (data[i].type) {
- case TYPE_OID:
- {
- GET_FAULTD_OBJECT_VAL(faultd_oid_t, val, parent, data[i].key, data[i].type);
- assert_oid_equal(&val, data[i].desired);
- break;
- }
- case TYPE_STRING:
- {
- GET_FAULTD_OBJECT_VAL(char*, val, parent, data[i].key, data[i].type);
- assert_string_equal(val, *(char**)data[i].desired);
- break;
- }
- case TYPE_INT:
- {
- GET_FAULTD_OBJECT_VAL(int, val, parent, data[i].key, data[i].type);
- assert_int_equal(val, *(int*)(data[i].desired));
- break;
- }
- case TYPE_TIMESPEC:
- {
- GET_FAULTD_OBJECT_VAL(struct timespec, val, parent, data[i].key, data[i].type);
- assert_timespec_equal(&val, data[i].desired);
- break;
- }
- case TYPE_TIME_T:
- {
- GET_FAULTD_OBJECT_VAL(time_t, val, parent, data[i].key, data[i].type);
- assert_time_t_equal(val, *(time_t*)data[i].desired);
- break;
- }
- case TYPE_UUID:
- {
- GET_FAULTD_OBJECT_VAL(sd_id128_t, val, parent, data[i].key, data[i].type);
- assert_uuid_equal(&val, data[i].desired);
- break;
- }
- case TYPE_OBJECT:
- {
- struct faultd_object *child;
- int ret;
-
- ret = faultd_object_get_object(parent, data[i].key, &child);
- assert_int_equal(ret, 0);
- test_serialization(data[i].child, data[i].children_num, child);
- break;
- }
- default:
- fprintf(stderr, "Type '%d' is not supported (key: '%s')\n",
- data[i].type, data[i].key);
- fail();
+ case TYPE_OID:
+ {
+ GET_FAULTD_OBJECT_VAL(faultd_oid_t, val, parent, data[i].key, data[i].type);
+ assert_oid_equal(&val, data[i].desired);
break;
+ }
+ case TYPE_STRING:
+ {
+ GET_FAULTD_OBJECT_VAL(char*, val, parent, data[i].key, data[i].type);
+ assert_string_equal(val, *(char**)data[i].desired);
+ break;
+ }
+ case TYPE_INT:
+ {
+ GET_FAULTD_OBJECT_VAL(int, val, parent, data[i].key, data[i].type);
+ assert_int_equal(val, *(int*)(data[i].desired));
+ break;
+ }
+ case TYPE_TIMESPEC:
+ {
+ GET_FAULTD_OBJECT_VAL(struct timespec, val, parent, data[i].key, data[i].type);
+ assert_timespec_equal(&val, data[i].desired);
+ break;
+ }
+ case TYPE_TIME_T:
+ {
+ GET_FAULTD_OBJECT_VAL(time_t, val, parent, data[i].key, data[i].type);
+ assert_time_t_equal(val, *(time_t*)data[i].desired);
+ break;
+ }
+ case TYPE_UUID:
+ {
+ GET_FAULTD_OBJECT_VAL(sd_id128_t, val, parent, data[i].key, data[i].type);
+ assert_uuid_equal(&val, data[i].desired);
+ break;
+ }
+ case TYPE_OBJECT:
+ {
+ struct faultd_object *child;
+ int ret;
+
+ ret = faultd_object_get_object(parent, data[i].key, &child);
+ assert_int_equal(ret, 0);
+ test_serialization(data[i].child, data[i].children_num, child);
+ break;
+ }
+ default:
+ fprintf(stderr, "Type '%d' is not supported (key: '%s')\n",
+ data[i].type, data[i].key);
+ fail();
+ break;
}
}
struct faultd_object,
node);
- while (&child_actual->node != &actual->val.children)
- {
+ while (&child_actual->node != &actual->val.children) {
if (child_actual->type == TYPE_OBJECT) {
assert_faultd_object_equal(child_actual, child_desired);
} else {
str = calloc(len + 1, sizeof(char));
assert_non_null(str);
- for (int i = 0; i < len; ++i) {
+ for (int i = 0; i < len; ++i)
str[i] = generate_char();
- }
str[len] = '\0';
return str;
int faultd_object_count_children(struct faultd_object *obj);
void assert_test_attrs_equal(struct serialized_element *actual,
- struct serialized_element *desired, int size);
+ struct serialized_element *desired, int size);
void assert_faultd_object_equal(struct faultd_object *actual,
struct faultd_object *desired);
void assert_data_equal(int type, void *actual, void *desired);
int fail = 0;
list_for_each_entry(tg, &test_groups, node)
- if((ret = fdtf_run_test_group(tg)) != 0)
+ if ((ret = fdtf_run_test_group(tg)) != 0)
fail = ret;
if (fail != 0)