From: kay.sievers@vrfy.org Date: Thu, 1 Apr 2004 08:59:58 +0000 (-0800) Subject: [PATCH] DEVPATH for netdev X-Git-Tag: 024~23 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=9b28a52a0ac9b7993c932bbfe9d86dfc814be218 [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. --- diff --git a/dev_d.c b/dev_d.c index 0910e4d32..483ceb4b1 100644 --- a/dev_d.c +++ b/dev_d.c @@ -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 1f17f50bc..09c2ac6d3 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 c838f15ce..27ff5bc0a 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') diff --git a/udev.h b/udev.h index 8d13fb5bc..da02e26bb 100644 --- a/udev.h +++ b/udev.h @@ -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 fe26850a8..ba04003e9 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); \ } diff --git a/udevd.c b/udevd.c index 301625fd9..d464b9a19 100644 --- a/udevd.c +++ b/udevd.c @@ -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 eda6355b5..7e19c379a 100644 --- a/udevstart.c +++ b/udevstart.c @@ -33,6 +33,7 @@ #include #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) {