Coverage Report

Created: 2019-06-19 13:33

/src/systemd/src/udev/udev-builtin-net_setup_link.c
Line
Count
Source (jump to first uncovered line)
1
/* SPDX-License-Identifier: LGPL-2.1+ */
2
3
#include "device-util.h"
4
#include "alloc-util.h"
5
#include "link-config.h"
6
#include "log.h"
7
#include "string-util.h"
8
#include "udev-builtin.h"
9
10
static link_config_ctx *ctx = NULL;
11
12
0
static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool test) {
13
0
        _cleanup_free_ char *driver = NULL;
14
0
        const char *name = NULL;
15
0
        link_config *link;
16
0
        int r;
17
0
18
0
        if (argc > 1)
19
0
                return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "This program takes no arguments.");
20
0
21
0
        r = link_get_driver(ctx, dev, &driver);
22
0
        if (r >= 0)
23
0
                udev_builtin_add_property(dev, test, "ID_NET_DRIVER", driver);
24
0
25
0
        r = link_config_get(ctx, dev, &link);
26
0
        if (r < 0) {
27
0
                if (r == -ENOENT)
28
0
                        return log_device_debug_errno(dev, r, "No matching link configuration found.");
29
0
30
0
                return log_device_error_errno(dev, r, "Failed to get link config: %m");
31
0
        }
32
0
33
0
        r = link_config_apply(ctx, link, dev, &name);
34
0
        if (r < 0)
35
0
                log_device_warning_errno(dev, r, "Could not apply link config, ignoring: %m");
36
0
37
0
        udev_builtin_add_property(dev, test, "ID_NET_LINK_FILE", link->filename);
38
0
39
0
        if (name)
40
0
                udev_builtin_add_property(dev, test, "ID_NET_NAME", name);
41
0
42
0
        return 0;
43
0
}
44
45
0
static int builtin_net_setup_link_init(void) {
46
0
        int r;
47
0
48
0
        if (ctx)
49
0
                return 0;
50
0
51
0
        r = link_config_ctx_new(&ctx);
52
0
        if (r < 0)
53
0
                return r;
54
0
55
0
        r = link_config_load(ctx);
56
0
        if (r < 0)
57
0
                return r;
58
0
59
0
        log_debug("Created link configuration context.");
60
0
        return 0;
61
0
}
62
63
0
static void builtin_net_setup_link_exit(void) {
64
0
        link_config_ctx_free(ctx);
65
0
        ctx = NULL;
66
0
        log_debug("Unloaded link configuration context.");
67
0
}
68
69
0
static bool builtin_net_setup_link_validate(void) {
70
0
        log_debug("Check if link configuration needs reloading.");
71
0
        if (!ctx)
72
0
                return false;
73
0
74
0
        return link_config_should_reload(ctx);
75
0
}
76
77
const UdevBuiltin udev_builtin_net_setup_link = {
78
        .name = "net_setup_link",
79
        .cmd = builtin_net_setup_link,
80
        .init = builtin_net_setup_link_init,
81
        .exit = builtin_net_setup_link_exit,
82
        .validate = builtin_net_setup_link_validate,
83
        .help = "Configure network link",
84
        .run_once = false,
85
};