diff options
author | Felix Fietkau <nbd@openwrt.org> | 2008-07-30 04:45:24 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2008-07-30 04:45:24 +0000 |
commit | 765f1fa69073d6fb9ebb9a0ee1516aa840dadba2 (patch) | |
tree | d484ee75df57b252b7f76f58ab29f9069b763d6d /package/madwifi/patches/372-queue_vif.patch | |
parent | d2fc807801d81ffc4b194cb31de96fffa8aa3ccd (diff) | |
download | master-187ad058-765f1fa69073d6fb9ebb9a0ee1516aa840dadba2.tar.gz master-187ad058-765f1fa69073d6fb9ebb9a0ee1516aa840dadba2.tar.bz2 master-187ad058-765f1fa69073d6fb9ebb9a0ee1516aa840dadba2.zip |
madwifi: wds updates
- refactor wds code
- add interface for separating individual wds stations from the master interface
- add some queueing fixes for packets passing through virtual interfaces
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@12003 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/madwifi/patches/372-queue_vif.patch')
-rw-r--r-- | package/madwifi/patches/372-queue_vif.patch | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/package/madwifi/patches/372-queue_vif.patch b/package/madwifi/patches/372-queue_vif.patch new file mode 100644 index 0000000000..2467986049 --- /dev/null +++ b/package/madwifi/patches/372-queue_vif.patch @@ -0,0 +1,39 @@ +--- a/net80211/ieee80211_input.c ++++ b/net80211/ieee80211_input.c +@@ -1181,6 +1181,7 @@ + } + if (skb1 != NULL) { + struct ieee80211_node *ni_tmp; ++ int ret; + skb1->dev = dev; + skb_reset_mac_header(skb1); + skb_set_network_header(skb1, sizeof(struct ether_header)); +@@ -1188,7 +1189,12 @@ + skb1->protocol = __constant_htons(ETH_P_802_2); + /* XXX insert vlan tag before queue it? */ + ni_tmp = SKB_CB(skb1)->ni; /* remember node so we can free it */ +- if (dev_queue_xmit(skb1) == NET_XMIT_DROP) { ++ ret = dev->hard_start_xmit(skb1, dev); ++ ++ if (ret == NETDEV_TX_BUSY) ++ ieee80211_dev_kfree_skb(&skb1); ++ ++ if (ret != NETDEV_TX_OK) { + /* If queue dropped the packet because device was + * too busy */ + vap->iv_devstats.tx_dropped++; +--- a/net80211/ieee80211_output.c ++++ b/net80211/ieee80211_output.c +@@ -329,9 +329,10 @@ + /* Dispatch the packet to the parent device */ + skb->dev = vap->iv_ic->ic_dev; + +- if (dev_queue_xmit(skb) == NET_XMIT_DROP) ++ if (netif_queue_stopped(skb->dev)) ++ ieee80211_dev_kfree_skb(&skb); ++ else if (dev_queue_xmit(skb) == NET_XMIT_DROP) + vap->iv_devstats.tx_dropped++; +- + } + + /* |