From 6d19fadd654def93d47609c45944264eaa981d65 Mon Sep 17 00:00:00 2001 From: nbd Date: Wed, 30 Jul 2008 04:45:24 +0000 Subject: 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 --- package/madwifi/patches/372-queue_vif.patch | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 package/madwifi/patches/372-queue_vif.patch (limited to 'package/madwifi/patches/372-queue_vif.patch') diff --git a/package/madwifi/patches/372-queue_vif.patch b/package/madwifi/patches/372-queue_vif.patch new file mode 100644 index 000000000..246798604 --- /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++; +- + } + + /* -- cgit v1.2.3