]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: pass rtnl to builtin commands
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 29 Aug 2021 23:20:05 +0000 (08:20 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 31 Aug 2021 12:21:10 +0000 (21:21 +0900)
16 files changed:
src/udev/udev-builtin-blkid.c
src/udev/udev-builtin-btrfs.c
src/udev/udev-builtin-hwdb.c
src/udev/udev-builtin-input_id.c
src/udev/udev-builtin-keyboard.c
src/udev/udev-builtin-kmod.c
src/udev/udev-builtin-net_id.c
src/udev/udev-builtin-net_setup_link.c
src/udev/udev-builtin-path_id.c
src/udev/udev-builtin-uaccess.c
src/udev/udev-builtin-usb_id.c
src/udev/udev-builtin.c
src/udev/udev-builtin.h
src/udev/udev-event.c
src/udev/udev-rules.c
src/udev/udevadm-test-builtin.c

index cdb1df7c04d20f65421d97e5f1305c41c8ce776c..586f083ffa741412fb7513823f5f05a0db453820 100644 (file)
@@ -233,7 +233,7 @@ static int probe_superblocks(blkid_probe pr) {
         return blkid_do_safeprobe(pr);
 }
 
-static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_blkid(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         const char *devnode, *root_partition = NULL, *data, *name;
         _cleanup_(blkid_free_probep) blkid_probe pr = NULL;
         bool noraid = false, is_gpt = false;
index 436bf6bd442d70577a17d5a88a5ba70d672cefed..a0093cb42347f3c6f6d496cdca1fa639fb146524 100644 (file)
@@ -12,7 +12,7 @@
 #include "udev-builtin.h"
 #include "util.h"
 
-static int builtin_btrfs(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_btrfs(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         struct btrfs_ioctl_vol_args args = {};
         _cleanup_close_ int fd = -1;
         int r;
index 87535dbd005469c15acd2ee9f2efab9373a6f381..1241c08f2c5c94a7ada757cfeec6949fcab1e88e 100644 (file)
@@ -118,7 +118,7 @@ next:
         return r;
 }
 
-static int builtin_hwdb(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_hwdb(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         static const struct option options[] = {
                 { "filter", required_argument, NULL, 'f' },
                 { "device", required_argument, NULL, 'd' },
index 08a9e9c65d549a692fda09c100b64634367e2439..0e719108ed914f4362929b280782680c79766dab 100644 (file)
@@ -322,7 +322,7 @@ static bool test_key(sd_device *dev,
         return found;
 }
 
-static int builtin_input_id(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_input_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         sd_device *pdev;
         unsigned long bitmask_ev[NBITS(EV_MAX)];
         unsigned long bitmask_abs[NBITS(ABS_MAX)];
index e6beb190660ec844d029995e4f8462172b6a7f11..cc266cc6634d508da342678746a574e6196cede5 100644 (file)
@@ -159,7 +159,7 @@ static int set_trackpoint_sensitivity(sd_device *dev, const char *value) {
         return 0;
 }
 
-static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_keyboard(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         unsigned release[1024];
         unsigned release_count = 0;
         _cleanup_close_ int fd = -1;
index 0e31002b42e69c6a8ac910ad6d9acc8b61030be0..bc6a11f2410637576ec463f870f38667db723d2e 100644 (file)
@@ -20,7 +20,7 @@ _printf_(6,0) static void udev_kmod_log(void *data, int priority, const char *fi
         log_internalv(priority, 0, file, line, fn, format, args);
 }
 
-static int builtin_kmod(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_kmod(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         if (!ctx)
                 return 0;
 
index f8a519af4649ba5ee9a735263e13a03722817417..7b1ffbcfa6300cd9c9cf68ffb749d7429bf899f8 100644 (file)
@@ -863,7 +863,7 @@ static int ieee_oui(sd_device *dev, struct netnames *names, bool test) {
         return 0;
 }
 
-static int builtin_net_id(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         const char *s, *p, *devtype, *prefix = "en";
         struct netnames names = {};
         unsigned long i;
index 5964e30bf1ad6fc5f1a558f9e17bc6ce555c6004..49492349b25c85f8c8f6fa8f738482b86cad6286 100644 (file)
@@ -10,7 +10,7 @@
 
 static LinkConfigContext *ctx = NULL;
 
-static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool test) {
+static int builtin_net_setup_link(sd_device *dev, sd_netlink **rtnl, int argc, char **argv, bool test) {
         _cleanup_free_ char *driver = NULL;
         const char *name = NULL;
         LinkConfig *link;
index 083ce678036845653fb1cab07d2c7a39e6f8b0b0..de1f8dbaa1171107c7a6076a34f511e359cb1c56 100644 (file)
@@ -530,7 +530,7 @@ static sd_device *handle_ap(sd_device *parent, char **path) {
         return skip_subsystem(parent, "ap");
 }
 
-static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_path_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         sd_device *parent;
         _cleanup_free_ char *path = NULL;
         _cleanup_free_ char *compat_path = NULL;
index 3fdbb88bc4fdb39b4e19abd6de00e289dd3026ac..6e73d9937550a3904af384047237028000dd4d3b 100644 (file)
@@ -16,7 +16,7 @@
 #include "log.h"
 #include "udev-builtin.h"
 
-static int builtin_uaccess(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_uaccess(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         const char *path = NULL, *seat;
         bool changed_acl = false;
         uid_t uid;
index 746fb40e645188ed5775d4cec46bae28a36fae0e..d37469c62b10ad8fe4811c28d0e2f5ec33abc538 100644 (file)
@@ -224,7 +224,7 @@ static int dev_if_packed_info(sd_device *dev, char *ifs_str, size_t len) {
  * 6.) If the device supplies a serial number, this number
  *     is concatenated with the identification with an underscore '_'.
  */
-static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) {
+static int builtin_usb_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) {
         char vendor_str[64] = "";
         char vendor_str_enc[256];
         const char *vendor_id;
index 80d17662b20670ac199f87215019a6352ceb7865..a9095969bdcc0db579d0c67c9af7e88d40f4ebeb 100644 (file)
@@ -107,7 +107,7 @@ UdevBuiltinCommand udev_builtin_lookup(const char *command) {
         return _UDEV_BUILTIN_INVALID;
 }
 
-int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command, bool test) {
+int udev_builtin_run(sd_device *dev, sd_netlink **rtnl, UdevBuiltinCommand cmd, const char *command, bool test) {
         _cleanup_strv_free_ char **argv = NULL;
         int r;
 
@@ -124,7 +124,7 @@ int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command
 
         /* we need '0' here to reset the internal state */
         optind = 0;
-        return builtins[cmd]->cmd(dev, strv_length(argv), argv, test);
+        return builtins[cmd]->cmd(dev, rtnl, strv_length(argv), argv, test);
 }
 
 int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val) {
index 849e5d9e8d98fba6891e6e5b599b8468e6c34679..abfed2c181d9cb0bee2ff30984ac991bfc64fabd 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdbool.h>
 
 #include "sd-device.h"
+#include "sd-netlink.h"
 
 typedef enum {
 #if HAVE_BLKID
@@ -29,7 +30,7 @@ typedef enum {
 
 typedef struct UdevBuiltin {
         const char *name;
-        int (*cmd)(sd_device *dev, int argc, char *argv[], bool test);
+        int (*cmd)(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test);
         const char *help;
         int (*init)(void);
         void (*exit)(void);
@@ -73,7 +74,7 @@ void udev_builtin_exit(void);
 UdevBuiltinCommand udev_builtin_lookup(const char *command);
 const char *udev_builtin_name(UdevBuiltinCommand cmd);
 bool udev_builtin_run_once(UdevBuiltinCommand cmd);
-int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command, bool test);
+int udev_builtin_run(sd_device *dev, sd_netlink **rtnl, UdevBuiltinCommand cmd, const char *command, bool test);
 void udev_builtin_list(void);
 bool udev_builtin_validate(void);
 int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val);
index 2179c8d254b6f8274a6dc7315318528ed975ef1a..3dfdff71128fc3c63bbf7373987d2d8bc3208bb0 100644 (file)
@@ -1073,7 +1073,7 @@ void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec, int timeout_s
 
                 if (builtin_cmd != _UDEV_BUILTIN_INVALID) {
                         log_device_debug(event->dev, "Running built-in command \"%s\"", command);
-                        r = udev_builtin_run(event->dev, builtin_cmd, command, false);
+                        r = udev_builtin_run(event->dev, &event->rtnl, builtin_cmd, command, false);
                         if (r < 0)
                                 log_device_debug_errno(event->dev, r, "Failed to run built-in command \"%s\", ignoring: %m", command);
                 } else {
index cb7de261d5aa2621e547423b75efb05ff831ebdd..3759ac84007c6c00d091ee390134cc1f91bbfd40 100644 (file)
@@ -1829,7 +1829,7 @@ static int udev_rule_apply_token_to_event(
                 (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
                 log_rule_debug(dev, rules, "Importing properties from results of builtin command '%s'", buf);
 
-                r = udev_builtin_run(dev, cmd, buf, false);
+                r = udev_builtin_run(dev, &event->rtnl, cmd, buf, false);
                 if (r < 0) {
                         /* remember failure */
                         log_rule_debug_errno(dev, rules, r, "Failed to run builtin '%s': %m", buf);
index cae2950c8f5f8bc7aa8ad20db60b990620995f48..c266e16849b1c713504f4f75831eb7f59332d517 100644 (file)
@@ -72,6 +72,7 @@ static int parse_argv(int argc, char *argv[]) {
 }
 
 int builtin_main(int argc, char *argv[], void *userdata) {
+        _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         UdevBuiltinCommand cmd;
         int r;
@@ -97,7 +98,7 @@ int builtin_main(int argc, char *argv[], void *userdata) {
                 goto finish;
         }
 
-        r = udev_builtin_run(dev, cmd, arg_command, true);
+        r = udev_builtin_run(dev, &rtnl, cmd, arg_command, true);
         if (r < 0)
                 log_debug_errno(r, "Builtin command '%s' fails: %m", arg_command);