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 | df292e17b1f7e0dadbc95e1ede62fd2daeeda1c5 (patch) | |
tree | 0c0cbd898aed56c7b3f4b05a4b9a0079aa964a5b /package/madwifi/patches/372-queue_vif.patch | |
parent | fba71e7fb18baa46a96c3f8fd3efd2d799bf407d (diff) | |
download | upstream-df292e17b1f7e0dadbc95e1ede62fd2daeeda1c5.tar.gz upstream-df292e17b1f7e0dadbc95e1ede62fd2daeeda1c5.tar.bz2 upstream-df292e17b1f7e0dadbc95e1ede62fd2daeeda1c5.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
SVN-Revision: 12003
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++; +- + } + + /* |