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
This commit is contained in:
		
							
								
								
									
										39
									
								
								package/madwifi/patches/372-queue_vif.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								package/madwifi/patches/372-queue_vif.patch
									
									
									
									
									
										Normal file
									
								
							@@ -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++;
 | 
			
		||||
-
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
 /*
 | 
			
		||||
		Reference in New Issue
	
	Block a user