On Mon, Feb 16, 2009 at 01:00:51PM -0500, Dan Williams wrote:
> On Mon, 2009-02-16 at 18:25 +0100, Daniel Wagner wrote:
> > On Mon, Feb 16, 2009 at 05:04:44PM +0100, Johannes Berg wrote:
> > > On Mon, 2009-02-16 at 17:00 +0100, Daniel Wagner wrote:
> > > 
> > > > hotplug_event_begin_add_dev (..., parent_dev = NULL, ...)
> > > >   net_add(..., parent_dev = NULL, ...)
> > > >   {
> > > >         if (parent_dev == NULL)
> > > >                 goto error;
> > > >   }
> > > > 
> > > > Before I go deeper into that thing, does someone has
> > > > an idea what could go wrong here with mac80211_hwsim?
> > > 
> > > hwsim phys have no parents in sysfs since they're virtual.
> > 
> > Do you propose to patch hald to handle this situation then?
> 
> The patch (for now) would have to go in hal, since obviously if HAL
> can't see it, NM won't.  Until we port over to DeviceKit of course.

Thanks for the information. After looking at HAL for a while and 
knowing that it will be replaced in the near future I decided 
not to write a proper patch. Instead I came up with a big hack. 
With this hack NM sees the mac80211_hwsim devices :)

daniel

---
 hald/linux/device.c |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/hald/linux/device.c b/hald/linux/device.c
index e48548e..699d26b 100644
--- a/hald/linux/device.c
+++ b/hald/linux/device.c
@@ -497,20 +497,22 @@ net_add (const gchar *sysfs_path, const gchar 
*device_file, HalDevice *parent_de
        guint media_type;
        gint flags;
 
-       d = NULL;
-
-       if (parent_dev == NULL)
-               goto error;
-
        d = hal_device_new ();
        hal_device_property_set_string (d, "linux.sysfs_path", sysfs_path);
-       hal_device_property_set_string (d, "info.parent", hal_device_get_udi 
(parent_dev));
+       if (parent_dev != NULL) {
+               hal_device_property_set_string (d, "info.parent", 
hal_device_get_udi (parent_dev));
+               hal_device_property_set_string (d, "net.originating_device", 
hal_device_get_udi (parent_dev));
+       } else {
+               hal_device_property_set_string (d, "info.parent", 
"/org/freedesktop/Hal/devices/computer");
+               hal_device_property_set_string (d, "net.originating_device", 
"/org/freedesktop/Hal/devices/computer");
+               hal_device_property_set_string (d, "info.linux.driver", 
"mac80211_hwsim");
+               parent_dev = hal_device_store_find (hald_get_gdl (), 
"/org/freedesktop/Hal/devices/computer");
+               hal_device_property_set_string (parent_dev, 
"info.linux.driver", "mac80211");
+       }
 
        hal_device_property_set_string (d, "info.category", "net");
        hal_device_add_capability (d, "net");
 
-       hal_device_property_set_string (d, "net.originating_device", 
hal_device_get_udi (parent_dev));
-
        ifname = hal_util_get_last_element (sysfs_path);
        hal_device_property_set_string (d, "net.interface", ifname);
 
@@ -530,7 +532,7 @@ net_add (const gchar *sysfs_path, const gchar *device_file, 
HalDevice *parent_de
        media_type = hal_device_property_get_int (d, "net.arp_proto_hw_id");
        if (media_type == ARPHRD_ETHER) {
                const char *addr;
-               const char *parent_subsys;
+               const char *parent_subsys = 0;
                char bridge_path[HAL_PATH_MAX];
                char wireless_path[HAL_PATH_MAX];
                char wiphy_path[HAL_PATH_MAX];
@@ -557,7 +559,8 @@ net_add (const gchar *sysfs_path, const gchar *device_file, 
HalDevice *parent_de
                snprintf (wireless_path, HAL_PATH_MAX, "%s/wireless", 
sysfs_path);
                /* wireless dscape stack e.g. from rt2500pci driver*/
                snprintf (wiphy_path, HAL_PATH_MAX, "%s/wiphy", sysfs_path);
-               parent_subsys = hal_device_property_get_string (parent_dev, 
"info.subsystem");
+               if (parent_dev)
+                       parent_subsys = hal_device_property_get_string 
(parent_dev, "info.subsystem");
 
                if (parent_subsys && strcmp(parent_subsys, "bluetooth") == 0) {
                        hal_device_property_set_string (d, "info.product", 
"Bluetooth Interface");
-- 
1.6.0.2.GIT

_______________________________________________
NetworkManager-list mailing list
NetworkManager-list@gnome.org
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to