diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-04-01 00:59:58 -0800 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 21:35:13 -0700 |
commit | 9b28a52a0ac9b7993c932bbfe9d86dfc814be218 (patch) | |
tree | 804f4ed19ff4849415b074771c42e5fec7142b14 | |
parent | bbbe503ec1a5623a5a8abd003f46fdd8c3581054 (diff) | |
download | systemd-9b28a52a0ac9b7993c932bbfe9d86dfc814be218.tar.gz |
[PATCH] DEVPATH for netdev
Here we change the DEVPATH for netdev's in the environment of the dev.d/
scripts to the name the device is renamed to. The original name doesn't
exist in the kernel after rename.
-rw-r--r-- | dev_d.c | 4 | ||||
-rw-r--r-- | udev-add.c | 17 | ||||
-rw-r--r-- | udev-remove.c | 2 | ||||
-rw-r--r-- | udev.h | 2 | ||||
-rw-r--r-- | udev_config.c | 6 | ||||
-rw-r--r-- | udevd.c | 6 | ||||
-rw-r--r-- | udevstart.c | 5 |
7 files changed, 23 insertions, 19 deletions
@@ -61,7 +61,7 @@ static int run_program(char *name) * subsystem/ * default/ */ -void dev_d_send(struct udevice *dev, char *subsystem) +void dev_d_send(struct udevice *dev, char *subsystem, char *devpath) { char dirname[256]; char devname[NAME_SIZE]; @@ -74,8 +74,8 @@ void dev_d_send(struct udevice *dev, char *subsystem) strfieldcat(devname, dev->name); } else if (dev->type == 'n') { strfieldcpy(devname, dev->name); + setenv("DEVPATH", devpath, 1); } - setenv("DEVNODE", devname, 1); /* FIXME: bad name for netif */ setenv("DEVNAME", devname, 1); dbg("DEVNAME='%s'", devname); diff --git a/udev-add.c b/udev-add.c index 1f17f50bc3..09c2ac6d3e 100644 --- a/udev-add.c +++ b/udev-add.c @@ -403,7 +403,7 @@ int udev_add_device(char *path, char *subsystem, int fake) { struct sysfs_class_device *class_dev; struct udevice dev; - char key[DEVPATH_SIZE]; + char devpath[DEVPATH_SIZE]; char *pos; int retval; @@ -452,10 +452,11 @@ int udev_add_device(char *path, char *subsystem, int fake) dbg("udevdb_add_dev failed, but we are going to try " "to create the node anyway. But remove might not " "work properly for this device."); + + dev_d_send(&dev, subsystem, path); break; case 'n': - strfieldcpy(key, path); if (strcmp(dev.name, dev.kernel_name) != 0) { retval = rename_net_if(&dev, fake); if (fake || retval != 0) @@ -463,20 +464,20 @@ int udev_add_device(char *path, char *subsystem, int fake) /* netif's are keyed with the configured name, cause * the original kernel name sleeps with the fishes */ - pos = strrchr(key, '/'); + strfieldcpy(devpath, path); + pos = strrchr(devpath, '/'); if (pos != NULL) { pos[1] = '\0'; - strfieldcat(key, dev.name); + strfieldcat(devpath, dev.name); } } - if (udevdb_add_dev(key, &dev) != 0) + if (udevdb_add_dev(devpath, &dev) != 0) dbg("udevdb_add_dev failed"); + + dev_d_send(&dev, subsystem, devpath); break; } - /* execute programs in dev.d/ with the name in the environment */ - dev_d_send(&dev, subsystem); - exit: sysfs_close_class_device(class_dev); diff --git a/udev-remove.c b/udev-remove.c index c838f15ce3..27ff5bc0a2 100644 --- a/udev-remove.c +++ b/udev-remove.c @@ -148,7 +148,7 @@ int udev_remove_device(char *path, char *subsystem) dbg("name='%s'", dev.name); dev.type = get_device_type(path, subsystem); - dev_d_send(&dev, subsystem); + dev_d_send(&dev, subsystem, path); udevdb_delete_dev(path); if (dev.type == 'b' || dev.type == 'c') @@ -65,7 +65,7 @@ extern int udev_add_device(char *path, char *subsystem, int fake); extern int udev_remove_device(char *path, char *subsystem); extern void udev_init_config(void); extern int parse_get_pair(char **orig_string, char **left, char **right); -extern void dev_d_send(struct udevice *dev, char *subsystem); +extern void dev_d_send(struct udevice *dev, char *subsystem, char *devpath); extern char **main_argv; extern char **main_envp; diff --git a/udev_config.c b/udev_config.c index fe26850a87..ba04003e90 100644 --- a/udev_config.c +++ b/udev_config.c @@ -86,13 +86,13 @@ static void init_variables(void) #define set_var(_name, _var) \ if (strcasecmp(variable, _name) == 0) { \ - dbg_parse("%s = '%s'", _name, value); \ - strfieldcpymax(_var, value, sizeof(_var));\ + dbg_parse("%s='%s'", _name, value); \ + strfieldcpy(_var, value);\ } #define set_bool(_name, _var) \ if (strcasecmp(variable, _name) == 0) { \ - dbg_parse("%s = '%s'", _name, value); \ + dbg_parse("%s='%s'", _name, value); \ _var = string_is_true(value); \ } @@ -139,8 +139,10 @@ static void udev_run(struct hotplug_msg *msg) char devpath[DEVPATH_SIZE]; char *env[] = { action, devpath, NULL }; - snprintf(action, sizeof(action), "ACTION=%s", msg->action); - snprintf(devpath, sizeof(devpath), "DEVPATH=%s", msg->devpath); + strcpy(action, "ACTION="); + strfieldcat(action, msg->action); + strcpy(devpath, "DEVPATH="); + strfieldcat(devpath, msg->devpath); pid = fork(); switch (pid) { diff --git a/udevstart.c b/udevstart.c index eda6355b53..7e19c379a5 100644 --- a/udevstart.c +++ b/udevstart.c @@ -33,6 +33,7 @@ #include <unistd.h> #include "logging.h" +#include "udev_lib.h" #ifdef LOG @@ -61,8 +62,8 @@ static void udev_exec(const char *path, const char* subsystem) char nosleep[] = "UDEV_NO_SLEEP=1"; char *env[] = { action, devpath, nosleep, NULL }; - snprintf(devpath, MAX_PATHLEN, "DEVPATH=%s", path); - devpath[MAX_PATHLEN-1] = '\0'; + strcpy(action, "DEVPATH=%s"); + strfieldcat(action, path); pid = fork(); switch (pid) { |