avoid crash when packets sent by higher layer cause no RTS/CTS operation
authorJunling Bu <linlinjavaer@gmail.com>
Sun, 22 Sep 2013 19:56:47 -0700
changeset 10201 8bdf35df4bf1
parent 10200 17e79c1772cd
child 10202 d32ee5f55fdb
avoid crash when packets sent by higher layer cause no RTS/CTS operation
src/wifi/model/mac-low.cc
--- a/src/wifi/model/mac-low.cc	Sun Sep 22 18:02:07 2013 -0700
+++ b/src/wifi/model/mac-low.cc	Sun Sep 22 19:56:47 2013 -0700
@@ -1053,21 +1053,27 @@
 {
   WifiPreamble preamble;
   Time txTime = Seconds (0);
-  WifiTxVector rtsTxVector = GetRtsTxVector (packet, hdr);
-  WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
-   //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
-  if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
-    preamble= WIFI_PREAMBLE_HT_GF;
-  else if (rtsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
-    preamble= WIFI_PREAMBLE_HT_MF;
-  else
-    preamble=WIFI_PREAMBLE_LONG;
   if (params.MustSendRts ())
     {
+      WifiTxVector rtsTxVector = GetRtsTxVector (packet, hdr);
+      //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
+      if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+        {
+          preamble = WIFI_PREAMBLE_HT_GF;
+        }
+      else if (rtsTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
+        {
+          preamble = WIFI_PREAMBLE_HT_MF;
+        }
+      else
+        {
+          preamble = WIFI_PREAMBLE_LONG;
+        }
       txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble);
       txTime += GetCtsDuration (hdr->GetAddr1 (), rtsTxVector);
       txTime += Time (GetSifs () * 2);
     }
+  WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
   //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
   if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
     preamble= WIFI_PREAMBLE_HT_GF;