fixed Bug 1066 - Set Radiotap modulation type flags correctly
authorNicola Baldo <nicola@baldo.biz>
Sun, 10 Apr 2011 18:37:49 +0200
changeset 7012 67ca195ea166
parent 7011 87ccb205107e
child 7013 1db4e43e30e8
fixed Bug 1066 - Set Radiotap modulation type flags correctly
src/wifi/helper/yans-wifi-helper.cc
--- a/src/wifi/helper/yans-wifi-helper.cc	Fri Apr 08 13:43:34 2011 -0700
+++ b/src/wifi/helper/yans-wifi-helper.cc	Sun Apr 10 18:37:49 2011 +0200
@@ -278,16 +278,31 @@
         header.SetFrameFlags (frameFlags);
         header.SetRate (rate);
 
+        uint16_t channelFlags = 0;
+        switch (rate) 
+          {
+          case 2:  // 1Mbps
+          case 4:  // 2Mbps
+          case 10: // 5Mbps
+          case 22: // 11Mbps
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
+            break;
+            
+          default:
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
+            break;              
+          }
+
         if (channelFreqMhz < 2500)
           {
-            header.SetChannelFrequencyAndFlags (channelFreqMhz, 
-              RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ | RadiotapHeader::CHANNEL_FLAG_CCK);
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
           }
         else
           {
-            header.SetChannelFrequencyAndFlags (channelFreqMhz, 
-              RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ | RadiotapHeader::CHANNEL_FLAG_OFDM);
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
           }
+        
+        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
 
         p->AddHeader (header);
         file->Write (Simulator::Now (), p);
@@ -339,16 +354,31 @@
         header.SetFrameFlags (frameFlags);
         header.SetRate (rate);
 
+        uint16_t channelFlags = 0;
+        switch (rate) 
+          {
+          case 2:  // 1Mbps
+          case 4:  // 2Mbps
+          case 10: // 5Mbps
+          case 22: // 11Mbps
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
+            break;
+            
+          default:
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
+            break;              
+          }
+
         if (channelFreqMhz < 2500)
           {
-            header.SetChannelFrequencyAndFlags (channelFreqMhz, 
-              RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ | RadiotapHeader::CHANNEL_FLAG_CCK);
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
           }
         else
           {
-            header.SetChannelFrequencyAndFlags (channelFreqMhz, 
-              RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ | RadiotapHeader::CHANNEL_FLAG_OFDM);
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
           }
+        
+        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
 
         header.SetAntennaSignalPower (signalDbm);
         header.SetAntennaNoisePower (noiseDbm);