>
aboutsummaryrefslogblamecommitdiffstats
path: root/net/mac80211/util.c
blob: 0b6fc92bc0d7520bbb9050c2850acaa5da71a1ff (plain) (tree)



















                                                                       
                         
                        
                              
                         
                          

                        
                       
                 
                 
                
                
                



                                                                     








                                                               
 
                                                              
                                                 
 
                                       
 

                                                               

                            
                                    

                                                                 

                                         
                                    


                                             
                                          




                                    

                                                                 
                                  



                                           
                                          

                                                
                                       
                                                    
                                                  

                                                    

                                                  
                                                                       

                         




                    
                                                             
 






                                                                            















                                                                            
                                                                         












                                                                              

























                                                                             

                                                                  

                                                                    

                                                        
                                            

                
                                    
 
                

                                          
                                                                        


                                                                   

                                                                            
                                                       




                                                

                                                                          
                                                                          


                                                        
                                            
                            

                


                                                                     
 
                               
 
                                                                       

                

                                          
                                                                        


                                                                   

                          
                                                                

                                                            
                                                                        

                                                             
                                                                 





                                                             

                                                              
                                                     
                                                                                


                                                        
                                            
                            

                


                                                                     
 
                               
 
                                                                       
                

                                          
                                                                        


                                                                   

                                 
                                                                       
                                                            
                                                              
                                  
                                                                         






                                                                     

                                                                      

                                                        
                                            
 

                                               

                                         
 





                                                               

                                                      


                                                                            
                                                               
                 

                                  
                                                             
 
 

                                                                       













                                                                           

                                    

                                                                      

                                                        
                                            
 

                                               

                                         
 
                                                             


                                                                
                                                       
                          
 
 

                                                                       













                                                                           

                                    





                                                             


                                                               
                               

                       


                                                                               
                                                      

















                                                                               


                                                                       
                                       


                                 

                                                   
                                                              

         
                                        

                                                             




                                                                      

                                                                  
 

                                                        

              

                                                                 
                                        








                                                                            


                                     


                                                               

                            
 

                                         
 



                                                                      


                                       

                                                                   
 

                                                        

              

                                                                 
                                        







                                                                                

                                     
 




                                                    



                                                        
                                       


                                                              

                                            
                                 
                        

                              
                                                   
                                                       


                                              
                                         











                                                        
                        
 
                                                                  
                                          

                                            
                                 
                        

                              
                                                   
                                                       
                                              
         

                          
 
                                                              
 








                                                                   


                                                                     



























                                                                            


                                                           






                                                              

                          
                                    












                                         

                              
                                                                   
                                                               






















                                                     



                                                                      








                                                      
                                              


                                                                            



                                                                               




                                                                      
                                                                 






















                                                                            

                                                                    
                              

                                                                     
                                                                  





                                                  

                                                                         
















                                                    



                                                                     


















                                                             


                                                      
                              






                              

                   
 




                                                                   


                           





                                           

                                                                          
 









                                                                      

                                               




                                                                          

                                               





















                                                             
 

                                     

                                                   


                                                               





                                                                         
 
 




















                                                                      
                                                            



                                                       
                            




















                                                                             


                                                             

                                                                      



                                                     
                

                                                         
                                                           

                                                                           
                                               







                                                                
                                          
                                                    





                                                                  
 





                                                                               

                                                                        

 
                                                                       
                                                         

                                                                     

                                               


                                   


                          
 
                                             


                     







                                                                           
 
                                     
                                

                                           
















                                                                         

                                                   
                                                 


                                                                   

         





                                                            















                                                                              

         
                                         







                                                                 



                                                                
                                       

                                               
                                                     

                                                                       




                                                                           




                                                     




                                                           




                            
                                                                           

                                                              

                                                     

                                    

                       
                





                                                                        

                       
 


                                                     
                                                                  

                                                                        

                                                                          




                                                             
                  
                                                           

                                                   
         
 

                                                                        
                   




































                                                                             
 




                                                         

                                          
                        

 



                                                     
                             
                
 

                                       


                                





                                                                          
                                       
                          


                                                                             

                                   
 
                                                 





                                                                

                                                                    


                           


                                                          
                                           




                                                                          
                                                                      
                 
         
                                      
 
                                 
                                                               



                                       
                                          


                                                              

                            
                                                    
                                 








                                                                 

                                           
 

                                            


                                                                         
                                          

                                                    

                                               

                                                              
                                                                         







                                                
                                         

                                               




                                   









                                                                  
                                                         


                                                                  
                                                                       
                                                                
                 

                                              
         
 

                                                            
                                                   




                                                             



                                                              
                              


                         
                                                      
                                 

                                


















                                                              
                                    

                                                        
                                      


                   

                 
 



















                                                                    
                                                         




                                                                
                                                











                                                              
                                                    


                                                              

                                                                   














                                                       























































                                                                            
/*
 * Copyright 2002-2005, Instant802 Networks, Inc.
 * Copyright 2005-2006, Devicescape Software, Inc.
 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
 * Copyright 2007	Johannes Berg <johannes@sipsolutions.net>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * utilities for mac80211
 */

#include <net/mac80211.h>
#include <linux/netdevice.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/skbuff.h>
#include <linux/etherdevice.h>
#include <linux/if_arp.h>
#include <linux/bitmap.h>
#include <linux/crc32.h>
#include <net/net_namespace.h>
#include <net/cfg80211.h>
#include <net/rtnetlink.h>

#include "ieee80211_i.h"
#include "driver-ops.h"
#include "rate.h"
#include "mesh.h"
#include "wme.h"
#include "led.h"
#include "wep.h"

/* privid for wiphys to determine whether they belong to us or not */
void *mac80211_wiphy_privid = &mac80211_wiphy_privid;

struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy)
{
	struct ieee80211_local *local;
	BUG_ON(!wiphy);

	local = wiphy_priv(wiphy);
	return &local->hw;
}
EXPORT_SYMBOL(wiphy_to_ieee80211_hw);

u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
			enum nl80211_iftype type)
{
	__le16 fc = hdr->frame_control;

	 /* drop ACK/CTS frames and incorrect hdr len (ctrl) */
	if (len < 16)
		return NULL;

	if (ieee80211_is_data(fc)) {
		if (len < 24) /* drop incorrect hdr len (data) */
			return NULL;

		if (ieee80211_has_a4(fc))
			return NULL;
		if (ieee80211_has_tods(fc))
			return hdr->addr1;
		if (ieee80211_has_fromds(fc))
			return hdr->addr2;

		return hdr->addr3;
	}

	if (ieee80211_is_mgmt(fc)) {
		if (len < 24) /* drop incorrect hdr len (mgmt) */
			return NULL;
		return hdr->addr3;