Add host_open_frag to indicate if fragmentation is need to be done by host. Signed-off-by: Hong Liu Signed-off-by: Zhu Yi -- diff -urp ieee80211-1.0.3/ieee80211_module.c ieee80211-1.0.3-open-frag/ieee80211_module.c --- ieee80211-1.0.3/ieee80211_module.c 2005-07-15 07:53:35.000000000 +0800 +++ ieee80211-1.0.3-open-frag/ieee80211_module.c 2005-08-03 16:12:25.000000000 +0800 @@ -137,6 +137,11 @@ struct net_device *alloc_ieee80211(int s /* Default to enabling full open WEP with host based encrypt/decrypt */ ieee->host_encrypt = 1; ieee->host_decrypt = 1; + /* Host fragementation in Open mode. Default is enabled. Note host + * fragmentation is always enabled if host encryption is enabled. + * For cards can do hardware encryption, they can do hardware + * fragmentation as well. So we don't need a variable host_enc_frag. */ + ieee->host_open_frag = 1; ieee->ieee802_1x = 1; /* Default to supporting 802.1x */ INIT_LIST_HEAD(&ieee->crypt_deinit_list); @@ -151,7 +156,6 @@ struct net_device *alloc_ieee80211(int s ieee->tkip_countermeasures = 0; ieee->drop_unencrypted = 0; ieee->privacy_invoked = 0; - ieee->ieee802_1x = 1; return dev; diff -urp ieee80211-1.0.3/ieee80211_tx.c ieee80211-1.0.3-open-frag/ieee80211_tx.c --- ieee80211-1.0.3/ieee80211_tx.c 2005-07-15 07:53:35.000000000 +0800 +++ ieee80211-1.0.3-open-frag/ieee80211_tx.c 2005-08-03 16:12:25.000000000 +0800 @@ -363,7 +363,7 @@ int ieee80211_xmit(struct sk_buff *skb, skb_pull(skb, hdr_len); } - if (host_encrypt) { + if (host_encrypt || ieee->host_open_frag) { /* Determine fragmentation size based on destination (multicast * and broadcast are not fragmented) */ if (is_multicast_ether_addr(dest)) @@ -382,8 +382,9 @@ int ieee80211_xmit(struct sk_buff *skb, /* Each fragment may need to have room for encryptiong * pre/postfix */ - bytes_per_frag -= crypt->ops->extra_mpdu_prefix_len + - crypt->ops->extra_mpdu_postfix_len; + if (host_encrypt) + bytes_per_frag -= crypt->ops->extra_mpdu_prefix_len + + crypt->ops->extra_mpdu_postfix_len; /* Number of fragments is the total * bytes_per_frag / payload_per_fragment */ diff -urp ieee80211-1.0.3/net/ieee80211.h ieee80211-1.0.3-open-frag/net/ieee80211.h --- ieee80211-1.0.3/net/ieee80211.h 2005-07-15 07:53:35.000000000 +0800 +++ ieee80211-1.0.3-open-frag/net/ieee80211.h 2005-08-03 16:12:25.000000000 +0800 @@ -798,6 +798,7 @@ struct ieee80211_device { int host_encrypt; int host_encrypt_msdu; int host_decrypt; + int host_open_frag; int ieee802_1x; /* is IEEE 802.1X used */ /* WPA data */