prism2_frag_cache_get(local_info_t *local, struct ieee80211_hdr *hdr) 
prism2_frag_cache_get(local_info_t *local, struct ieee80211_hdr_4addr *hdr) 
prism2_frag_cache_get(local_info_t *local, struct ieee80211_hdr *hdr){	struct sk_buff *skb = NULL;	u16 sc;	unsigned int frag, seq;	struct prism2_frag_entry *entry;	sc = le16_to_cpu(hdr->seq_ctl);	frag = WLAN_GET_SEQ_FRAG(sc);	seq = WLAN_GET_SEQ_SEQ(sc) >> 4;	if (frag == 0) {		/* Reserve enough space to fit maximum frame length */		skb = dev_alloc_skb(local->dev->mtu +				    sizeof(struct ieee80211_hdr) +				    8 /* LLC */ +				    2 /* alignment */ +				    8 /* WEP */ + ETH_ALEN /* WDS */);		if (skb == NULL)			return NULL;		entry = &local->frag_cache[local->frag_next_idx];		local->frag_next_idx++;		if (local->frag_next_idx >= PRISM2_FRAG_CACHE_LEN)			local->frag_next_idx = 0;		if (entry->skb != NULL)			dev_kfree_skb(entry->skb);		entry->first_frag_time = jiffies;		entry->seq = seq;		entry->last_frag = frag;		entry->skb = skb;		memcpy(entry->src_addr, hdr->addr2, ETH_ALEN);		memcpy(entry->dst_addr, hdr->addr1, ETH_ALEN);	} else {		/* received a fragment of a frame for which the head fragment		 * should have already been received */		entry = prism2_frag_cache_find(local, seq, frag, hdr->addr2,					       hdr->addr1);		if (entry != NULL) {			entry->last_frag = frag;			skb = entry->skb;		}	}	return skb;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d041674d62e1ad565f2fb6d53ae80b31d6656033/hostap_80211_rx.c/buggy/drivers/net/wireless/hostap/hostap_80211_rx.c