1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
3 #include "alloc-util.h"
4 #include "device-util.h"
5 #include "errno-util.h"
6 #include "link-config.h"
8 #include "string-util.h"
9 #include "udev-builtin.h"
11 static LinkConfigContext
*ctx
= NULL
;
13 static int builtin_net_setup_link(sd_device
*dev
, sd_netlink
**rtnl
, int argc
, char **argv
, bool test
) {
14 _cleanup_(link_freep
) Link
*link
= NULL
;
18 return log_device_error_errno(dev
, SYNTHETIC_ERRNO(EINVAL
), "This program takes no arguments.");
20 r
= link_new(ctx
, rtnl
, dev
, &link
);
22 log_device_debug_errno(dev
, r
, "Link vanished while getting information, ignoring.");
26 return log_device_warning_errno(dev
, r
, "Failed to get link information: %m");
29 udev_builtin_add_property(dev
, test
, "ID_NET_DRIVER", link
->driver
);
31 r
= link_get_config(ctx
, link
);
34 log_device_debug_errno(dev
, r
, "No matching link configuration found, ignoring device.");
38 return log_device_error_errno(dev
, r
, "Failed to get link config: %m");
41 r
= link_apply_config(ctx
, rtnl
, link
);
43 log_device_debug_errno(dev
, r
, "Link vanished while applying configuration, ignoring.");
45 log_device_warning_errno(dev
, r
, "Could not apply link configuration, ignoring: %m");
47 udev_builtin_add_property(dev
, test
, "ID_NET_LINK_FILE", link
->config
->filename
);
49 udev_builtin_add_property(dev
, test
, "ID_NET_NAME", link
->new_name
);
54 static int builtin_net_setup_link_init(void) {
60 r
= link_config_ctx_new(&ctx
);
64 r
= link_config_load(ctx
);
68 log_debug("Created link configuration context.");
72 static void builtin_net_setup_link_exit(void) {
73 ctx
= link_config_ctx_free(ctx
);
74 log_debug("Unloaded link configuration context.");
77 static bool builtin_net_setup_link_should_reload(void) {
81 if (link_config_should_reload(ctx
)) {
82 log_debug("Link configuration context needs reloading.");
89 const UdevBuiltin udev_builtin_net_setup_link
= {
90 .name
= "net_setup_link",
91 .cmd
= builtin_net_setup_link
,
92 .init
= builtin_net_setup_link_init
,
93 .exit
= builtin_net_setup_link_exit
,
94 .should_reload
= builtin_net_setup_link_should_reload
,
95 .help
= "Configure network link",