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 |