}
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)
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;
/*
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;
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