From: Dave Hansen <[EMAIL PROTECTED]>
Create sysfs "device" files for hostap
I was writing some scripts to automatically build kismet source lines,
and I noticed that hostap devices don't have device files, unlike my
prism54 and ipw2200 cards:
$ ls -l /sys/class/net/eth0/device
/sys/class/net/eth0/device ->
../../../devices/pci0000:00/0000:00:1e.0/0000:02:01.0
$ ls -l /sys/class/net/wifi0
ls: /sys/class/net/wifi0/device: No such file or directory
$ ls -l /sys/class/net/wlan0
ls: /sys/class/net/wlan0/device: No such file or directory
The following (quite small) patch makes sure that both the wlan and wifi
net devices have that pointer to the bus device.
This way, I can do things like
for i in /sys/class/net/*; do
if ! [ -e $i/device/drive ]; then
continue;
fi;
driver=$(basename $(readlink $i/device/driver))
case $driver in
hostap*)
echo -- hostap,$i,$i-$driver
break;
ipw2?00)
echo -- $driver,$i,$i-$driver
break;
prism54)
echo prism54g,$i
esac
done
Which should generate a working set of source lines for kismet no matter
what order I plug the cards in.
It might also be handy to have a link between the two net devices, but
that's a patch for another day.
That patch is against 2.6.13-rc1-mm1.
-- Dave
Signed-off-by: Dave Hansen <[EMAIL PROTECTED]>
Signed-off-by: Jouni Malinen <[EMAIL PROTECTED]>
Index: netdev-2.6/drivers/net/wireless/hostap/hostap.c
===================================================================
--- netdev-2.6.orig/drivers/net/wireless/hostap/hostap.c
+++ netdev-2.6/drivers/net/wireless/hostap/hostap.c
@@ -137,6 +137,7 @@ struct net_device * hostap_add_interface
if (strchr(dev->name, '%'))
ret = dev_alloc_name(dev, dev->name);
+ SET_NETDEV_DEV(dev, mdev->class_dev.dev);
if (ret >= 0)
ret = register_netdevice(dev);
Index: netdev-2.6/drivers/net/wireless/hostap/hostap_cs.c
===================================================================
--- netdev-2.6.orig/drivers/net/wireless/hostap/hostap_cs.c
+++ netdev-2.6/drivers/net/wireless/hostap/hostap_cs.c
@@ -725,7 +725,8 @@ static int prism2_config(dev_link_t *lin
}
/* Need to allocate net_device before requesting IRQ handler */
- dev = prism2_init_local_data(&prism2_pccard_funcs, 0);
+ dev = prism2_init_local_data(&prism2_pccard_funcs, 0,
+ &handle_to_dev(link->handle));
if (dev == NULL)
goto failed;
link->priv = dev;
Index: netdev-2.6/drivers/net/wireless/hostap/hostap_hw.c
===================================================================
--- netdev-2.6.orig/drivers/net/wireless/hostap/hostap_hw.c
+++ netdev-2.6/drivers/net/wireless/hostap/hostap_hw.c
@@ -3268,7 +3268,8 @@ static void prism2_clear_set_tim_queue(l
static struct net_device *
-prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx)
+prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
+ struct device *sdev)
{
struct net_device *dev;
struct hostap_interface *iface;
@@ -3439,6 +3440,7 @@ while (0)
rtnl_lock();
ret = dev_alloc_name(dev, "wifi%d");
+ SET_NETDEV_DEV(dev, sdev);
if (ret >= 0)
ret = register_netdevice(dev);
rtnl_unlock();
Index: netdev-2.6/drivers/net/wireless/hostap/hostap_pci.c
===================================================================
--- netdev-2.6.orig/drivers/net/wireless/hostap/hostap_pci.c
+++ netdev-2.6/drivers/net/wireless/hostap/hostap_pci.c
@@ -308,7 +308,8 @@ static int prism2_pci_probe(struct pci_d
pci_set_master(pdev);
#endif /* PRISM2_BUS_MASTER */
- dev = prism2_init_local_data(&prism2_pci_funcs, cards_found);
+ dev = prism2_init_local_data(&prism2_pci_funcs, cards_found,
+ &pdev->dev);
if (dev == NULL)
goto fail;
iface = netdev_priv(dev);
Index: netdev-2.6/drivers/net/wireless/hostap/hostap_plx.c
===================================================================
--- netdev-2.6.orig/drivers/net/wireless/hostap/hostap_plx.c
+++ netdev-2.6/drivers/net/wireless/hostap/hostap_plx.c
@@ -522,7 +522,8 @@ static int prism2_plx_probe(struct pci_d
* not present; but are there really such cards in use(?) */
}
- dev = prism2_init_local_data(&prism2_plx_funcs, cards_found);
+ dev = prism2_init_local_data(&prism2_plx_funcs, cards_found,
+ &pdev->dev);
if (dev == NULL)
goto fail;
iface = netdev_priv(dev);
--
--
Jouni Malinen PGP id EFC895FA
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html