Documentation/SupportedImages/baseline-2.3.ndz: patch-03-radiotap-fcs-fix.diff

File patch-03-radiotap-fcs-fix.diff, 3.5 KB (added by mcgrof, 5 years ago)

Standardise Radiotap FCS Handling

  • net80211/ieee80211_monitor.c

    Standardise Radiotap FCS Handling
    
    http://madwifi.org/ticket/1221
    
    This patch was rebased for madwifi-0.9.3.1
    
    Signed-Off by: Luis Rodriguez <mcgrof@winlab.rutgers.edu>
    
    diff -Naur madwifi-0.9.3.1/net80211/ieee80211_monitor.c madwifi-0.9.3.1-radiotap/net80211/ieee80211_monitor.c
    old new  
    242242                                        p = start + roundup(p - start, 2) + 4; 
    243243                                        break; 
    244244 
    245                                 case IEEE80211_RADIOTAP_FCS: 
    246                                         /* 32-bit */ 
    247                                         p = start + roundup(p - start, 4) + 4; 
    248                                         break; 
    249  
    250245                                case IEEE80211_RADIOTAP_TSFT: 
    251246                                        /* 64-bit */ 
    252247                                        p = start + roundup(p - start, 8) + 8; 
     
    492487                                        th->wr_flags |= IEEE80211_RADIOTAP_F_SHORTPRE; 
    493488                                if (ds->ds_rxstat.rs_status & HAL_RXERR_CRC) 
    494489                                        th->wr_flags |= IEEE80211_RADIOTAP_F_BADFCS; 
     490                                if (skb->len >= IEEE80211_CRC_LEN)  
     491                                        th->wr_flags |= IEEE80211_RADIOTAP_F_FCS; 
    495492 
    496493                                th->wr_rate = sc->sc_hwmap[ds->ds_rxstat.rs_rate].ieeerate; 
    497494                                th->wr_chan_freq = cpu_to_le16(ic->ic_curchan->ic_freq); 
     
    527524                                th->wr_dbm_antsignal = th->wr_dbm_antnoise + rssi; 
    528525                                th->wr_antenna = ds->ds_rxstat.rs_antenna; 
    529526                                th->wr_antsignal = rssi; 
    530                                 if (skb->len >= IEEE80211_CRC_LEN)  
    531                                         th->wr_fcs = cpu_to_le32p((u32 *)&skb1->data[skb1->len - IEEE80211_CRC_LEN]); 
    532                                 else  
    533                                         th->wr_fcs = 0; 
    534527                                 
    535528                                th->wr_tsft = cpu_to_le64(mactime); 
    536529                        } 
     
    550543                        break; 
    551544                } 
    552545                if (skb1) { 
    553                         if (!tx && skb->len >= IEEE80211_CRC_LEN) { 
    554                                 /* Remove FCS from end of rx frames*/ 
     546                        if (!tx && (vap->iv_dev->type != ARPHRD_IEEE80211_RADIOTAP) && (skb1->len >= IEEE80211_CRC_LEN)) { 
     547                                /* Remove FCS from end of rx frames when 
     548                                 * delivering to non-Radiotap VAPs */ 
    555549                                skb_trim(skb1, skb1->len - IEEE80211_CRC_LEN); 
    556550                        } 
    557551                        skb1->dev = dev; /* NB: deliver to wlanX */ 
  • net80211/ieee80211_monitor.h

    diff -Naur madwifi-0.9.3.1/net80211/ieee80211_monitor.h madwifi-0.9.3.1-radiotap/net80211/ieee80211_monitor.h
    old new  
    116116        (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE)  | \ 
    117117        (1 << IEEE80211_RADIOTAP_ANTENNA)       | \ 
    118118        (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)  | \ 
    119         (1 << IEEE80211_RADIOTAP_FCS)           | \ 
    120119        0) 
    121120 
    122121struct ath_rx_radiotap_header { 
     
    130129        int8_t  wr_dbm_antnoise; 
    131130        u_int8_t wr_antenna; 
    132131        u_int8_t wr_antsignal; 
    133         u_int8_t wr_pad[2]; /* Ensure fcs is on 32 bit boundary */ 
    134         __le32 wr_fcs; 
    135132}__attribute__((__packed__)); 
    136133 
    137134#define ATH_TX_RADIOTAP_PRESENT (               \ 
  • net80211/ieee80211_radiotap.h

    diff -Naur madwifi-0.9.3.1/net80211/ieee80211_radiotap.h madwifi-0.9.3.1-radiotap/net80211/ieee80211_radiotap.h
    old new  
    153153 *      Unitless indication of the Rx/Tx antenna for this packet. 
    154154 *      The first antenna is antenna 0. 
    155155 * 
    156  * IEEE80211_RADIOTAP_FCS               u_int32_t       data 
    157  * 
    158  *      FCS from frame in network byte order. 
    159156 */ 
    160157enum ieee80211_radiotap_type { 
    161158        IEEE80211_RADIOTAP_TSFT = 0, 
     
    172169        IEEE80211_RADIOTAP_ANTENNA = 11, 
    173170        IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12, 
    174171        IEEE80211_RADIOTAP_DB_ANTNOISE = 13, 
    175         IEEE80211_RADIOTAP_FCS = 14, 
    176172        IEEE80211_RADIOTAP_EXT = 31, 
    177173}; 
    178174