summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-04-01 00:59:58 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:35:13 -0700
commit9b28a52a0ac9b7993c932bbfe9d86dfc814be218 (patch)
tree804f4ed19ff4849415b074771c42e5fec7142b14
parentbbbe503ec1a5623a5a8abd003f46fdd8c3581054 (diff)
downloadsystemd-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.c4
-rw-r--r--udev-add.c17
-rw-r--r--udev-remove.c2
-rw-r--r--udev.h2
-rw-r--r--udev_config.c6
-rw-r--r--udevd.c6
-rw-r--r--udevstart.c5
7 files changed, 23 insertions, 19 deletions
diff --git a/dev_d.c b/dev_d.c
index 0910e4d323..483ceb4b1b 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 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')
diff --git a/udev.h b/udev.h
index 8d13fb5bc3..da02e26bba 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 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); \
}
diff --git a/udevd.c b/udevd.c
index 301625fd92..d464b9a196 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 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) {