src/devices/csma-cd/csma-cd-net-device.cc
changeset 1205 6cee0d34bda6
parent 1167 2cb083ff04c6
child 1207 a9f3610bbffa
equal deleted inserted replaced
1204:d40723d53e3d 1205:6cee0d34bda6
    35 
    35 
    36 namespace ns3 {
    36 namespace ns3 {
    37 
    37 
    38 CsmaCdNetDevice::CsmaCdNetDevice (Ptr<Node> node, Eui48Address addr, 
    38 CsmaCdNetDevice::CsmaCdNetDevice (Ptr<Node> node, Eui48Address addr, 
    39                                   CsmaCdEncapsulationMode encapMode) 
    39                                   CsmaCdEncapsulationMode encapMode) 
    40   : NetDevice(node, addr.ConvertTo ()), 
    40   : NetDevice(node, addr), 
    41     m_bps (DataRate (0xffffffff))
    41     m_bps (DataRate (0xffffffff))
    42 {
    42 {
    43   NS_DEBUG ("CsmaCdNetDevice::CsmaCdNetDevice (" << node << ")");
    43   NS_DEBUG ("CsmaCdNetDevice::CsmaCdNetDevice (" << node << ")");
    44   m_encapMode = encapMode;
    44   m_encapMode = encapMode;
    45 
    45 
    47 }
    47 }
    48 
    48 
    49 CsmaCdNetDevice::CsmaCdNetDevice (Ptr<Node> node, Eui48Address addr, 
    49 CsmaCdNetDevice::CsmaCdNetDevice (Ptr<Node> node, Eui48Address addr, 
    50                                   CsmaCdEncapsulationMode encapMode,
    50                                   CsmaCdEncapsulationMode encapMode,
    51                                   bool sendEnable, bool receiveEnable) 
    51                                   bool sendEnable, bool receiveEnable) 
    52   : NetDevice(node, addr.ConvertTo ()), 
    52   : NetDevice(node, addr), 
    53     m_bps (DataRate (0xffffffff))
    53     m_bps (DataRate (0xffffffff))
    54 {
    54 {
    55   NS_DEBUG ("CsmaCdNetDevice::CsmaCdNetDevice (" << node << ")");
    55   NS_DEBUG ("CsmaCdNetDevice::CsmaCdNetDevice (" << node << ")");
    56   m_encapMode = encapMode;
    56   m_encapMode = encapMode;
    57 
    57 
    94   m_txMachineState = READY;
    94   m_txMachineState = READY;
    95   m_tInterframeGap = Seconds(0);
    95   m_tInterframeGap = Seconds(0);
    96   m_channel = 0; 
    96   m_channel = 0; 
    97   m_queue = 0;
    97   m_queue = 0;
    98 
    98 
    99   EnableBroadcast (Eui48Address ("ff:ff:ff:ff:ff:ff").ConvertTo ());
    99   EnableBroadcast (Eui48Address ("ff:ff:ff:ff:ff:ff"));
   100   EnableMulticast();
   100   EnableMulticast();
   101   EnablePointToPoint();
   101   EnablePointToPoint();
   102 
   102 
   103   SetSendEnable (sendEnable);
   103   SetSendEnable (sendEnable);
   104   SetReceiveEnable (receiveEnable);
   104   SetReceiveEnable (receiveEnable);
   158     {
   158     {
   159       return;
   159       return;
   160     }
   160     }
   161   EthernetHeader header (false);
   161   EthernetHeader header (false);
   162   EthernetTrailer trailer;
   162   EthernetTrailer trailer;
   163   Eui48Address source = Eui48Address::ConvertFrom (GetAddress ());
   163   Eui48Address source = GetAddress ();
   164   header.SetSource(source);
   164   header.SetSource(source);
   165   header.SetDestination(dest);
   165   header.SetDestination(dest);
   166 
   166 
   167   uint16_t lengthType = 0;
   167   uint16_t lengthType = 0;
   168   switch (m_encapMode) 
   168   switch (m_encapMode) 
   199       
   199       
   200   p.RemoveTrailer(trailer);
   200   p.RemoveTrailer(trailer);
   201   trailer.CheckFcs(p);
   201   trailer.CheckFcs(p);
   202   p.RemoveHeader(header);
   202   p.RemoveHeader(header);
   203 
   203 
   204   Eui48Address broadcast = Eui48Address::ConvertFrom (GetBroadcast ());
   204   Eui48Address broadcast = GetBroadcast ();
   205   Eui48Address destination = Eui48Address::ConvertFrom (GetAddress ());
   205   Eui48Address destination = GetAddress ();
   206   if ((header.GetDestination() != broadcast) &&
   206   if ((header.GetDestination() != broadcast) &&
   207       (header.GetDestination() != destination))
   207       (header.GetDestination() != destination))
   208     {
   208     {
   209       return false;
   209       return false;
   210     }
   210     }
   250 
   250 
   251   // Only transmit if send side of net device is enabled
   251   // Only transmit if send side of net device is enabled
   252   if (!IsSendEnabled())
   252   if (!IsSendEnabled())
   253     return false;
   253     return false;
   254 
   254 
   255   Eui48Address address = Eui48Address::ConvertFrom (dest);
   255   Eui48Address address = dest;
   256   AddHeader(p, address, protocolNumber);
   256   AddHeader(p, address, protocolNumber);
   257 
   257 
   258   // Place the packet to be sent on the send queue
   258   // Place the packet to be sent on the send queue
   259   if (m_queue->Enqueue(p) == false )
   259   if (m_queue->Enqueue(p) == false )
   260     {
   260     {