Compile fix with VLAN support on recent kernels
[madwifi/.git] / net80211 / ieee80211.c
index 44899fea4252d5cada00febf171cd306009b6a02..ea21c5f2af8f53724e9d9586a9442b6d5ac9c29d 100644 (file)
@@ -400,6 +400,23 @@ ieee80211_ifdetach(struct ieee80211com *ic)
 }
 EXPORT_SYMBOL(ieee80211_ifdetach);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
+static const struct net_device_ops ieee80211_netdev_ops = {
+       .ndo_get_stats          = ieee80211_getstats,
+       .ndo_open               = ieee80211_open,
+       .ndo_stop               = ieee80211_stop,
+       .ndo_start_xmit         = ieee80211_hardstart,
+       .ndo_set_multicast_list = ieee80211_set_multicast_list,
+       .ndo_change_mtu         = ieee80211_change_mtu,
+       .ndo_do_ioctl           = ieee80211_ioctl,
+#if IEEE80211_VLAN_TAG_USED
+       .ndo_vlan_rx_register   = ieee80211_vlan_register,
+       .ndo_vlan_rx_add_vid    = ieee80211_vlan_add_vid,
+       .ndo_vlan_rx_kill_vid   = ieee80211_vlan_kill_vid,
+#endif
+};
+#endif
+
 int
 ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev,
        const char *name, int opmode, int flags)
@@ -421,12 +438,22 @@ ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev,
                        strncpy(dev->name, name, sizeof(dev->name));
        }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
        dev->get_stats = ieee80211_getstats;
        dev->open = ieee80211_open;
        dev->stop = ieee80211_stop;
        dev->hard_start_xmit = ieee80211_hardstart;
        dev->set_multicast_list = ieee80211_set_multicast_list;
        dev->change_mtu = ieee80211_change_mtu;
+       dev->do_ioctl = ieee80211_ioctl;
+#if IEEE80211_VLAN_TAG_USED
+       dev->vlan_rx_register = ieee80211_vlan_register;
+       dev->vlan_rx_add_vid = ieee80211_vlan_add_vid;
+       dev->vlan_rx_kill_vid = ieee80211_vlan_kill_vid;
+#endif
+#else
+       dev->netdev_ops = &ieee80211_netdev_ops;
+#endif
        dev->tx_queue_len = 0;                  /* NB: bypass queuing */
        dev->hard_header_len = parent->hard_header_len;
        /*
@@ -689,7 +716,8 @@ ieee80211_find_channel(struct ieee80211com *ic, int freq, int flags)
                c = &ic->ic_channels[i];
                if (c->ic_freq == freq &&
                    (flags == 0 || 
-                    (c->ic_flags & IEEE80211_CHAN_ALLTURBO) == flags))
+                    (c->ic_flags & IEEE80211_CHAN_ALLTURBO) ==
+                    (flags & IEEE80211_CHAN_ALLTURBO)))
                        return c;
        }
        return NULL;
@@ -1732,7 +1760,11 @@ ieee80211_set_multicast_list(struct net_device *dev)
        IEEE80211_UNLOCK_IRQ(ic);
 
        /* XXX: Merge multicast list into parent device */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
        parent->set_multicast_list(ic->ic_dev);
+#else
+       parent->netdev_ops->ndo_set_multicast_list(ic->ic_dev);
+#endif
 }
 
 void