]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/udev/udev-builtin-net_setup_link.c
Merge pull request #16316 from yuwata/backlight-use-actual-brightness
[thirdparty/systemd.git] / src / udev / udev-builtin-net_setup_link.c
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 static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool test) {
13 _cleanup_free_ char *driver = NULL;
14 const char *name = NULL;
15 link_config *link;
16 int r;
17
18 if (argc > 1)
19 return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "This program takes no arguments.");
20
21 r = link_get_driver(ctx, dev, &driver);
22 if (r >= 0)
23 udev_builtin_add_property(dev, test, "ID_NET_DRIVER", driver);
24
25 r = link_config_get(ctx, dev, &link);
26 if (r < 0) {
27 if (r == -ENOENT)
28 return log_device_debug_errno(dev, r, "No matching link configuration found.");
29
30 return log_device_error_errno(dev, r, "Failed to get link config: %m");
31 }
32
33 r = link_config_apply(ctx, link, dev, &name);
34 if (r < 0)
35 log_device_warning_errno(dev, r, "Could not apply link config, ignoring: %m");
36
37 udev_builtin_add_property(dev, test, "ID_NET_LINK_FILE", link->filename);
38
39 if (name)
40 udev_builtin_add_property(dev, test, "ID_NET_NAME", name);
41
42 return 0;
43 }
44
45 static int builtin_net_setup_link_init(void) {
46 int r;
47
48 if (ctx)
49 return 0;
50
51 r = link_config_ctx_new(&ctx);
52 if (r < 0)
53 return r;
54
55 r = link_config_load(ctx);
56 if (r < 0)
57 return r;
58
59 log_debug("Created link configuration context.");
60 return 0;
61 }
62
63 static void builtin_net_setup_link_exit(void) {
64 link_config_ctx_free(ctx);
65 ctx = NULL;
66 log_debug("Unloaded link configuration context.");
67 }
68
69 static bool builtin_net_setup_link_validate(void) {
70 log_debug("Check if link configuration needs reloading.");
71 if (!ctx)
72 return false;
73
74 return link_config_should_reload(ctx);
75 }
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 };