*last_frag = frag; 
static inline int is_duplicate_packet(struct ipw_priv *priv,				      struct ieee80211_hdr_4addr *header){	u16 fc = le16_to_cpu(header->frame_ctl);	u16 sc = le16_to_cpu(header->seq_ctl);	u16 seq = WLAN_GET_SEQ_SEQ(sc);	u16 frag = WLAN_GET_SEQ_FRAG(sc);	u16 *last_seq, *last_frag;	unsigned long *last_time;	switch (priv->ieee->iw_mode) {	case IW_MODE_ADHOC:		{			struct list_head *p;			struct ipw_ibss_seq *entry = NULL;			u8 *mac = header->addr2;			int index = mac[5] % IPW_IBSS_MAC_HASH_SIZE;			__list_for_each(p, &priv->ibss_mac_hash[index]) {				entry =				    list_entry(p, struct ipw_ibss_seq, list);				if (!memcmp(entry->mac, mac, ETH_ALEN))					break;			}			if (p == &priv->ibss_mac_hash[index]) {				entry = kmalloc(sizeof(*entry), GFP_ATOMIC);				if (!entry) {					IPW_ERROR					    ("Cannot malloc new mac entry\n");					return 0;				}				memcpy(entry->mac, mac, ETH_ALEN);				entry->seq_num = seq;				entry->frag_num = frag;				entry->packet_time = jiffies;				list_add(&entry->list,					 &priv->ibss_mac_hash[index]);				return 0;			}			last_seq = &entry->seq_num;			last_frag = &entry->frag_num;			last_time = &entry->packet_time;			break;		}	case IW_MODE_INFRA:		last_seq = &priv->last_seq_num;		last_frag = &priv->last_frag_num;		last_time = &priv->last_packet_time;		break;	default:		return 0;	}	if ((*last_seq == seq) &&	    time_after(*last_time + IPW_PACKET_RETRY_TIME, jiffies)) {		if (*last_frag == frag)			goto drop;		if (*last_frag + 1 != frag)			/* out-of-order fragment */			goto drop;		*last_frag = frag;	} else		*last_seq = seq;	*last_time = jiffies;	return 0;      drop:	BUG_ON(!(fc & IEEE80211_FCTL_RETRY));	return 1;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f57ce7ce9c7498fe9c4090aaf389c89f3bd70f7e/ipw2200.c/buggy/drivers/net/wireless/ipw2200.c