-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
+/* SPDX-License-Identifier: LGPL-2.1+ */
/***
This file is part of systemd.
***/
#include <arpa/inet.h>
-#include <net/if.h>
+#include <libkmod.h>
#include <linux/ip.h>
+#include <net/if.h>
#include <linux/if_tunnel.h>
-#include <libkmod.h>
-#include "util.h"
-#include "macro.h"
#include "sd-netlink.h"
+#include "macro.h"
+#include "module-util.h"
+#include "util.h"
+
static int load_module(const char *mod_name) {
- struct kmod_ctx *ctx;
- struct kmod_list *list = NULL, *l;
+ _cleanup_(kmod_unrefp) struct kmod_ctx *ctx = NULL;
+ _cleanup_(kmod_module_unref_listp) struct kmod_list *list = NULL;
+ struct kmod_list *l;
int r;
ctx = kmod_new(NULL, NULL);
- if (!ctx) {
- kmod_unref(ctx);
- return -ENOMEM;
- }
+ if (!ctx)
+ return log_oom();
r = kmod_module_new_from_lookup(ctx, mod_name, &list);
if (r < 0)
- return -1;
+ return r;
kmod_list_foreach(l, list) {
- struct kmod_module *mod = kmod_module_get_module(l);
+ _cleanup_(kmod_module_unrefp) struct kmod_module *mod = NULL;
- r = kmod_module_probe_insert_module(mod, 0, NULL, NULL, NULL, NULL);
- if (r >= 0)
- r = 0;
- else
- r = -1;
+ mod = kmod_module_get_module(l);
- kmod_module_unref(mod);
+ r = kmod_module_probe_insert_module(mod, 0, NULL, NULL, NULL, NULL);
+ if (r > 0)
+ r = -EINVAL;
}
- kmod_module_unref_list(list);
- kmod_unref(ctx);
-
return r;
}
/* skip test if module cannot be loaded */
r = load_module("ipip");
- if(r < 0)
+ if (r < 0)
return EXIT_TEST_SKIP;
- if(getuid() != 0)
+ if (getuid() != 0)
return EXIT_TEST_SKIP;
/* IPIP tunnel */
assert_se((m = sd_netlink_message_unref(m)) == NULL);
r = load_module("sit");
- if(r < 0)
+ if (r < 0)
return EXIT_TEST_SKIP;
/* sit */
assert_se(sd_netlink_call(rtnl, n, -1, 0) == 1);
- assert_se((m = sd_netlink_message_unref(n)) == NULL);
+ assert_se((n = sd_netlink_message_unref(n)) == NULL);
return EXIT_SUCCESS;
}