src/devices/wifi/wifi-mac-header.cc
changeset 1974 0d6b3bead74a
parent 1896 9861a16a8a1d
child 1977 4303409f3d8e
equal deleted inserted replaced
1973:96673851351e 1974:0d6b3bead74a
    16  * along with this program; if not, write to the Free Software
    16  * along with this program; if not, write to the Free Software
    17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    18  *
    18  *
    19  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
    19  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
    20  */
    20  */
    21 #include <cassert>
    21 #include "ns3/assert.h"
    22 #include "ns3/address-utils.h"
    22 #include "ns3/address-utils.h"
    23 #include "wifi-mac-header.h"
    23 #include "wifi-mac-header.h"
    24 
    24 
    25 #define MAC80211HEADER_DEBUG 1
    25 #define MAC80211HEADER_DEBUG 1
    26 
    26 
   260   m_duration = duration;
   260   m_duration = duration;
   261 }
   261 }
   262 void 
   262 void 
   263 WifiMacHeader::SetDurationUs (uint64_t duration_us)
   263 WifiMacHeader::SetDurationUs (uint64_t duration_us)
   264 {
   264 {
   265   assert (duration_us <= (1<<16) - 1);
   265   NS_ASSERT (duration_us <= (1<<16) - 1);
   266   m_duration = static_cast<uint16_t> (duration_us);
   266   m_duration = static_cast<uint16_t> (duration_us);
   267 }
   267 }
   268 
   268 
   269 void WifiMacHeader::SetId (uint16_t id)
   269 void WifiMacHeader::SetId (uint16_t id)
   270 {
   270 {
   431 
   431 
   432     }
   432     }
   433     break;
   433     break;
   434   }
   434   }
   435   // NOTREACHED
   435   // NOTREACHED
   436   assert (false);
   436   NS_ASSERT (false);
   437   return (enum WifiMacType_e)-1;
   437   return (enum WifiMacType_e)-1;
   438 }
   438 }
   439 bool 
   439 bool 
   440 WifiMacHeader::IsFromDs (void) const
   440 WifiMacHeader::IsFromDs (void) const
   441 {
   441 {
   590   return (m_ctrlMoreFrag == 1)?true:false;
   590   return (m_ctrlMoreFrag == 1)?true:false;
   591 }
   591 }
   592 bool 
   592 bool 
   593 WifiMacHeader::IsQosBlockAck (void) const
   593 WifiMacHeader::IsQosBlockAck (void) const
   594 {
   594 {
   595   assert (IsQosData ());
   595   NS_ASSERT (IsQosData ());
   596   return (m_qosAckPolicy == 3)?true:false;
   596   return (m_qosAckPolicy == 3)?true:false;
   597 }
   597 }
   598 bool 
   598 bool 
   599 WifiMacHeader::IsQosNoAck (void) const
   599 WifiMacHeader::IsQosNoAck (void) const
   600 {
   600 {
   601   assert (IsQosData ());
   601   NS_ASSERT (IsQosData ());
   602   return (m_qosAckPolicy == 1)?true:false;
   602   return (m_qosAckPolicy == 1)?true:false;
   603 }
   603 }
   604 bool 
   604 bool 
   605 WifiMacHeader::IsQosAck (void) const
   605 WifiMacHeader::IsQosAck (void) const
   606 {
   606 {
   607   assert (IsQosData ());
   607   NS_ASSERT (IsQosData ());
   608   return (m_qosAckPolicy == 0)?true:false;
   608   return (m_qosAckPolicy == 0)?true:false;
   609 }
   609 }
   610 uint8_t
   610 uint8_t
   611 WifiMacHeader::GetQosTid (void) const
   611 WifiMacHeader::GetQosTid (void) const
   612 {
   612 {
   613   assert (IsQosData ());
   613   NS_ASSERT (IsQosData ());
   614   return m_qosTid;
   614   return m_qosTid;
   615 }
   615 }
   616 uint8_t 
   616 uint8_t 
   617 WifiMacHeader::GetQosTxopLimit (void) const
   617 WifiMacHeader::GetQosTxopLimit (void) const
   618 {
   618 {
   619   assert (IsQosData ());
   619   NS_ASSERT (IsQosData ());
   620   return m_qosStuff;
   620   return m_qosStuff;
   621 }
   621 }
   622 
   622 
   623 uint16_t
   623 uint16_t
   624 WifiMacHeader::GetFrameControl (void) const
   624 WifiMacHeader::GetFrameControl (void) const
   702       size = 2+2+6;
   702       size = 2+2+6;
   703       break;
   703       break;
   704     case SUBTYPE_CTL_BACKREQ:
   704     case SUBTYPE_CTL_BACKREQ:
   705     case SUBTYPE_CTL_BACKRESP:
   705     case SUBTYPE_CTL_BACKRESP:
   706       // NOT IMPLEMENTED
   706       // NOT IMPLEMENTED
   707       assert (false);
   707       NS_ASSERT (false);
   708       break;
   708       break;
   709     }
   709     }
   710     break;
   710     break;
   711   case TYPE_DATA:
   711   case TYPE_DATA:
   712     size = 2+2+6+6+6+2;
   712     size = 2+2+6+6+6+2;
   895     case SUBTYPE_CTL_ACK:
   895     case SUBTYPE_CTL_ACK:
   896       break;
   896       break;
   897     case SUBTYPE_CTL_BACKREQ:
   897     case SUBTYPE_CTL_BACKREQ:
   898     case SUBTYPE_CTL_BACKRESP:
   898     case SUBTYPE_CTL_BACKRESP:
   899       // NOT IMPLEMENTED
   899       // NOT IMPLEMENTED
   900       assert (false);
   900       NS_ASSERT (false);
   901       break;
   901       break;
   902     default:
   902     default:
   903       //NOTREACHED
   903       //NOTREACHED
   904       assert (false);
   904       NS_ASSERT (false);
   905       break;
   905       break;
   906     }
   906     }
   907     break;
   907     break;
   908   case TYPE_DATA: {
   908   case TYPE_DATA: {
   909     WriteTo (i, m_addr2);
   909     WriteTo (i, m_addr2);
   916       i.WriteHtonU16 (GetQosControl ());
   916       i.WriteHtonU16 (GetQosControl ());
   917     }
   917     }
   918     } break;
   918     } break;
   919   default:
   919   default:
   920     //NOTREACHED
   920     //NOTREACHED
   921     assert (false);
   921     NS_ASSERT (false);
   922     break;
   922     break;
   923   }
   923   }
   924 }
   924 }
   925 uint32_t
   925 uint32_t
   926 WifiMacHeader::Deserialize (Buffer::Iterator start)
   926 WifiMacHeader::Deserialize (Buffer::Iterator start)
   945     case SUBTYPE_CTL_ACK:
   945     case SUBTYPE_CTL_ACK:
   946       break;
   946       break;
   947     case SUBTYPE_CTL_BACKREQ:
   947     case SUBTYPE_CTL_BACKREQ:
   948     case SUBTYPE_CTL_BACKRESP:
   948     case SUBTYPE_CTL_BACKRESP:
   949       // NOT IMPLEMENTED
   949       // NOT IMPLEMENTED
   950       assert (false);
   950       NS_ASSERT (false);
   951       break;
   951       break;
   952     }
   952     }
   953     break;
   953     break;
   954   case TYPE_DATA:
   954   case TYPE_DATA:
   955     ReadFrom (i, m_addr2);
   955     ReadFrom (i, m_addr2);