From bbbe503ec1a5623a5a8abd003f46fdd8c3581054 Mon Sep 17 00:00:00 2001 From: "kay.sievers@vrfy.org" Date: Wed, 31 Mar 2004 23:12:57 -0800 Subject: [PATCH] netdev - udevdb+dev.d changes Here is a patch to change the netdev handling in the database and for the dev.d/ calls. I applies on top of the udevd.patch, cause klibc has no sysinfo(). o netdev's are also put into our database now. I want this for the udevruler gui to get a list of all handled devices. All devices in the db are stamped with the system uptime value at the creation time. 'udevinfo -d' prints it. o the DEVPATH value is the key for udevdb, but if we rename a netdev, the name is replaced in the kernel, so we add the changed name to the db to match with the remove event. NOTE: The dev.d/ scripts still get the original name from the hotplug call. Should we replace DEVPATH with the new name too? o We now only add a device to the db, if we have successfully created the main node or successfully renamed a netdev. This is the main part of the patch, cause I needed to clean the retval passing trough all the functions used for node creation. o DEVNODE sounds a bit ugly for netdev's so I exported DEVNAME too. Can we change the name? o I've added a UDEV_NO_DEVD to possibly skip the script execution and used it in udev-test.pl. udevstart is the same horror now, if you have scripts with logging statements in dev.d/ it takes minutes to finish, can we skip the scripts here too? o The get_device_type() function is changed to be more strict, cause 'udevinfo -a -p /block/' gets a class device for it and tries to print the major/minor values. o bugfix, the RESULT value has now a working newline removal and a test for this case. --- namedev.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'namedev.c') diff --git a/namedev.c b/namedev.c index 7b70f8bcdf..a3ae1d36b3 100644 --- a/namedev.c +++ b/namedev.c @@ -32,6 +32,9 @@ #include #include #include +#ifndef __KLIBC__ +#include +#endif #include "libsysfs/sysfs/libsysfs.h" #include "list.h" @@ -454,7 +457,7 @@ static int execute_program(char *path, char *value, int len) retval = -1; } - if (i > 0 && value[i] == '\n') + if (i > 0 && value[i-1] == '\n') i--; value[i] = '\0'; dbg("result is '%s'", value); @@ -776,6 +779,7 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud struct sysfs_device *sysfs_device = NULL; struct config_device *dev; struct perm_device *perm; + struct sysinfo info; char *pos; udev->mode = 0; @@ -837,22 +841,18 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud } } } - - /* no rule was found for the net device */ - if (udev->type == 'n') { - dbg("no name for net device '%s' configured", udev->kernel_name); - return -1; - } - /* no rule was found so we use the kernel name */ strfieldcpy(udev->name, udev->kernel_name); - goto done; + if (udev->type == 'n') + goto done; + else + goto perms; found: apply_format(udev, udev->name, sizeof(udev->name), class_dev, sysfs_device); if (udev->type == 'n') - return 0; + goto done; udev->partitions = dev->partitions; strfieldcpy(udev->config_file, dev->config_file); @@ -863,7 +863,7 @@ found: dev->owner, dev->group); -done: +perms: /* get permissions given in config file or set defaults */ perm = find_perm(udev->name); if (perm != NULL) { @@ -879,8 +879,10 @@ done: dbg("name, '%s' is going to have owner='%s', group='%s', mode = %#o", udev->name, udev->owner, udev->group, udev->mode); +done: /* store time of action */ - udev->config_time = time(NULL); + sysinfo(&info); + udev->config_uptime = info.uptime; return 0; } -- cgit v1.2.3-54-g00ecf