2009-01-30 12:35:28

by Johannes Berg

[permalink] [raw]
Subject: [PATCH] mac80211: convert to net_device_ops

Convert to new net_device_ops in 2.6.28 and later.

Signed-off-by: Stephen Hemminger <[email protected]>
Signed-off-by: Johannes Berg <[email protected]>
---
Fixed version of the original patch.

net/mac80211/iface.c | 47 ++++++++++++++++++++++++++++++-----------------
1 file changed, 30 insertions(+), 17 deletions(-)

--- wireless-testing.orig/net/mac80211/iface.c 2009-01-30 13:10:16.000000000 +0100
+++ wireless-testing/net/mac80211/iface.c 2009-01-30 13:10:18.000000000 +0100
@@ -591,19 +591,6 @@ static void ieee80211_set_multicast_list
dev_mc_sync(local->mdev, dev);
}

-static void ieee80211_if_setup(struct net_device *dev)
-{
- ether_setup(dev);
- dev->hard_start_xmit = ieee80211_subif_start_xmit;
- dev->wireless_handlers = &ieee80211_iw_handler_def;
- dev->set_multicast_list = ieee80211_set_multicast_list;
- dev->change_mtu = ieee80211_change_mtu;
- dev->open = ieee80211_open;
- dev->stop = ieee80211_stop;
- dev->destructor = free_netdev;
- /* we will validate the address ourselves in ->open */
- dev->validate_addr = NULL;
-}
/*
* Called when the netdev is removed or, by the code below, before
* the interface type changes.
@@ -671,6 +658,34 @@ static void ieee80211_teardown_sdata(str
WARN_ON(flushed);
}

+static const struct net_device_ops ieee80211_dataif_ops = {
+ .ndo_open = ieee80211_open,
+ .ndo_stop = ieee80211_stop,
+ .ndo_uninit = ieee80211_teardown_sdata,
+ .ndo_start_xmit = ieee80211_subif_start_xmit,
+ .ndo_set_multicast_list = ieee80211_set_multicast_list,
+ .ndo_change_mtu = ieee80211_change_mtu,
+ .ndo_set_mac_address = eth_mac_addr,
+};
+
+static const struct net_device_ops ieee80211_monitorif_ops = {
+ .ndo_open = ieee80211_open,
+ .ndo_stop = ieee80211_stop,
+ .ndo_uninit = ieee80211_teardown_sdata,
+ .ndo_start_xmit = ieee80211_monitor_start_xmit,
+ .ndo_set_multicast_list = ieee80211_set_multicast_list,
+ .ndo_change_mtu = ieee80211_change_mtu,
+ .ndo_set_mac_address = eth_mac_addr,
+};
+
+static void ieee80211_if_setup(struct net_device *dev)
+{
+ ether_setup(dev);
+ dev->netdev_ops = &ieee80211_dataif_ops;
+ dev->wireless_handlers = &ieee80211_iw_handler_def;
+ dev->destructor = free_netdev;
+}
+
/*
* Helper function to initialise an interface to a specific type.
*/
@@ -682,7 +697,7 @@ static void ieee80211_setup_sdata(struct

/* and set some type-dependent values */
sdata->vif.type = type;
- sdata->dev->hard_start_xmit = ieee80211_subif_start_xmit;
+ sdata->dev->netdev_ops = &ieee80211_dataif_ops;
sdata->wdev.iftype = type;

/* only monitor differs */
@@ -703,7 +718,7 @@ static void ieee80211_setup_sdata(struct
break;
case NL80211_IFTYPE_MONITOR:
sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
- sdata->dev->hard_start_xmit = ieee80211_monitor_start_xmit;
+ sdata->dev->netdev_ops = &ieee80211_monitorif_ops;
sdata->u.mntr_flags = MONITOR_FLAG_CONTROL |
MONITOR_FLAG_OTHER_BSS;
break;
@@ -809,8 +824,6 @@ int ieee80211_if_add(struct ieee80211_lo
if (ret)
goto fail;

- ndev->uninit = ieee80211_teardown_sdata;
-
if (ieee80211_vif_is_mesh(&sdata->vif) &&
params && params->mesh_id_len)
ieee80211_sdata_set_mesh_id(sdata,




2009-01-30 11:45:50

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] mac80211: convert to net_device_ops

ext Johannes Berg wrote:
> On Fri, 2009-01-30 at 12:17 +0100, Johannes Berg wrote:
>> On Tue, 2009-01-27 at 05:29 +1100, Stephen Hemminger wrote:
>>> Convert to new net_device_ops in 2.6.28 and later.
>>>
>>> Signed-off-by: Stephen Hemminger <[email protected]>
>> John, please revert this commit for now, it's breaking monitor mode
>> injection (and thus AP mode) because the xmit handler assignment in
>> ieee80211_setup_sdata is not effective.
>
> Oh, for reference:
>
> commit e22cab741afdd1e9857ea9fe51e28a6fe3c97b90
> Author: Stephen Hemminger <[email protected]>
> Date: Tue Jan 27 05:29:25 2009 +1100
>
> mac80211: convert to net_device_ops
>
> Convert to new net_device_ops in 2.6.28 and later.
>
> Signed-off-by: Stephen Hemminger <[email protected]>
> Acked-by: Johannes Berg <[email protected]>
> Signed-off-by: John W. Linville <[email protected]>

Yes, I can confirm that reverting this commit solves the hostapd
problems I have been seeing.

Kalle


2009-01-30 18:45:49

by John W. Linville

[permalink] [raw]
Subject: Re: [PATCH] mac80211: convert to net_device_ops

On Fri, Jan 30, 2009 at 12:17:37PM +0100, Johannes Berg wrote:
> On Tue, 2009-01-27 at 05:29 +1100, Stephen Hemminger wrote:
> > Convert to new net_device_ops in 2.6.28 and later.
> >
> > Signed-off-by: Stephen Hemminger <[email protected]>
>
> John, please revert this commit for now, it's breaking monitor mode
> injection (and thus AP mode) because the xmit handler assignment in
> ieee80211_setup_sdata is not effective.

Ok, done. I reverted the hostap one as well, as I think it is
incomplete and could use more review.

Thanks,

John
--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.

2009-01-30 11:27:57

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: convert to net_device_ops

On Fri, 2009-01-30 at 12:17 +0100, Johannes Berg wrote:
> On Tue, 2009-01-27 at 05:29 +1100, Stephen Hemminger wrote:
> > Convert to new net_device_ops in 2.6.28 and later.
> >
> > Signed-off-by: Stephen Hemminger <[email protected]>
>
> John, please revert this commit for now, it's breaking monitor mode
> injection (and thus AP mode) because the xmit handler assignment in
> ieee80211_setup_sdata is not effective.

Oh, for reference:

commit e22cab741afdd1e9857ea9fe51e28a6fe3c97b90
Author: Stephen Hemminger <[email protected]>
Date: Tue Jan 27 05:29:25 2009 +1100

mac80211: convert to net_device_ops

Convert to new net_device_ops in 2.6.28 and later.

Signed-off-by: Stephen Hemminger <[email protected]>
Acked-by: Johannes Berg <[email protected]>
Signed-off-by: John W. Linville <[email protected]>

And yes, it's my fault, sorry!

johannes


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part

2009-01-30 11:27:20

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: convert to net_device_ops

On Fri, 2009-01-30 at 12:17 +0100, Johannes Berg wrote:
> On Tue, 2009-01-27 at 05:29 +1100, Stephen Hemminger wrote:
> > Convert to new net_device_ops in 2.6.28 and later.
> >
> > Signed-off-by: Stephen Hemminger <[email protected]>
>
> John, please revert this commit for now, it's breaking monitor mode
> injection (and thus AP mode) because the xmit handler assignment in
> ieee80211_setup_sdata is not effective.

This also broke calling our uninit function so we have memory and
debugfs file leaks.

johannes


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part