1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2013 Tom Gundersen
8 #include "alloc-util.h"
9 #include "link-config.h"
13 static link_config_ctx
*ctx
= NULL
;
15 static int builtin_net_setup_link(struct udev_device
*dev
, int argc
, char **argv
, bool test
) {
16 _cleanup_free_
char *driver
= NULL
;
17 const char *name
= NULL
;
22 log_error("This program takes no arguments.");
26 r
= link_get_driver(ctx
, dev
, &driver
);
28 udev_builtin_add_property(dev
, test
, "ID_NET_DRIVER", driver
);
30 r
= link_config_get(ctx
, dev
, &link
);
33 log_debug("No matching link configuration found.");
36 log_error_errno(r
, "Could not get link config: %m");
41 r
= link_config_apply(ctx
, link
, dev
, &name
);
43 log_warning_errno(r
, "Could not apply link config to %s, ignoring: %m", udev_device_get_sysname(dev
));
45 udev_builtin_add_property(dev
, test
, "ID_NET_LINK_FILE", link
->filename
);
48 udev_builtin_add_property(dev
, test
, "ID_NET_NAME", name
);
53 static int builtin_net_setup_link_init(struct udev
*udev
) {
59 r
= link_config_ctx_new(&ctx
);
63 r
= link_config_load(ctx
);
67 log_debug("Created link configuration context.");
71 static void builtin_net_setup_link_exit(struct udev
*udev
) {
72 link_config_ctx_free(ctx
);
74 log_debug("Unloaded link configuration context.");
77 static bool builtin_net_setup_link_validate(struct udev
*udev
) {
78 log_debug("Check if link configuration needs reloading.");
82 return link_config_should_reload(ctx
);
85 const struct udev_builtin udev_builtin_net_setup_link
= {
86 .name
= "net_setup_link",
87 .cmd
= builtin_net_setup_link
,
88 .init
= builtin_net_setup_link_init
,
89 .exit
= builtin_net_setup_link_exit
,
90 .validate
= builtin_net_setup_link_validate
,
91 .help
= "Configure network link",