src/internet-stack/udp-l4-protocol.cc
changeset 3363 33d1ca2e4ba4
parent 3260 8c0ab08144e6
child 3404 b5d4a04c7b68
equal deleted inserted replaced
3362:9a6f1b3c6e0b 3363:33d1ca2e4ba4
    20 
    20 
    21 #include "ns3/log.h"
    21 #include "ns3/log.h"
    22 #include "ns3/assert.h"
    22 #include "ns3/assert.h"
    23 #include "ns3/packet.h"
    23 #include "ns3/packet.h"
    24 #include "ns3/node.h"
    24 #include "ns3/node.h"
       
    25 #include "ns3/boolean.h"
    25 
    26 
    26 #include "udp-l4-protocol.h"
    27 #include "udp-l4-protocol.h"
    27 #include "udp-header.h"
    28 #include "udp-header.h"
    28 #include "ipv4-end-point-demux.h"
    29 #include "ipv4-end-point-demux.h"
    29 #include "ipv4-end-point.h"
    30 #include "ipv4-end-point.h"
    43 UdpL4Protocol::GetTypeId (void)
    44 UdpL4Protocol::GetTypeId (void)
    44 {
    45 {
    45   static TypeId tid = TypeId ("ns3::UdpL4Protocol")
    46   static TypeId tid = TypeId ("ns3::UdpL4Protocol")
    46     .SetParent<Ipv4L4Protocol> ()
    47     .SetParent<Ipv4L4Protocol> ()
    47     .AddConstructor<UdpL4Protocol> ()
    48     .AddConstructor<UdpL4Protocol> ()
       
    49     .AddAttribute ("CalcChecksum", "If true, we calculate the checksum of outgoing packets"
       
    50                    " and verify the checksum of incoming packets.",
       
    51                    BooleanValue (false),
       
    52                    MakeBooleanAccessor (&UdpL4Protocol::m_calcChecksum),
       
    53                    MakeBooleanChecker ())
    48     ;
    54     ;
    49   return tid;
    55   return tid;
    50 }
    56 }
    51 
    57 
    52 UdpL4Protocol::UdpL4Protocol ()
    58 UdpL4Protocol::UdpL4Protocol ()
   149                        Ipv4Address const &source,
   155                        Ipv4Address const &source,
   150                        Ipv4Address const &destination,
   156                        Ipv4Address const &destination,
   151                        Ptr<Ipv4Interface> interface)
   157                        Ptr<Ipv4Interface> interface)
   152 {
   158 {
   153   NS_LOG_FUNCTION (this << packet << source << destination);
   159   NS_LOG_FUNCTION (this << packet << source << destination);
   154 
       
   155   UdpHeader udpHeader;
   160   UdpHeader udpHeader;
       
   161   if(m_calcChecksum)
       
   162   {
       
   163     udpHeader.EnableChecksums();
       
   164   }
       
   165 
       
   166   udpHeader.SetPayloadSize (packet->GetSize () - udpHeader.GetSerializedSize ());
       
   167   udpHeader.InitializeChecksum (source, destination, PROT_NUMBER);
       
   168 
   156   packet->RemoveHeader (udpHeader);
   169   packet->RemoveHeader (udpHeader);
       
   170 
       
   171   if(!udpHeader.IsChecksumOk ())
       
   172   {
       
   173     NS_LOG_INFO("Bad checksum : dropping packet!");
       
   174     return;
       
   175   }
       
   176 
   157   Ipv4EndPointDemux::EndPoints endPoints =
   177   Ipv4EndPointDemux::EndPoints endPoints =
   158     m_endPoints->Lookup (destination, udpHeader.GetDestinationPort (),
   178     m_endPoints->Lookup (destination, udpHeader.GetDestinationPort (),
   159                          source, udpHeader.GetSourcePort (), interface);
   179                          source, udpHeader.GetSourcePort (), interface);
   160   for (Ipv4EndPointDemux::EndPointsI endPoint = endPoints.begin ();
   180   for (Ipv4EndPointDemux::EndPointsI endPoint = endPoints.begin ();
   161        endPoint != endPoints.end (); endPoint++)
   181        endPoint != endPoints.end (); endPoint++)
   170                      uint16_t sport, uint16_t dport)
   190                      uint16_t sport, uint16_t dport)
   171 {
   191 {
   172   NS_LOG_FUNCTION (this << packet << saddr << daddr << sport << dport);
   192   NS_LOG_FUNCTION (this << packet << saddr << daddr << sport << dport);
   173 
   193 
   174   UdpHeader udpHeader;
   194   UdpHeader udpHeader;
       
   195   if(m_calcChecksum)
       
   196   {
       
   197     udpHeader.EnableChecksums();
       
   198   }
   175   udpHeader.SetDestinationPort (dport);
   199   udpHeader.SetDestinationPort (dport);
   176   udpHeader.SetSourcePort (sport);
   200   udpHeader.SetSourcePort (sport);
   177   udpHeader.SetPayloadSize (packet->GetSize ());
   201   udpHeader.SetPayloadSize (packet->GetSize ());
   178   udpHeader.InitializeChecksum (saddr,
   202   udpHeader.InitializeChecksum (saddr,
   179                                 daddr,
   203                                 daddr,