1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-31 14:50:15 +03:00

[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.
This commit is contained in:
kay.sievers@vrfy.org 2004-04-01 00:59:58 -08:00 committed by Greg KH
parent bbbe503ec1
commit 9b28a52a0a
7 changed files with 23 additions and 19 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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')

2
udev.h
View File

@ -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;

View File

@ -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); \
}

View File

@ -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) {

View File

@ -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) {