diff options
Diffstat (limited to 'net-wireless/ieee80211/files/ieee80211-1.1.5-broadcast.patch')
-rw-r--r-- | net-wireless/ieee80211/files/ieee80211-1.1.5-broadcast.patch | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/net-wireless/ieee80211/files/ieee80211-1.1.5-broadcast.patch b/net-wireless/ieee80211/files/ieee80211-1.1.5-broadcast.patch new file mode 100644 index 000000000000..83f6e7de5879 --- /dev/null +++ b/net-wireless/ieee80211/files/ieee80211-1.1.5-broadcast.patch @@ -0,0 +1,44 @@ +diff -urp ieee80211-1.1.5/ieee80211_rx.c ieee80211-1.1.5-broadcast/ieee80211_rx.c +--- ieee80211-1.1.5/ieee80211_rx.c 2005-10-14 02:12:12.000000000 +0800 ++++ ieee80211-1.1.5-broadcast/ieee80211_rx.c 2005-10-19 15:52:46.000000000 +0800 +@@ -409,8 +409,9 @@ int ieee80211_rx(struct ieee80211_device + return 1; + } + +- if (is_multicast_ether_addr(hdr->addr1) ? ieee->host_mc_decrypt : +- ieee->host_decrypt) { ++ if ((is_multicast_ether_addr(hdr->addr1) || ++ ieee80211_is_broadcast_ether_addr(hdr->addr1)) ? ieee->host_mc_decrypt : ++ ieee->host_decrypt) { + int idx = 0; + if (skb->len >= hdrlen + 3) + idx = skb->data[hdrlen + 3] >> 6; +diff -urp ieee80211-1.1.5/ieee80211_tx.c ieee80211-1.1.5-broadcast/ieee80211_tx.c +--- ieee80211-1.1.5/ieee80211_tx.c 2005-10-14 02:12:12.000000000 +0800 ++++ ieee80211-1.1.5-broadcast/ieee80211_tx.c 2005-10-19 15:55:38.000000000 +0800 +@@ -338,7 +338,8 @@ int ieee80211_xmit(struct sk_buff *skb, + 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)) ++ if (is_multicast_ether_addr(dest) || ++ ieee80211_is_broadcast_ether_addr(dest)) + frag_size = MAX_FRAG_THRESHOLD; + else + frag_size = ieee->fts; +diff -urp ieee80211-1.1.5/net/ieee80211.h ieee80211-1.1.5-broadcast/net/ieee80211.h +--- ieee80211-1.1.5/net/ieee80211.h 2005-10-14 02:12:12.000000000 +0800 ++++ ieee80211-1.1.5-broadcast/net/ieee80211.h 2005-10-19 15:51:31.000000000 +0800 +@@ -962,6 +962,12 @@ static inline int is_multicast_ether_add + } + #endif + ++static inline int ieee80211_is_broadcast_ether_addr(const u8 *addr) ++{ ++ return (addr[0] == 0xff && addr[1] == 0xff && addr[2] == 0xff && ++ addr[3] == 0xff && addr[4] == 0xff && addr[5] == 0xff); ++} ++ + static inline void *ieee80211_priv(struct net_device *dev) + { + return ((struct ieee80211_device *)netdev_priv(dev))->priv; |