src/network/model/socket.cc
changeset 9145 5752b425cdf5
parent 9144 6a15c50388bc
child 9157 2d4305dd159a
equal deleted inserted replaced
9144:6a15c50388bc 9145:5752b425cdf5
    40     .SetParent<Object> ();
    40     .SetParent<Object> ();
    41   return tid;
    41   return tid;
    42 }
    42 }
    43 
    43 
    44 Socket::Socket (void)
    44 Socket::Socket (void)
    45 {
    45   : m_manualIpTos (false),
       
    46     m_manualIpTtl (false),
       
    47     m_ipRecvTos (false),
       
    48     m_ipRecvTtl (false),
       
    49     m_manualIpv6Tclass (false),
       
    50     m_manualIpv6HopLimit (false),
       
    51     m_ipv6RecvTclass (false),
       
    52     m_ipv6RecvHopLimit (false)
       
    53 {
       
    54   NS_LOG_FUNCTION_NOARGS ();
    46   m_boundnetdevice = 0;
    55   m_boundnetdevice = 0;
    47   m_recvPktInfo = false;
    56   m_recvPktInfo = false;
    48   NS_LOG_FUNCTION (this);
    57 
       
    58   m_ipTos = 0;
       
    59   m_ipTtl = 0;
       
    60   m_ipv6Tclass = 0;
       
    61   m_ipv6HopLimit = 0;
    49 }
    62 }
    50 
    63 
    51 Socket::~Socket ()
    64 Socket::~Socket ()
    52 {
    65 {
    53   NS_LOG_FUNCTION (this);
    66   NS_LOG_FUNCTION (this);
   351 {
   364 {
   352   NS_LOG_FUNCTION (this);
   365   NS_LOG_FUNCTION (this);
   353   return m_recvPktInfo;
   366   return m_recvPktInfo;
   354 }
   367 }
   355 
   368 
       
   369 bool
       
   370 Socket::IsManualIpTos (void) const
       
   371 {
       
   372   return m_manualIpTos;
       
   373 }
       
   374 
       
   375 bool
       
   376 Socket::IsManualIpv6Tclass (void) const
       
   377 {
       
   378   return m_manualIpv6Tclass;
       
   379 }
       
   380 
       
   381 bool
       
   382 Socket::IsManualIpTtl (void) const
       
   383 {
       
   384   return m_manualIpTtl;
       
   385 }
       
   386 
       
   387 bool
       
   388 Socket::IsManualIpv6HopLimit (void) const
       
   389 {
       
   390   return m_manualIpv6HopLimit;
       
   391 }
       
   392 
       
   393 void
       
   394 Socket::SetIpTos (uint8_t tos)
       
   395 {
       
   396   Address address;
       
   397   GetSockName (address);
       
   398   m_manualIpTos = true;
       
   399   m_ipTos = tos;
       
   400 }
       
   401 
       
   402 uint8_t
       
   403 Socket::GetIpTos (void) const
       
   404 {
       
   405   return m_ipTos;
       
   406 }
       
   407 
       
   408 void
       
   409 Socket::SetIpRecvTos (bool ipv4RecvTos)
       
   410 {
       
   411   m_ipRecvTos = ipv4RecvTos;
       
   412 }
       
   413 
       
   414 bool
       
   415 Socket::IsIpRecvTos (void) const
       
   416 {
       
   417   return m_ipRecvTos;
       
   418 }
       
   419 
       
   420 void
       
   421 Socket::SetIpv6Tclass (int tclass)
       
   422 {
       
   423   Address address;
       
   424   GetSockName (address);
       
   425 
       
   426   //If -1 or invalid values, use default
       
   427   if (tclass == -1 || tclass < -1 || tclass > 0xff)
       
   428     {
       
   429       //Print a warning
       
   430       if (tclass < -1 || tclass > 0xff)
       
   431         {
       
   432           NS_LOG_WARN ("Invalid IPV6_TCLASS value. Using default.");
       
   433         }
       
   434       m_manualIpv6Tclass = false;
       
   435       m_ipv6Tclass = 0;
       
   436     }
       
   437   else
       
   438     {
       
   439       m_manualIpv6Tclass = true;
       
   440       m_ipv6Tclass = tclass;
       
   441     }
       
   442 }
       
   443 
       
   444 uint8_t
       
   445 Socket::GetIpv6Tclass (void) const
       
   446 {
       
   447   return m_ipv6Tclass;
       
   448 }
       
   449 
       
   450 void
       
   451 Socket::SetIpv6RecvTclass (bool ipv6RecvTclass)
       
   452 {
       
   453   m_ipv6RecvTclass = ipv6RecvTclass;
       
   454 }
       
   455 
       
   456 bool
       
   457 Socket::IsIpv6RecvTclass (void) const
       
   458 {
       
   459   return m_ipv6RecvTclass;
       
   460 }
       
   461 
       
   462 void
       
   463 Socket::SetIpTtl (uint8_t ttl)
       
   464 {
       
   465   m_manualIpTtl = true;
       
   466   m_ipTtl = ttl;
       
   467 }
       
   468 
       
   469 uint8_t
       
   470 Socket::GetIpTtl (void) const
       
   471 {
       
   472   return m_ipTtl;
       
   473 }
       
   474 
       
   475 void
       
   476 Socket::SetIpRecvTtl (bool ipv4RecvTtl)
       
   477 {
       
   478   m_ipRecvTtl = ipv4RecvTtl;
       
   479 }
       
   480 
       
   481 bool
       
   482 Socket::IsIpRecvTtl (void) const
       
   483 {
       
   484   return m_ipRecvTtl;
       
   485 }
       
   486 
       
   487 void
       
   488 Socket::SetIpv6HopLimit (uint8_t ipHopLimit)
       
   489 {
       
   490   m_manualIpv6HopLimit = true;
       
   491   m_ipv6HopLimit = ipHopLimit;
       
   492 }
       
   493 
       
   494 uint8_t
       
   495 Socket::GetIpv6HopLimit (void) const
       
   496 {
       
   497   return m_ipv6HopLimit;
       
   498 }
       
   499 
       
   500 void
       
   501 Socket::SetIpv6RecvHopLimit (bool ipv6RecvHopLimit)
       
   502 {
       
   503   m_ipv6RecvHopLimit = ipv6RecvHopLimit;
       
   504 }
       
   505 
       
   506 bool
       
   507 Socket::IsIpv6RecvHopLimit (void) const
       
   508 {
       
   509   return m_ipv6RecvHopLimit;
       
   510 }
       
   511 
   356 /***************************************************************
   512 /***************************************************************
   357  *           Socket Tags
   513  *           Socket Tags
   358  ***************************************************************/
   514  ***************************************************************/
   359 
   515 
   360 SocketAddressTag::SocketAddressTag ()
   516 SocketAddressTag::SocketAddressTag ()
   476 {
   632 {
   477   NS_LOG_FUNCTION (this << &os);
   633   NS_LOG_FUNCTION (this << &os);
   478   os << "Ttl=" << (uint32_t) m_ttl;
   634   os << "Ttl=" << (uint32_t) m_ttl;
   479 }
   635 }
   480 
   636 
       
   637 SocketIpv6HopLimitTag::SocketIpv6HopLimitTag ()
       
   638 {
       
   639 }
       
   640 
       
   641 void 
       
   642 SocketIpv6HopLimitTag::SetHopLimit (uint8_t hopLimit)
       
   643 {
       
   644   m_hopLimit = hopLimit;
       
   645 }
       
   646 
       
   647 uint8_t 
       
   648 SocketIpv6HopLimitTag::GetHopLimit (void) const
       
   649 {
       
   650   return m_hopLimit;
       
   651 }
       
   652 
       
   653 NS_OBJECT_ENSURE_REGISTERED (SocketIpv6HopLimitTag);
       
   654 
       
   655 TypeId
       
   656 SocketIpv6HopLimitTag::GetTypeId (void)
       
   657 {
       
   658   static TypeId tid = TypeId ("ns3::SocketIpv6HopLimitTag")
       
   659     .SetParent<Tag> ()
       
   660     .AddConstructor<SocketIpv6HopLimitTag> ()
       
   661   ;
       
   662   return tid;
       
   663 }
       
   664 TypeId
       
   665 SocketIpv6HopLimitTag::GetInstanceTypeId (void) const
       
   666 {
       
   667   return GetTypeId ();
       
   668 }
       
   669 
       
   670 uint32_t 
       
   671 SocketIpv6HopLimitTag::GetSerializedSize (void) const
       
   672 { 
       
   673   return 1;
       
   674 }
       
   675 void 
       
   676 SocketIpv6HopLimitTag::Serialize (TagBuffer i) const
       
   677 { 
       
   678   i.WriteU8 (m_hopLimit);
       
   679 }
       
   680 void 
       
   681 SocketIpv6HopLimitTag::Deserialize (TagBuffer i)
       
   682 { 
       
   683   m_hopLimit = i.ReadU8 ();
       
   684 }
       
   685 void
       
   686 SocketIpv6HopLimitTag::Print (std::ostream &os) const
       
   687 {
       
   688   os << "HopLimit=" << (uint32_t) m_hopLimit;
       
   689 }
   481 
   690 
   482 SocketSetDontFragmentTag::SocketSetDontFragmentTag ()
   691 SocketSetDontFragmentTag::SocketSetDontFragmentTag ()
   483 {
   692 {
   484   NS_LOG_FUNCTION (this);
   693   NS_LOG_FUNCTION (this);
   485 }
   694 }
   540 {
   749 {
   541   NS_LOG_FUNCTION (this << &os);
   750   NS_LOG_FUNCTION (this << &os);
   542   os << (m_dontFragment ? "true" : "false");
   751   os << (m_dontFragment ? "true" : "false");
   543 }
   752 }
   544 
   753 
       
   754 
       
   755 SocketIpTosTag::SocketIpTosTag ()
       
   756 {
       
   757 }
       
   758 
       
   759 void
       
   760 SocketIpTosTag::SetTos (uint8_t ipTos)
       
   761 {
       
   762   m_ipTos = ipTos;
       
   763 }
       
   764 
       
   765 uint8_t
       
   766 SocketIpTosTag::GetTos (void) const
       
   767 {
       
   768   return m_ipTos;
       
   769 }
       
   770 
       
   771 TypeId
       
   772 SocketIpTosTag::GetTypeId (void)
       
   773 {
       
   774   static TypeId tid = TypeId ("ns3::SocketIpTosTag")
       
   775     .SetParent<Tag> ()
       
   776     .AddConstructor<SocketIpTosTag> ()
       
   777     ;
       
   778   return tid;
       
   779 }
       
   780 
       
   781 TypeId 
       
   782 SocketIpTosTag::GetInstanceTypeId (void) const
       
   783 {
       
   784   return GetTypeId ();
       
   785 }
       
   786 
       
   787 uint32_t
       
   788 SocketIpTosTag::GetSerializedSize (void) const
       
   789 {
       
   790   return sizeof (uint8_t);
       
   791 }
       
   792 
       
   793 void
       
   794 SocketIpTosTag::Serialize (TagBuffer i) const
       
   795 {
       
   796   i.WriteU8 (m_ipTos);
       
   797 }
       
   798 
       
   799 void
       
   800 SocketIpTosTag::Deserialize (TagBuffer i)
       
   801 {
       
   802   m_ipTos = i.ReadU8();
       
   803 }
       
   804 void
       
   805 SocketIpTosTag::Print (std::ostream &os) const
       
   806 {
       
   807   os << "IP_TOS = " << m_ipTos;
       
   808 }
       
   809 
       
   810 
       
   811 SocketIpv6TclassTag::SocketIpv6TclassTag ()
       
   812 {
       
   813 }
       
   814 
       
   815 void
       
   816 SocketIpv6TclassTag::SetTclass (uint8_t tclass)
       
   817 {
       
   818   m_ipv6Tclass = tclass;
       
   819 }
       
   820 
       
   821 uint8_t
       
   822 SocketIpv6TclassTag::GetTclass (void) const
       
   823 {
       
   824   return m_ipv6Tclass;
       
   825 }
       
   826 
       
   827 TypeId
       
   828 SocketIpv6TclassTag::GetTypeId (void)
       
   829 {
       
   830   static TypeId tid = TypeId ("ns3::SocketIpv6TclassTag")
       
   831     .SetParent<Tag> ()
       
   832     .AddConstructor<SocketIpv6TclassTag> ()
       
   833     ;
       
   834   return tid;
       
   835 }
       
   836 
       
   837 TypeId 
       
   838 SocketIpv6TclassTag::GetInstanceTypeId (void) const
       
   839 {
       
   840   return GetTypeId ();
       
   841 }
       
   842 
       
   843 uint32_t
       
   844 SocketIpv6TclassTag::GetSerializedSize (void) const
       
   845 {
       
   846   return sizeof (uint8_t);
       
   847 }
       
   848 
       
   849 void
       
   850 SocketIpv6TclassTag::Serialize (TagBuffer i) const
       
   851 {
       
   852   i.WriteU8 (m_ipv6Tclass);
       
   853 }
       
   854 
       
   855 void
       
   856 SocketIpv6TclassTag::Deserialize (TagBuffer i)
       
   857 {
       
   858   m_ipv6Tclass = i.ReadU8();
       
   859 }
       
   860 void
       
   861 SocketIpv6TclassTag::Print (std::ostream &os) const
       
   862 {
       
   863   os << "IPV6_TCLASS = " << m_ipv6Tclass;
       
   864 }
       
   865 
   545 } // namespace ns3
   866 } // namespace ns3