Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатор Π½Π° ΠΌΡ€Π΅ΠΆΠΈ ns-3. Π“Π»Π°Π²Π° 4

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатор Π½Π° ΠΌΡ€Π΅ΠΆΠΈ ns-3. Π“Π»Π°Π²Π° 4
Π³Π»Π°Π²ΠΈ 1,2
Π³Π»Π°Π²Π° 3

4 ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° концСпцията
4.1 ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ абстракции
4.1.1 Π’ΡŠΠ·Π΅Π» (Node)
4.1.2 ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Application)
4.1.3 Канал (Channel)
4.1.4 ΠœΡ€Π΅ΠΆΠΎΠ²ΠΎ устройство (Net Device)
4.1.5 Π’ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ
4.2 ΠŸΡŠΡ€Π²ΠΈ скрипт ns-3
4.2.1 ОсновСн код
4.2.2 Π’ΠΊΠ»ΡŽΡ‡Π²Π°Π΅ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ
4.2.3 ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ns3
4.2.4 Π›ΠΎΠ³Π²Π°Π½Π΅ (Logging)
4.2.5 Π“Π»Π°Π²Π½Π° функция
4.2.6 ИзползванС Π½Π° Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ
4.2.7 ИзползванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ
4.2.8 Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€
4.2.9 БглобяванС Π½Π° сцСнариитС Π²ΠΈ
4.3 Π˜ΡΡ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° ns-3

Π“Π»Π°Π²Π° 4

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° концСпцията

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° ΠΈΠ·ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΈΠ»ΠΈ пишСм ΠΊΠΎΠ΄ ns-3, Π΅ Π΄Π° обясним няколко основни понятия ΠΈ абстракции Π² систСмата. Много ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π·Π° някои, Π½ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌΠ΅ Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ част, Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚Π΅ Π½Π° стабилна основа.

4.1 ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ абстракции

Π’ Ρ‚Π°Π·ΠΈ част Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ някои Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, Π½ΠΎ ΠΈΠΌΠ°Ρ‚ спСцифично Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ns-3.

4.1.1 Π’ΡŠΠ·Π΅Π» (Node)

Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΆΠ°Ρ€Π³ΠΎΠ½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΎΡ‚ΠΎ устройство, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΡΠ²ΡŠΡ€Π·Π²Π° с ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, сС Π½Π°Ρ€ΠΈΡ‡Π° хост ΠΈΠ»ΠΈ понякога ΠΊΡ€Π°ΠΉΠ½Π° систСма. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ns-3 Π΅ симулатор Π½Π° ΠΌΡ€Π΅ΠΆΠ°, Π° Π½Π΅ симулатор Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, Π½ΠΈΠ΅ цСлСнасочСно Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° хост, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ тясно ΡΠ²ΡŠΡ€Π·Π°Π½ с Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ. ВмСсто Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΠ±Ρ‰ Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΡΡŠΡ‰ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ симулатори, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Ρ…ΠΎΠΆΠ΄Π° ΠΎΡ‚ тСорията Π½Π° Π³Ρ€Π°Ρ„ΠΈΡ‚Π΅ – възСл (Node).node).

Π’ ns-3 основната абстракция Π½Π° изчислитСлно устройство сС Π½Π°Ρ€ΠΈΡ‡Π° възСл. Π’Π°Π·ΠΈ абстракция Π΅ прСдставСна Π² C++ с класа Node. NodeNode (възСл) прСдоставя ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° прСдставянията Π½Π° изчислитСлнитС устройства Π² симулациитС.

Π’ΠΈΠ΅ трябва Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ Π£Π·Π΅Π» ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ функционалност. Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ прилоТСния, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π½ΠΈ стСковС ΠΈ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ, позволяващи Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ»Π΅Π·Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. НиС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡŠΡ‰Π°Ρ‚Π° Π±Π°Π·ΠΎΠ²Π° ΠΌΠΎΠ΄Π΅Π» Π² ns-3.

4.1.2 ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Application)

ОбикновСно ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΈΡΡ‚ софтуСр сС раздСля Π½Π° Π΄Π²Π° ΡˆΠΈΡ€ΠΎΠΊΠΈ класа. БистСмният софтуСр ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΈ рСсурси ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ†ΠΈΠΊΠ»ΠΈ Π½Π° процСсора, диск, ΠΌΡ€Π΅ΠΆΠ° ΠΈ Ρ‚.Π½., Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° изчислитСлна ΠΌΠΎΠ΄Π΅Π». БистСмният софтуСр ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π΅Π·ΠΈ рСсурси Π·Π° изпълнСниС Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставят нСпосрСдствСна ΠΏΠΎΠ»Π·Π° Π·Π° потрСбитСля. Π—Π° Π΄Π° постигнС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ†Π΅Π», потрСбитСлят ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ стартира ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° рСсурси, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ систСмния софтуСр.

ЧСсто Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ систСмния ΠΈ прилоТния софтуСр сС ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΈ промяна Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, която сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° Π² Π»ΠΎΠ²ΡƒΡˆΠΊΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма. Π’ ns‑3 няма Ρ€Π΅Π°Π»Π½Π° концСпция Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ няма понятия Π·Π° Π½ΠΈΠ²Π° Π½Π° ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΠΈΠ»ΠΈ систСмни извиквания. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ°ΠΌΠ΅ концСпцията Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°ΠΊΡ‚ΠΎ Π² "рСалния свят", Π·Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, софтуСрнитС прилоТСния работят Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ, прилоТСнията Π½Π° ns‑3 работят Π½Π° възли ns‑3 Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° симулации Π² симулирания свят.

Π’ ns‑3 основната абстракция Π·Π° потрСбитСлска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, която Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° дСйност Π·Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅, Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’Π°Π·ΠΈ абстракция Π΅ прСдставСна Π² C++ с класа Application (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). ΠšΠ»Π°ΡΡŠΡ‚ Application прСдоставя ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² симулации Π½Π° прСдставянията Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° вСрсия Π½Π° прилоТСнията Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π». ΠžΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ сС ΠΎΡ‡Π°ΠΊΠ²Π°, Ρ‡Π΅ Π·Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ Π½ΠΎΠ²ΠΈ прилоТСния, Ρ‰Π΅ спСцифицират класа Application Π² смисъл Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. Π’ Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ спСциализации Π½Π° класа Application, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ UdpEchoClientApplication ΠΈ UdpEchoServerApplication. ΠšΠ°ΠΊΡ‚ΠΎ сС ΠΎΡ‡Π°ΠΊΠ²Π°ΡˆΠ΅, Ρ‚Π΅Π·ΠΈ прилоТСния Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΡŠΡ€Π²ΡŠΡ€ прилоТСния, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ Π΅Ρ…ΠΎ-симулация Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ.

4.1.3 Канал (Channel)

Π’ рСалния свят ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°. ЧСсто срСдитС, ΠΏΡ€Π΅Π· ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π² Ρ‚Π΅Π·ΠΈ ΠΌΡ€Π΅ΠΆΠΈ, сС Π½Π°Ρ€ΠΈΡ‡Π°Ρ‚ ΠΊΠ°Π½Π°Π»ΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ Ethernet ΠΊΠ°Π±Π΅Π» към ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ Π½Π° стСната, Π²ΠΈΠ΅ ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° с Ethernet ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΊΠ°Π½Π°Π». Π’ симулирания свят Π½Π° ns-3, възСл сС ΡΠ²ΡŠΡ€Π·Π²Π° с ΠΎΠ±Π΅ΠΊΡ‚, прСдставляващ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΊΠ°Π½Π°Π». Π’ΡƒΠΊ основната абстракция Π½Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ° сС Π½Π°Ρ€ΠΈΡ‡Π° ΠΊΠ°Π½Π°Π» ΠΈ сС прСдставя Π² C++ с клас Channel (ΠΊΠ°Π½Π°Π»).

Клас ChannelChannel прСдоставя ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° взаимодСйствиСто ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π² ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ с възли. ΠšΠ°Π½Π°Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ ΡΡŠΡ‰ΠΎ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ спСциализирани ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π² смисъл Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. БпСциализацията Π½Π° ΠΊΠ°Π½Π°Π»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π° Π½Π΅Ρ‰ΠΎ просто ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊ. БпСциализираният ΠΊΠ°Π½Π°Π» ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π° слоТни Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ голям Ethernet ΠΊΠΎΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈΠΈΠ·ΠΌΠ΅Ρ€Π½ΠΎ пространство, пълно с прСпятствия Π² случай Π½Π° Π±Π΅Π·ΠΆΠΈΡ‡Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ.

Π’ Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ спСциализирани вСрсии Π½Π° ΠΊΠ°Π½Π°Π»Π°, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ CsmaChannelCsmaChannel, PointToPointChannelPointToPointChannel ΠΈ WifiChannelWifiChannel. CsmaChannel, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π° вСрсия Π½Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°, която Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Π° срСда с мноТСство Π΄ΠΎΡΡ‚ΡŠΠΏΠΈ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° носитСля. Π’ΠΎΠ²Π° Π½ΠΈ Π΄Π°Π²Π° функционалност, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° Ethernet.

4.1.4 ΠœΡ€Π΅ΠΆΠΎΠ²ΠΎ устройство (Net Device)

По-Ρ€Π°Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ искатС Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Π·Π°ΠΊΡƒΠΏΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΡ€Π΅ΠΆΠΎΠ² ΠΊΠ°Π±Π΅Π» ΠΈ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΎ устройство, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΎ (Π² тСрминологията Π½Π° ПК) ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠ°, която Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС инсталира Π² ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π°. Ако Π½Π° ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚ΠΊΠ° са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π΅ сС Π½Π°Ρ€ΠΈΡ‡Π°Ρ…Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ интСрфСйсни ΠΏΠ»Π°Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ. ДнСс ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ с Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ интСрфСйсни устройства, ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π΅ Π³ΠΈ Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ устройства.

ΠœΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚Π° няма Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· софтуСрСн Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ управлява Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅. Π’ Unix (ΠΈΠ»ΠΈ Linux), част ΠΎΡ‚ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΎΡ‚ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅ сС класифицира ΠΊΠ°Ρ‚ΠΎ устройство. Устройствата сС управляват с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ Π½Π° устройства, Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ устройства (NIC) сС управляват с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ Π·Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ устройства (network device drivers) ΠΈ ΠΈΠΌΠ°Ρ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ устройства (net devices). Π’ Unix ΠΈ Linux сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ с ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ устройства Ρ‡Ρ€Π΅Π· ΠΈΠΌΠ΅Π½Π°Ρ‚Π° ΠΈΠΌ, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ eth0.

Π’ ns-3 абстракцията Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎΡ‚ΠΎ устройство ΠΎΠ±Ρ…Π²Π°Ρ‰Π° ΠΊΠ°ΠΊΡ‚ΠΎ софтуСрния Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Ρ‚Π°ΠΊΠ° ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅. ΠŸΡ€ΠΈ симулация ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎΡ‚ΠΎ устройство сС "инсталира" Π² възСл, Π·Π° Π΄Π° ΠΌΡƒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠΈΡ€Π° с Π΄Ρ€ΡƒΠ³ΠΈ възли Ρ‡Ρ€Π΅Π· ΠΊΠ°Π½Π°Π»ΠΈ. ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ истински ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, Π²ΡŠΠ·Π΅Π»ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ към няколко ΠΊΠ°Π½Π°Π»Π° Ρ‡Ρ€Π΅Π· мноТСство устройства. NetDevices.

ΠœΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° абстракция Π½Π° устройството Π΅ прСдставСна Π² C++ Ρ‡Ρ€Π΅Π· класа NetDevice. ΠšΠ»Π°ΡΡŠΡ‚ NetDevice осигурява ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ с ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Node ΠΈ Channel; ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС спСциализиран ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π² контСкста Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. Π’ Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ няколко спСциализирани вСрсии Π½Π° NetDevice с ΠΈΠΌΠ΅Π½Π°Ρ‚Π° CsmaNetDevice, PointToPointNetDevice ΠΈ WifiNetDevice. Подобно Π½Π° мрСТовия Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Ethernet, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΡ€Π΅ΠΆΠ°, Ethernet, CsmaNetDevice Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с CsmaChannel, PointToPointNetDevice Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с PointToPointChannel, Π° WifiNetDevice β€” ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с WifiChannel.

4.1.5 Π’ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ

Π’ Ρ€Π΅Π°Π»Π½Π° ΠΌΡ€Π΅ΠΆΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ хост-ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ с Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ (ΠΈΠ»ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ) ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ. Π’ ns-3 Π±ΠΈΡ…ΠΌΠ΅ ΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Π΅ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ възли с ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ΅Π½ΠΈ NetDevices. Π’ голяма ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π° ΠΌΡ€Π΅ΠΆΠ° Ρ‰Π΅ трябва Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ мноТСство ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. Π£Π·Π΅Π», NetDevice ΠΈ Channel.

Въй ΠΊΠ°Ρ‚ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° NetDevices към възли, NetDevices към ΠΊΠ°Π½Π°Π»ΠΈ, Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° IP адрСси ΠΈ Ρ‚.Π½. Π² ns-3 прСдставлява ΠΎΠ±Ρ‰Π° Π·Π°Π΄Π°Ρ‡Π°, Π·Π° Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ сС ΠΌΠΎΠΆΠ΅ ΠΏΠΎ-лСсно, прСдоставямС Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ. НапримСр, Π·Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ NetDevice, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ мноТСства основни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ns-3, Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ MAC адрСс, Π΄Π° инсталиратС Ρ‚ΠΎΠ²Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ устройство Π² Node, Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ стСк ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ Π½Π° възСла ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ NetDevice с Channel. ΠžΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ, Π·Π° Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ няколко устройства към ΠΌΠ½ΠΎΠ³ΠΎΡ‚ΠΎΡ‡ΠΊΠΎΠ²ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ Π² ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½Π° ΠΌΡ€Π΅ΠΆΠ° (Internetworks). ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π·Π° топология, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π° вашС удобство обСдиняват Ρ‚Π΅Π·ΠΈ многочислСни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² проста Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΌΠΎΠ΄Π΅Π».

4.2 ΠŸΡŠΡ€Π²ΠΈ скрипт ns-3

Ако стС инсталирали систСмата, ΠΊΠ°ΠΊΡ‚ΠΎ бСшС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡ€Π΅, Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ вСрсия ns-3 Π² дирСктория с ΠΈΠΌΠ΅ repos Π² Π΄ΠΎΠΌΠ°ΡˆΠ½Π°Ρ‚Π° Π²ΠΈ дирСктория. ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² дирСкторията. release

Ако няматС Ρ‚Π°ΠΊΠ°Π²Π° дирСктория, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΡ€ΠΈ компилация Π½Π° Ρ€Π΅Π»ΠΈΠ·Π½Π°Ρ‚Π° вСрсия Π½Π° ns‑3 Π½Π΅ стС ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° дирСктория, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠ°:
$ ./waf configure β€”build-profile=release β€”out=build/release,
$ ./waf build

Ρ‚Π°ΠΌ трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ структура Π½Π° дирСктория, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° слСдната:

AUTHORS       examples      scratch       utils       waf.bat*
bindings      LICENSE       src           utils.py    waf-tools
build         ns3           test.py*      utils.pyc   wscript
CHANGES.html  README        testpy-output VERSION     wutils.py
doc           RELEASE_NOTES testpy.supp   waf*        wutils.pyc

ΠŸΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ Π² дирСкторията examples/tutorial. Врябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅ first.cc. Π’ΠΎΠ²Π° Π΅ скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ създадС простo Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π° възСла ΠΈ Ρ‰Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈ Π΅Π΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ тях. НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ скрипт Ρ€Π΅Π΄ ΠΏΠΎ Ρ€Π΅Π΄, Π·Π° Ρ†Π΅Π»Ρ‚Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ first.cc Π² любимия си Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.

4.2.1 ОсновСн код
ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π΄ във Ρ„Π°ΠΉΠ»Π° Π΅ Ρ€Π΅Π΄ Π½Π° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° emacs. Π’ΠΎΠΉ ΠΊΠ°Π·Π²Π° Π½Π° emacs относно Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² нашия ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄.

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */

Π’ΠΎΠ²Π° Π΅ Π²ΠΈΠ½Π°Π³ΠΈ доста спорСн Π²ΡŠΠΏΡ€ΠΎΡ, Π·Π°Ρ‚ΠΎΠ²Π° трябва Π΄Π° внСсСм яснота, Π·Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ΠΌ ΠΎΡ‚ ΠΏΡŠΡ‚Ρ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ns‑3, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π΅ ΠΏΡ€ΠΈΠ΅Π» стил Π½Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅, с ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° отговаря цСлият прСдоставСн ΠΊΠΎΠ΄. Ако искатС Π΄Π° внСсСтС своя ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ‰Π΅ трябва Π΄Π° отговарятС Π½Π° стандарта Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° ns‑3, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ описано Π² Ρ„Π°ΠΉΠ»Π° doc/codingstd.txt ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡƒΠ΅Π± страницата Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: https://www.nsnam.org/develop/contributing-code/coding-style/.

ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌΠ΅ Π²ΠΈ Π΄Π° свикнСтС с Π²ΠΈΠ΄Π° Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ns‑3 ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ стандарт всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с нашия ΠΊΠΎΠ΄. ЦСлият Π΅ΠΊΠΈΠΏ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΈ ΡΡŠΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ†ΠΈ сС съгласи с Ρ‚ΠΎΠ²Π° слСд извСстно нСдоволство. Π Π΅Π΄ΡŠΡ‚ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° emacs, посочСн ΠΏΠΎ-Π³ΠΎΡ€Π΅, опростява ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° emacs.

Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ns‑3 сС Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° GNU General Public License. Π©Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° GNU във всСки Ρ„Π°ΠΉΠ» ΠΎΡ‚ дистрибуцията Π½Π° ns‑3. ЧСсто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ извСстиС Π·Π° авторски ΠΏΡ€Π°Π²Π° Π·Π° Π΅Π΄Π½ΠΎ ΠΎΡ‚ участващитС учрСТдСния Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ns‑3 Π½Π°Π΄ тСкста Π½Π° GPL ΠΈ Π°Π²Ρ‚ΠΎΡ€Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

/* 
* This program is free software; you can redistribute it and/or modify 
* it under the terms of the GNU General Public License version 2 as 
* published by the Free Software Foundation; 
*
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details. 
* 
* You should have received a copy of the GNU General Public License 
* along with this program; if not, write to the Free Software 
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
*/

4.2.2 Π’ΠΊΠ»ΡŽΡ‡Π²Π°Π΅ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

БобствСният ΠΊΠΎΠ΄ Π·Π°ΠΏΠΎΡ‡Π²Π° с Ρ€Π΅Π΄ΠΈΡ†Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π·Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ (include).

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"

Π—Π° Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ΠΌ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π½Π° високонадСТдни сцСнарии Π΄Π° сС справят с голямото количСство Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Ρ‰ΠΈ Π² систСмата, Π½ΠΈΠ΅ Π³ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°ΠΌΠ΅ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ спорСд тяхната ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ Π΅Π΄ΠΈΠ½ Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π·Π°Ρ€Π΅ΠΆΠ΄Π° рСкурсивно всички Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² дадСния ΠΌΠΎΠ΄ΡƒΠ». ВмСсто Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ коя Π·Π°Π³Π»Π°Π²ΠΊΠ° Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΈ възмоТно Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ списък с зависимости, Π²ΠΈ Π΄Π°Π²Π°ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚Π΅ Π³Ρ€ΡƒΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с висока стСпСн Π½Π° дСтайлност. Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π½Π°ΠΉ-СфСктивният ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π½ΠΎ със сигурност ΠΏΡ€Π°Π²ΠΈ написванСто Π½Π° сцСнарии ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-лСсно.

ВсСки ΠΎΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ns-3 Π΅ поставСн Π² дирСктория с ΠΈΠΌΠ΅Ρ‚ΠΎ ns3 (ΠΏΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Π° дирСктория Π½Π° сборката), Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅ с ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° сборния процСс. Π€Π°ΠΉΠ»ΡŠΡ‚ ns3/core-module.h ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° ns-3, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² дирСкторията src/core Π² инсталираното ΠΎΡ‚ вас ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. Π’ списъка Π½Π° Ρ‚Π°Π·ΠΈ дирСктория Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ голям Π±Ρ€ΠΎΠΉ Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ сборка, Waf поставя ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² дирСкторията ns3 Π² поддирСкторията build/debug

Ако няматС Ρ‚Π°ΠΊΠ°Π²Π° дирСктория, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΡ€ΠΈ компилация Π½Π° Ρ€Π΅Π»ΠΈΠ·Π½Π°Ρ‚Π° вСрсия Π½Π° ns‑3 Π½Π΅ стС ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° дирСктория, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠ°:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
ΠΈΠ»ΠΈ
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build

ΠΈΠ»ΠΈ build/optimized, Π² зависимост ΠΎΡ‚ Π²Π°ΡˆΠ°Ρ‚Π° конфигурация. Waf ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ Ρ„Π°ΠΉΠ» Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° всички ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. ПонСТС, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, стриктно слСдватС Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ, Π²ΠΈΠ΅ Π²Π΅Ρ‡Π΅ стС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ

$ ./waf -d debug --enable-examples --enable-tests configure

Π·Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° дСбъг сборки, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстовС. Π’ΠΈΠ΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…Ρ‚Π΅

$ .\/waf

Π·Π° Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π² дирСкторията ../..//build/debug/ns3, Ρ‚Π°ΠΌ срСд Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅, Ρ‡Π΅ Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ всички ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΡ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

4.2.3 ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ns3

БлСдващият Ρ€Π΅Π΄ Π² скрипта first.cc Π΅ обявлСниС Π½Π° пространството ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°.

using namespace ns3;

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ns‑3 Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π² пространството Π½Π° C++, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΎ ns3. Π’ΠΎΠ²Π° Π³Ρ€ΡƒΠΏΠΈΡ€Π° всички ns‑3 ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΎΠ±Ρ…Π²Π°Ρ‚Π° извън Π³Π»ΠΎΠ±Π°Π»Π½ΠΎΡ‚ΠΎ пространство Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ, надявамС сС, Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ с Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠ΄. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° C++ въвСТда пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° ns‑3 Π² тСкущия (Π³Π»ΠΎΠ±Π°Π»Π΅Π½) Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ Ρ€Π΅Π³ΠΈΠΎΠ½. Π’ΠΎΠ²Π° Π΅ странСн Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС ΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ слСд Ρ‚ΠΎΠ²Π° изявлСниС, няма Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ ns3:: ΠΏΡ€Π΅Π΄ΠΈ цСлия ΠΊΠΎΠ΄ Π½Π° ns‑3, Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅. Ако Π½Π΅ стС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ с пространствата Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π°, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ сС към практичСски всяко Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΏΠΎ C++ ΠΈ сравнСтС пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° ns3 с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° std ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ. using namespace std; Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ cout ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅.

4.2.4 Π›ΠΎΠ³Π²Π°Π½Π΅ (Logging)

БлСдващият Ρ€Π΅Π΄ Π½Π° скрипта Π΅:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° изявлСниС ΠΊΠ°Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ място Π·Π° обсъТданС Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° систСма Π·Π° докумСнтация. DoxygenАко ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ уСбсайта Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ns‑3, Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π»ΠΈΠ½ΠΊ β€žΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡβ€œ (Documentation) Π² Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΡ‚ΠΎ мСню. Ако ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Π»ΠΈΠ½ΠΊ, Ρ‰Π΅ ΠΏΠΎΠΏΠ°Π΄Π½Π΅Ρ‚Π΅ Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° страница Π·Π° докумСнтация. Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π»ΠΈΠ½ΠΊ към β€žΠŸΠΎΡΠ»Π΅Π΄Π΅Π½ Ρ€Π΅Π»ΠΈΠ·β€œ, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈ ΠΎΡ‚Π²Π΅Π΄Π΅ Π΄ΠΎ докумСнтацията Π·Π° послСдната стабилна вСрсия Π½Π° ns‑3. Ако ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π»ΠΈΠ½ΠΊΠ° β€žAPI Documentationβ€œ, Ρ‰Π΅ ΠΏΠΎΠΏΠ°Π΄Π½Π΅Ρ‚Π΅ Π½Π° страницата Π½Π° докумСнтация Π·Π° APIs Π½Π° ns‑3.

Π’ лявата част Π½Π° страницата Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΎ прСдставянС Π½Π° структурата Π½Π° докумСнтацията. Π”ΠΎΠ±Ρ€ΠΎ място Π·Π° Π½Π°Ρ‡Π°Π»ΠΎ Π΅ β€žΠΊΠ½ΠΈΠ³Π°Ρ‚Π°β€œ Modules ns‑3 Π² Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π° навигацията ns‑3. Ако Ρ€Π°Π·Π³ΡŠΠ½Π΅Ρ‚Π΅ ΠœΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ списък с докумСнтацията Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ ns‑3. ΠšΠ°ΠΊΡ‚ΠΎ бСшС обсъдСно ΠΏΠΎ-Π³ΠΎΡ€Π΅, концСпцията Π·Π° ΠΌΠΎΠ΄ΡƒΠ» Ρ‚ΡƒΠΊ Π΅ пряко ΡΠ²ΡŠΡ€Π·Π°Π½Π° с Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π°. ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° ns‑3 сС обсъТда Π² Ρ€Π°Π·Π΄Π΅Π» ИзползванС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ към Π½Π΅Π³ΠΎ ΠΏΠΎ-късно Π² Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° посочСното ΠΏΠΎ-Π³ΠΎΡ€Π΅ изявлСниС, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π° Π―Π΄Ρ€ΠΎ, Π° слСд Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° Debugging tools, Π° слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ страницата Logging. Π©Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Logging.

Π‘Π΅Π³Π° трябва Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚Π΅ докумСнтацията Doxygen Π·Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Logging. Π’ списъка с макроси Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° страницата Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ запис Π·Π° NS_LOG_COMPONENT_DEFINE. ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΏΠΎ Π»ΠΈΠ½ΠΊΠ°, Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ "ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС" Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π²ΡŠΡ€Ρ‚ΠΈΡ‚Π΅ Π½Π°Π΄ΠΎΠ»Ρƒ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ "ΠŸΠΎΠ²Π΅Ρ‡Π΅..." ΠΏΠΎΠ΄ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π°.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ ΠΎΠ±Ρ‰ΠΎ прСдстава Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС случва, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Ρ‚Π΅ ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ докумСнтацията Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈΡ‚Π΅ NS_LOG_COMPONENT_DEFINE. Няма Π΄Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°ΠΌ докумСнтацията Ρ‚ΡƒΠΊ, Π½ΠΎ Π² Ρ€Π΅Π·ΡŽΠΌΠ΅, Ρ‰Π΅ ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π΄ обявява ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ с ΠΈΠΌΠ΅Ρ‚ΠΎ FirstScriptExample, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° консолната рСгистрация Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΏΠΎ Π»ΠΈΠ½ΠΊ Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ.

4.2.5 Π“Π»Π°Π²Π½Π° функция

Π’ слСдващитС Ρ€Π΅Π΄ΠΎΠ²Π΅ Π½Π° скрипта Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅,

int 
main (int argc, char *argv[])
{ 

Π’ΠΎΠ²Π° Π΅ просто обявлСниС Π½Π° основната функция Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° (скрипт). ΠšΠ°ΠΊΡ‚ΠΎ във всяка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π½Π° C++, трябва Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π³Π»Π°Π²Π½Π°Ρ‚Π° функция, която сС изпълнява ΠΏΡŠΡ€Π²Π°. Няма Π½ΠΈΡ‰ΠΎ особСно. Π’Π°ΡˆΠΈΡΡ‚ скрипт ns-3 просто Π΅ C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. БлСдващият Ρ€Π΅Π΄ Π·Π°Π΄Π°Π²Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π°Ρ‚Π° Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡ Π½Π° 1 наносСкунда, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

Time::SetResolution (Time::NS);

Π’Ρ€Π΅ΠΌΠ΅Π²Π°Ρ‚Π° Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡ ΠΈΠ»ΠΈ просто Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡ β€” Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠ°Ρ‚Π° стойност Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, която ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° (Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠ°Ρ‚Π° прСдставима Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π΅ стойности Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ). ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° само вСднъТ. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚, осигуряващ Ρ‚Π°Π·ΠΈ Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚, консумира ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π²Π΅Π΄Π½Π°Π³Π° слСд ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π° явно, освобоТдавамС ΠΏΠ°ΠΌΠ΅Ρ‚, прСдотвратявайки ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. (Ако Π½Π΅ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° явно, Ρ‚ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ бъдС 1 наносСкунда, Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Ρ‰Π΅ бъдС освободСна ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° симулацията.)

Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ Π΄Π²Π΅ Ρ€Π΅Π΄Π° Π½Π° сцСнария сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π² прилоТСнията EchoClient ΠΈ EchoServer:

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

Ако стС ΠΏΡ€ΠΎΡ‡Π΅Π»ΠΈ докумСнтацията Π·Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Logging, Ρ‰Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅, Ρ‡Π΅ ΠΈΠΌΠ° няколко Π½ΠΈΠ²Π° Π½Π° дСтайлност Π½Π° рСгистрацията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π·Π° всСки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’Π΅Π·ΠΈ Π΄Π²Π° Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π»ΠΎΠ³Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎ INFO Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅. На Ρ‚ΠΎΠ²Π° Π½ΠΈΠ²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° симулацията ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ.

Π‘Π΅Π³Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° топология ΠΈ стартиранС Π½Π° симулация. Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΎΡ‚ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° ΠΏΠΎ топология, Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° възмоТно Π½Π°ΠΉ-лСсна.

4.2.6 ИзползванС Π½Π° Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ

Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ Π΄Π²Π° Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ Π² нашия скрипт Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‰Π΅ ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Node ns-3, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ прСдставляват ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ Π² симулацията.

NodeContainer nodes;
nodes.Create (2);

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ, Π½Π΅ΠΊΠ° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ докумСнтацията Π·Π° класа NodeContainer. Π”Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π΅Ρ‚Π΅ Π² докумСнтацията Π·Π° Ρ‚ΠΎΠ·ΠΈ клас Π΅ ΠΏΡ€Π΅Π· Ρ€Π°Π·Π΄Π΅Π»Π° КласовС Π½Π° страницитС Doxygen. Ако Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Doxygen, просто ΠΏΡ€Π΅Π²ΡŠΡ€Ρ‚Π΅Ρ‚Π΅ Π½Π°Π³ΠΎΡ€Π΅ Π΄ΠΎ Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° страницата ΠΈ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° КласовС. Врябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΎΠ² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈ, Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Π΅ списък Π½Π° класовСтС. Под Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ списък Π½Π° всички класовС ns-3. ΠŸΡ€Π΅Π²ΡŠΡ€Ρ‚Π΅Ρ‚Π΅ Π½Π°Π΄ΠΎΠ»Ρƒ Π΄ΠΎ ns3 :: NodeContainer. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ класа, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π³ΠΎ, Π·Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ към докумСнтацията Π·Π° Π½Π΅Π³ΠΎ.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Π΅Π΄Π½Π° ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ абстракции Π΅ възСл. Π’ΠΎΠΉ прСдставлява ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, към ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ стСковС Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ‚Π΅, прилоТСния ΠΈ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ. Вопологичният ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ NodeContainer осигурява ΡƒΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° създаванС, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всякакви ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π£Π·Π΅Π», ΠΊΠΎΠΈΡ‚ΠΎ създавамС Π·Π° стартиранС Π½Π° симулацията. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π΄ ΠΏΠΎ-Π³ΠΎΡ€Π΅ просто Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π° NodeContainer, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°Ρ€ΠΈΡ‡Π°ΠΌΠ΅ nodes. Вторият Ρ€Π΅Π΄ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Create Π·Π° ΠΎΠ±Π΅ΠΊΡ‚Π° nodes ΠΈ иска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Π΄Π° създадС Π΄Π²Π° възСла. ΠšΠ°ΠΊΡ‚ΠΎ Π΅ описано Π² Doxygen, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ иска ΠΎΡ‚ систСмата ns-3 Π΄Π° създадС Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡ‚Π° Π£Π·Π΅Π» ΠΈ Π·Π°ΠΏΠ°Π·Π²Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ към Ρ‚Π΅Π·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² сСбС си.

Π‘ΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π² скрипта възли Π½Π΅ правят Π½ΠΈΡ‰ΠΎ Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π² ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° топологията Π΅ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ възли към ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°. Най-простата Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΌΡ€Π΅ΠΆΠ°, която ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅, Π΅ двупосочна Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π° възСла. Π‘Π΅Π³Π° Ρ‰Π΅ създадСм Ρ‚Π°ΠΊΠΎΠ²Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅.

PointToPointHelper

БъздавамС Π΄Π²ΡƒΡ‚ΠΎΡ‡ΠΊΠΎΠ²ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, дСйствайки ΠΏΠΎ познатия Π½ΠΈ шаблон, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΠΎΠΌΠΎΡ‰Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚ Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ниско Π½ΠΈΠ²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ. НСка ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Π΅ Π΄Π²Π°Ρ‚Π° Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ абстракта NetDevice ΠΈ Channel. Π’ рСалния свят Ρ‚Π΅Π·ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΊΠ°Π±Π΅Π»ΠΈ. ОбикновСно, Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ Π½Π΅Ρ‰Π° са тясно ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΈ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π½Π° ΠΎΠ±ΠΌΠ΅Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅ΠΆΠ΄Ρƒ устройства Ethernet ΠΏΠΎ Π±Π΅Π·ΠΆΠΈΡ‡Π΅Π½ ΠΊΠ°Π½Π°Π». ΠΠ°ΡˆΠΈΡ‚Π΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ слСдват Ρ‚Π°Π·ΠΈ тясна Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΈ Π·Π°Ρ‚ΠΎΠ²Π° Π² Ρ‚ΠΎΠ·ΠΈ сцСнарий Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ‚ PointToPointHelper Π·Π° настройка ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ns‑3 ΠΎΠ±Π΅ΠΊΡ‚ΠΈ PointToPointNetDevice ΠΈ PointToPointChannel. Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ Ρ€Π΅Π΄Π° Π² сцСнария:

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); 
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π΄,

PointToPointHelper pointToPoint;

създава Π² стСка СкзСмпляр Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° PointToPointHelper. ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° високо Π½ΠΈΠ²ΠΎ, слСдният Ρ€Π΅Π΄,

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

ΠΊΠ°Π·Π²Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° PointToPointHelper Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стойността β€ž5 Mbpsβ€œ (ΠΏΠ΅Ρ‚ ΠΌΠ΅Π³Π°Π±ΠΈΡ‚Π° Π² сСкунда) ΠΊΠ°Ρ‚ΠΎ β€žDataRateΒ».

ΠžΡ‚ ΠΏΠΎ-ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, Ρ€Π΅Π΄ΡŠΡ‚ β€žDataRateβ€œ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, PointToPointNetDevice. Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Doxygen Π·Π° класа ns3::PointToPointNetDevice ΠΈ Π² докумСнтацията Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetTypeId Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ списък с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ‚Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π° устройството. Π‘Ρ€Π΅Π΄ тях Ρ‰Π΅ ΠΈΠΌΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ β€žDataRateβ€œ. ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ns‑3 ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΠΏΠΈΡΡŠΡ†ΠΈ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ. ИзползвамС Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° простото настройванС Π½Π° симулацията Π±Π΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² слСдващия Ρ€Π°Π·Π΄Π΅Π».

Подобно Π½Π° β€žDataRateβ€œ Π² PointToPointNetDevice, Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ β€žDelayβ€œ, ΡΠ²ΡŠΡ€Π·Π°Π½ с PointToPointChannel. Ѐиналният Ρ€Π΅Π΄,

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

ΠΊΠ°Π·Π²Π° PointToPointHelper ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стойността β€ž2 msβ€œ (Π΄Π²Π΅ милисСкунди) ΠΊΠ°Ρ‚ΠΎ стойност Π½Π° Π·Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° разпространСниСто ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π° Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΠΎΠΉ създава впослСдствиС.

NetDeviceContainer

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² нашия сцСнарий ΠΈΠΌΠ°ΠΌΠ΅ NodeContainer, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π²Π° възСла. ИмамС PointToPointHelper, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π·Π° създаванС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ PointToPointNetDevices ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ PointToPointChannel. По ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ помощния ΠΎΠ±Π΅ΠΊΡ‚ Π½Π° топологията NodeContainer Π·Π° създаванС Π½Π° възли, Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ»ΠΈΠΌ PointToPointHelper Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π·Π° нас Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°, ΡΠ²ΡŠΡ€Π·Π°Π½Π° със ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ, настройванСто ΠΈ инсталиранСто Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ устройства. НуТдаСм сС ΠΎΡ‚ списък Π½Π° всички създадСни ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. NetDevice, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ NetDeviceContainer Π·Π° тяхното ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ смС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ NodeContainer Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ възли. Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ Π΄Π²Π° Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄,

NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ настройката Π½Π° устройствата ΠΈ ΠΊΠ°Π½Π°Π»Π°. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π΄ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° устройства, спомСнат ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π° вторият ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° основната Ρ€Π°Π±ΠΎΡ‚Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ PointToPointHelper ΠΏΡ€ΠΈΠ΅ΠΌΠ° NodeContainer ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. Π’ΡŠΡ‚Ρ€Π΅ NetDeviceContainer Π·Π° всСки възСл, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π² NodeContainer сС създава (Π·Π° Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ° трябва Π΄Π° ΠΈΠΌΠ° Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π²Π΅) PointToPointNetDevice сС създава ΠΈ сС Π·Π°ΠΏΠ°Π·Π²Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° устройства. PointToPointChannel сС създава, ΠΈ към Π½Π΅Π³ΠΎ сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½ΡΠ²Π°Ρ‚ Π΄Π²Π° PointToPointNetDevices. Π‘Π»Π΅Π΄ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ‚Π΅, ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈ Π² PointToPointHelper, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π² ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ.

Π‘Π»Π΅Π΄ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° pointToPoint.Install (nodes) ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π° възСла, всСки с инсталирано ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ устройство β€žΡ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°β€œ ΠΈ Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π» β€žΡ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°β€œ ΠΌΠ΅ΠΆΠ΄Ρƒ тях. И Π΄Π²Π΅Ρ‚Π΅ устройства Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Π΄Π°Π½Π½ΠΈ със скорост ΠΎΡ‚ ΠΏΠ΅Ρ‚ ΠΌΠ΅Π³Π°Π±ΠΈΡ‚Π° Π² сСкунда с закъснСниС ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΎΡ‚ Π΄Π²Π΅ милисСкунди.

InternetStackHelper

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ настроСни възли ΠΈ устройства, Π½ΠΎ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ възли Π½Π΅ са инсталирани стСковС ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ. Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ Π΄Π²Π° Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ Ρ‰Π΅ сС ΠΏΠΎΠ³Ρ€ΠΈΠΆΠ°Ρ‚ Π·Π° Ρ‚ΠΎΠ²Π°.

InternetStackHelper stack;
stack.Install (nodes);

InternetStackHelper прСдставлява Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ стСковС, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° PointToPointHelper Π·Π° Π΄Π²ΠΎΡ‚ΠΎΡ‡ΠΊΠΎΠ²ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ устройства. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° NodeContainer ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. ΠŸΡ€ΠΈ изпълнСниС Ρ‚ΠΎΠΉ Ρ‰Π΅ инсталира ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ стСка (TCP, UDP, IP ΠΈ Ρ‚.Π½.) Π½Π° всСки възСл Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Ipv4AddressHelper

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ Π½Π°ΡˆΠΈΡ‚Π΅ устройства с IP адрСси. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° IP адрСси. ЕдинствСният Π²ΠΈΠ΄ΠΈΠΌ Π·Π° потрСбитСля API Π΅ Π·Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° основСн IP адрСс ΠΈ маска Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° дСйствитСлното Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° адрСси (Ρ‚ΠΎΠ²Π° става Π½Π° ΠΏΠΎ-ниско Π½ΠΈΠ²ΠΎ Π² ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°). Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ Π΄Π²Π° Ρ€Π΅Π΄Π° ΠΊΠΎΠ΄ Π² нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ скрипт first.cc,

Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");

Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Ρ‚ ΠΏΠΎΠΌΠΎΡ‰Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚ адрСса ΠΈ ΠΌΡƒ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ трябва Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π° IP адрСси ΠΎΡ‚ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° 10.1.1.0, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ маска 255.255.255.0 Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚ΠΈΡ‚Π΅ адрСси Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΈ Ρ‰Π΅ нарастват ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ адрСс, Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Π±Π°Π·Π°, Ρ‰Π΅ бъдС 10.1.1.1, слСд Ρ‚ΠΎΠ²Π° 10.1.1.2 ΠΈ Ρ‚.Π½. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Π½Π° ниско Π½ΠΈΠ²ΠΎ систСмата ns‑3 запомня всички Ρ€Π°Π·ΠΊΡ€ΠΈΡ‚ΠΈ IP адрСси ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Ρ„Π°Ρ‚Π°Π»Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°, Π°ΠΊΠΎ случайно ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ситуация, ΠΏΡ€ΠΈ която Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ адрСс бъдС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ (ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Ρ‚Π°Π·ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Π° Π·Π° отстраняванС).

БлСдващият Ρ€Π΅Π΄ ΠΊΠΎΠ΄,

Ipv4InterfaceContainer interfaces = address.Assign (devices);

изпълнява дСйствитСлното Π½Π°Π·Π½Π°Ρ‡Π°Π²Π°Π½Π΅ Π½Π° адрСса. Π’ ns‑3 ΡΠ²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ IP адрСса с устройството, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ‚Π° Ipv4Interface. ΠšΠ°ΠΊΡ‚ΠΎ понякога Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½ списък Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ устройства, създадСни ΠΎΡ‚ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, понякога Π½ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΈ списък Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅, Ipv4Interface. Ipv4InterfaceContainer прСдоставя Ρ‚Π°Π·ΠΈ функционалност.

Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ ΠΌΡ€Π΅ΠΆΠ° Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°, с установСни стСковС ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ IP адрСси. Π‘Π΅Π³Π° Π½ΠΈ трябват прилоТСния Π·Π° гСнСрация Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° всСки възСл.

4.2.7 ИзползванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

ΠžΡ‰Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ основнитС абстракции Π½Π° систСмата ns‑3 Π΅ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). Π’ Ρ‚ΠΎΠ·ΠΈ сцСнарий ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄Π²Π΅ спСциализации Π½Π° основния клас ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ns‑3, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ UdpEchoServerApplication ΠΈ UdpEchoClientApplication. ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ случаи, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° основнитС ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. Π’ΡƒΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ UdpEchoServerHelper ΠΈ UdpEchoClientHelperΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π·Π° Π΄Π° улСсним ΠΆΠΈΠ²ΠΎΡ‚Π° си.

UdpEchoServerHelper

Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈ скрипт first.cc сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° настройка Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ UDP Echo Server Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ.

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π΄ ΠΊΠΎΠ΄ Π² прСдоставСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ създава UdpEchoServerHelper. ΠšΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ само ΠΏΠΎ сСбС си, Π° ΠΎΠ±Π΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° създавамС Ρ€Π΅Π°Π»Π½ΠΈ прилоТСния. Π•Π΄Π½ΠΎ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ споразумСния Π΅ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° конструктора Π½Π° помощния ΠΎΠ±Π΅ΠΊΡ‚. Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π½ΠΈΡ‰ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ€Ρ‚Π°, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Ρ‰Π΅ ΠΎΡ‡Π°ΠΊΠ²Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ; Ρ‚ΠΎΠ·ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΡΡŠΡ‰ΠΎ трябва Π΄Π° бъдС извСстСн Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ Π½Π° конструктора Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ€Ρ‚Π°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΡŠΡ‚, ΠΎΡ‚ своя страна, просто изпълнява SetAttribute с ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° стойност. По-късно, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° SetAttribute Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³Π° стойност Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° 'ΠŸΠΎΡ€Ρ‚'.

Подобно Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ UdpEchoServerHelper ΠΈΠΌΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅. Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° основно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π΅Ρ…ΠΎ-ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΡΠ²ΡŠΡ€Π·Π²Π° с възСл. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π΅, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° NodeContainer ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ видяхмС.

НСявното ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° C++, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ Ρ‚ΡƒΠΊ, ΠΏΡ€ΠΈΠ΅ΠΌΠ° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° node.Get (1) (ΠΊΠΎΠΉΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π° смарт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» към ΠΎΠ±Π΅ΠΊΡ‚Π° Π½Π° възСл β€” Ptr) ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² конструктора Π·Π° анонимния ΠΎΠ±Π΅ΠΊΡ‚ NodeContainer, ΠΊΠΎΠΉΡ‚ΠΎ слСд Ρ‚ΠΎΠ²Π° сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅. Ако Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π² C++ ΠΊΠΎΠ΄Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ с коя сигнатура сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΈ изпълнява, Ρ‚ΡŠΡ€ΡΠ΅Ρ‚Π΅ срСд нСявнитС прСобразувания.

Π‘Π΅Π³Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ echoServer.Install Ρ‰Π΅ инсталира ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ UdpEchoServerApplication Π½Π° намСрСния Π² NodeContainer, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ възли, възСл с индСкс 1. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ към всички прилоТСния (Π² Ρ‚ΠΎΠ·ΠΈ случай Π΅Π΄Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ΅Π½ NodeContainer, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ Π΅Π΄ΠΈΠ½ възСл), създадСн ΠΎΡ‚ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚Π° трябва Π΄Π° Π·Π°Π΄Π°Π΄Π°Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π° стартиранС Π½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ 'start' ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π° спрС 'stop'.ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ ΠΈ Π΄Π²Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. Π’Π΅Π·ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π° сС Π·Π°Π΄Π°Π²Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ApplicationContainer Start ΠΈ Stop. Π’Π΅Π·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏ Π’Ρ€Π΅ΠΌΠ΅. Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ явна послСдоватСлност ΠΎΡ‚ прСобразувания C++, Π·Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ C++ double 1.0 ΠΈ Π΄Π° Π³ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚Π΅ Π² ΠΎΠ±Π΅ΠΊΡ‚ tns‑3 Time, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠ±Π΅ΠΊΡ‚ Seconds Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π² сСкунди. ΠŸΠΎΠΌΠ½Π΅Ρ‚Π΅, Ρ‡Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»Π°, Π° C++ ΠΈΠΌΠ° свои собствСни ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°Ρ‚Π΅ Π½Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Ρ‰Π΅ сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚Π΅. Π”Π²Π΅ строки,

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π΅Ρ…ΠΎ-ΡΡŠΡ€Π²ΡŠΡ€ Ρ‰Π΅ сС стартира (Π²ΠΊΠ»ΡŽΡ‡ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ) слСд Π΅Π΄Π½Π° сСкунда слСд Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° симулацията ΠΈ Ρ‰Π΅ спрС (ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈ) слСд дСсСт сСкунди симулация. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ обявихмС ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π½Π° симулацията (ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π·Π° спиранС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ), ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС изпълнСно слСд дСсСт сСкунди, Ρ‰Π΅ бъдС симулирано Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ дСсСт сСкунди Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

UdpEchoClientHelper

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ echo сС настройва ΠΏΠΎ Π½Π°Ρ‡ΠΈΠ½, практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°. Има основСн ΠΎΠ±Π΅ΠΊΡ‚ UdpEchoClientApplication, ΠΊΠΎΠΉΡ‚ΠΎ сС управлява ΠΎΡ‚
UdpEchoClientHelper.

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));;

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° Π΅Ρ…ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° сС Π·Π°Π΄Π°Π²Π°Ρ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ UdpEchoClientHelper. НиС ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ (Π² ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°) Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ‚Π΅ "RemoteAddress" ΠΈ "RemotePort" Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π½Π°ΡˆΠ΅Ρ‚ΠΎ споразумСниС Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° конструктора Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°.

Π”Π° ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ Ipv4InterfaceContainer Π·Π° прослСдяванС Π½Π° IP адрСситС, ΠΊΠΎΠΈΡ‚ΠΎ смС Π½Π°Π·Π½Π°Ρ‡ΠΈΠ»ΠΈ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ устройства. НулСвият интСрфСйс Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с интСрфСйси Ρ‰Π΅ отговаря Π½Π° IP адрСса Π½Π° нулСвия възСл Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с възли. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ интСрфСйс Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с интСрфСйси ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° IP адрСса Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ възСл Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с възли. Π’Π°ΠΊΠ° Ρ‡Π΅, Π² ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π΄ ΠΊΠΎΠ΄ (ΠΎΡ‚Π³ΠΎΡ€Π΅) създавамС ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ ΠΈ ΠΌΡƒ ΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ отдалСчСният адрСс Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ‰Π΅ бъдС IP Π°Π΄Ρ€Π΅ΡΡŠΡ‚, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π½Π° възСла, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π° ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ трябва Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π½Π° дСвСтия ΠΏΠΎΡ€Ρ‚.

ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ Β«MaxPacketsΒ» ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° максималния Π±Ρ€ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° симулацията. ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ Β«IntervalΒ» ΡƒΠΊΠ°Π·Π²Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊΠΎΠ»ΠΊΠΎ дълго Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅, Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ Β«PacketSizeΒ» ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊΠΎΠ»ΠΊΠΎ голям трябва Π΄Π° Π΅ полСзният Ρ‚ΠΎΠ²Π°Ρ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π‘ Ρ‚Π°Π·ΠΈ комбинация ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½ΠΈΠ΅ ΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π΅Π΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ с Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° 1024 Π±Π°ΠΉΡ‚Π°.

ΠšΠ°ΠΊΡ‚ΠΎ Π² случая с Π΅Ρ…ΠΎ-ΡΡŠΡ€Π²ΡŠΡ€Π°, Π½ΠΈΠ΅ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ‚Π΅ Π½Π° Π΅Ρ…ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Start ΠΈ Stop, Π½ΠΎ Ρ‚ΡƒΠΊ стартирамС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° сСкунда слСд Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° (Π΄Π²Π΅ сСкунди слСд Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° симулацията).

4.2.8 Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ трябва Π΄Π° стартирамС симулацията. Π’ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½Π°Ρ‚Π° функция Simulator::Run.

Simulator::Run();

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ…ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ,

serverApps.Start(Seconds(1.0));
serverApps.Stop(Seconds(10.0));
...
clientApps.Start(Seconds(2.0));
clientApps.Stop(Seconds(10.0));

Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² симулатора Π·Π° 1.0 сСкунди, 2.0 сСкунди ΠΈ Π΄Π²Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π·Π° 10.0 сСкунди. Π‘Π»Π΅Π΄ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Simulator::Run, систСмата Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π° списъка с ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΈ Ρ‰Π΅ Π³ΠΈ изпълнява. ΠŸΡŠΡ€Π²ΠΎ Ρ‚ΠΎΠΉ Ρ‰Π΅ стартира ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ слСд 1.0 сСкунди, ΠΊΠΎΠ΅Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΅Ρ…ΠΎ-ΡΡŠΡ€Π²ΡŠΡ€Π° (Ρ‚ΠΎΠ²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ΅, ΠΎΡ‚ своя страна, Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ). Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ стартира ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ, ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΎ Π·Π° t = 2.0 сСкунди, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΅Ρ…ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠžΡ‚Π½ΠΎΠ²ΠΎ, Ρ‚ΠΎΠ²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€Π° ΠΎΡ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. РСализацията Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π·Π° стартиранС Π² Π΅Ρ…ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° симулацията, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΉΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄ΠΎ ΡΡŠΡ€Π²ΡŠΡ€Π°.

ΠΠΊΡ‚ΡŠΡ‚ Π½Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄ΠΎ ΡΡŠΡ€Π²ΡŠΡ€Π° Ρ‰Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π²Π΅Ρ€ΠΈΠ³Π° ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ Π·Π°Π΄ сцСната ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° с Π΅Ρ…ΠΎ-сигнали Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° синхронизиранС, ΠΊΠΎΠΈΡ‚ΠΎ смС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² сцСнария.

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ (Π½Π΅ΠΊΠ° Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ MaxPackets бСшС Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°), Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΈΠ½ΠΈΡ†ΠΈΡ€Π°Π½Π° ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ СдинствСн клиСнтски Π΅Ρ…ΠΎ-Π·Π°ΠΏΠΈΡ‚, Ρ‰Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ симулацията Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° сС случи, оставащитС ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Stop Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π±ΡŠΠ΄Π°Ρ‚ изпълнСни, няма Π΄Π° останат ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Simulator::Run Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°. Бимулацията Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π°.

ΠžΡΡ‚Π°Π²Π° само Π΄Π° ΠΏΡ€ΠΈΠ±Π΅Ρ€Π°Ρ‚ слСд сСбС си. Π’ΠΎΠ²Π° става Ρ‡Ρ€Π΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½Π°Ρ‚Π° функция Simulator::Destroy. Въй ΠΊΠ°Ρ‚ΠΎ бяха ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈ (ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ Π½Π° ниско Π½ΠΈΠ²ΠΎ ns‑3), ΠΊΠΎΠΈΡ‚ΠΎ са ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Π² симулатора Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ поставСни Ρ…ΡƒΠΊ Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π° ΡƒΠ½ΠΈΡ‰ΠΎΠΆΠ°Π²Π°Π½Π΅ Π½Π° всички ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са създадСни. НС Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° слСдитС сами Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ β€” всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ Simulator::Destroy ΠΈ Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅Ρ‚Π΅. БистСмата ns‑3 Ρ‰Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Ρ‚Π°Π·ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° вмСсто вас. ΠžΡΡ‚Π°Π½Π°Π»ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΎΡ‚ нашия ΠΏΡŠΡ€Π²ΠΈ ns‑3 скрипт, first.cc, правят Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΠ²Π°:

Simulator::Destroy ();
return 0;
}

Кога Ρ‰Π΅ сС спрС ΡΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚?

ns‑3 Π΅ симулатор Π½Π° дискрСтни ΡΡŠΠ±ΠΈΡ‚ΠΈΡ (DE). Π’ Ρ‚Π°ΠΊΡŠΠ² симулатор всяко ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ изпълнСниС, Π° симулацията ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Ρ‡Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° ΠΏΠΎ Ρ€Π΅Π΄Π° Π½Π° тяхното възникванС ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° симулацията. Π‘ΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° причинят ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΠ»Π°Π½ΠΈΡ€Π° сам сСбС си, Π·Π° Π΄Π° сигнализира Π² слСдващия ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»).

НачалнитС ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Ρ‚ ΠΎΡ‚ ΠΎΠ±Π΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, IPv6 Ρ‰Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π° опрСдСлянС Π½Π° услуги Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, заявки ΠΎΡ‚ съсСди ΠΈ Ρ‚.Π½. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ Ρ‚.Π½. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΡƒΠ»Π°, Π΅Π΄Π½ΠΎ ΠΈΠ»ΠΈ няколко ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Π‘ Π½Π°ΠΏΡ€Π΅Π΄Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° симулацията, ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° просто ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π½ΠΎΠ²ΠΈ. Бимулацията Ρ‰Π΅ сС спрС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, Π°ΠΊΠΎ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ станС ΠΏΡ€Π°Π·Π½Π° ΠΈΠ»ΠΈ Π°ΠΊΠΎ бъдС ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΎ спСциално ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅. Stop. Π‘ΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Stop сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΎΡ‚ функцията Simulator::Stop (спиранС Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ).

Има Ρ‚ΠΈΠΏΠΈΡ‡Π΅Π½ случай, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Simulator::Stop Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° спиранСто Π½Π° симулацията: ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° ΡΠ°ΠΌΠΎΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ сС ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Π‘Π°ΠΌΠΎΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈΡ‚Π΅ (ΠΈΠ»ΠΈ повтарящи сС) ΡΡŠΠ±ΠΈΡ‚ΠΈΡ са ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈΠ½Π°Π³ΠΈ сС ΠΏΡ€Π΅ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π°, Ρ‚Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π½Π΅ΠΏΡ€Π°Π·Π½Π°. Има ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ повтарящи сС ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

β€’ FlowMonitor β€” ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³ΡƒΠ±Π΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ;

β€’ RIPng β€” ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½Π° транслация Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅;

β€’ ΠΈ Ρ‚.Π½.

Π’ Ρ‚Π°ΠΊΠΈΠ²Π° случаи Simulator::Stop Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ спиранС Π½Π° симулацията. ОсвСн Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ns‑3 Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Смуляция, RealtimeSimulator сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π·Π° Π΄Π° синхронизира часовницитС Π½Π° симулацията с часовницитС Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, ΠΈ Simulator::Stop Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° спиранС Π½Π° процСса.

Много ΠΎΡ‚ симулационнитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ° Π½Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚ Simulator::Stop ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ²Π°Π½Π΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° Π² ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π°. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΡΡŠΡ‰ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Simulator::Stop. НапримСр, слСдният Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Ρ‰Π΅ Π·Π°ΠΏΠ»Π°Π½ΡƒΠ²Π° явна спирка Π½Π° 11-Ρ‚Π° сСкунда:

+ Simulator::Stop (Seconds (11.0));
  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}

По-Π³ΠΎΡ€Π΅ посочСното Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ няма Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ симулиранС СстСствСно Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° слСд 10 сСкунди. Но Π°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° спиранС Π² горния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΡ‚ 11 сСкунди Π½Π° 1 сСкунда, Ρ‰Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅, Ρ‡Π΅ симулиранСто сС спира, ΠΏΡ€Π΅Π΄ΠΈ всякакви Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ°Ρ‚ Π½Π° Π΅ΠΊΡ€Π°Π½Π° (Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 2 сСкунди симулирано Π²Ρ€Π΅ΠΌΠ΅).

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ Simulator::Stop ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ Simulator::Run; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Simulator::Run ΠΌΠΎΠΆΠ΅ Π½ΠΈΠΊΠΎΠ³Π° Π΄Π° Π½Π΅ Π²ΡŠΡ€Π½Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° основната ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π° изпълнСниС Π½Π° спирката!

4.2.9 БглобяванС Π½Π° сцСнариитС Π²ΠΈ

НаправихмС ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ прости скриптовС Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΎ. Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π΅ Π΄Π° поставитС вашия скрипт Π² дирСкторията scratch ΠΈ Ρ‚ΠΎΠΉ Ρ‰Π΅ бъдС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΡΡŠΠ±Ρ€Π°Π½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стартиратС Waf. НСка ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅. Π’ΡŠΡ€Π½Π΅Ρ‚Π΅ сС Π² основната дирСктория ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ examples/tutorial/first.cc Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° scratch

$ cd ../..
$ cp examples/tutorial/first.cc scratch/myfirst.cc

Π‘Π΅Π³Π° ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡŠΡ€Π²ΠΈΡ си ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° скрипт, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ waf:

$ .\/waf

Врябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, Ρ‡Π΅ Π²Π°ΡˆΠΈΡΡ‚ ΠΏΡŠΡ€Π²ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ Π±ΠΈΠ» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ създадСн.

Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\n[614\/708] cxx: scratch\/myfirst.cc -> build\/debug\/scratch\/myfirst_3.o\n[706\/708] cxx_link: build\/debug\/scratch\/myfirst_3.o -> build\/debug\/scratch\/myfirst\nWaf: НапусканС Π½Π° дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\n'build' Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (2.357s)

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° (ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π°ΠΊΠΎ ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° си Π² дирСктория scratch, Ρ‚ΠΎ ΠΈ Π΄Π° я стартиратС трябва ΠΎΡ‚ scratch):

$ ./waf --run scratch/myfirst

Врябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄:

Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\nWaf: НапусканС Π½Π° дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\n'build' Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (0.418s) Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2\nΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1\nΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.2

Π’ΡƒΠΊ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Ρ‡Π΅ систСмата Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ провСрява, Ρ‡Π΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚ Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π³ΠΎ стартира. Π’ΠΈΠΆΠ΄Π°Ρ‚Π΅ запис ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° echo ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» Π΅Π΄ΠΈΠ½ 1024-Π±Π°ΠΉΡ‚ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π° echo ΡΡŠΡ€Π²ΡŠΡ€ 10.1.1.2. Π’ΠΈΠ΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ записа Π½Π° echo ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1. Echo ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ ΠΌΡŠΠ»Ρ‡Π°Π»ΠΈΠ²ΠΎ повтаря ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ Π² ΠΆΡƒΡ€Π½Π°Π»Π° Π½Π° echo ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Ρ‡Π΅ Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π°.

4.3 Π˜ΡΡ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° ns-3

Π‘Π΅Π³Π°, слСд ΠΊΠ°Ρ‚ΠΎ стС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ някои ΠΎΡ‚ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈΡ‚Π΅ ns-3, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ някои ΠΎΡ‚ сорс ΠΊΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ Ρ‚Π°Π·ΠΈ функционалност. Най-новият ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Π½ Π½Π° нашия ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ‚Π° Π²Ρ€ΡŠΠ·ΠΊΠ°: https://gitlab.com/nsnam/ns-3-dev.git. Π’Π°ΠΌ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠ±ΠΎΠ±Ρ‰Π°Π²Π°Ρ‰Π° страница Mercurial Π·Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ Π΄ΡŠΡ€Π²ΠΎ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΡ‚Π΅ ns-3. Π’ Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° страницата Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ няколко Π»ΠΈΠ½ΠΊΠ°,

summary | shortlog | changelog | graph | tags | files

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Ρ‚Π΅ ΠΈ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π»ΠΈΠ½ΠΊΠ° към Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π³ΠΎΡ€Π½ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ:

drwxr-xr-x                               [up]
drwxr-xr-x                               bindings python  files
drwxr-xr-x                               doc              files
drwxr-xr-x                               examples         files
drwxr-xr-x                               ns3              files
drwxr-xr-x                               scratch          files
drwxr-xr-x                               src              files
drwxr-xr-x                               utils            files
-rw-r--r-- 2009-07-01 12:47 +0200 560    .hgignore        file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1886   .hgtags          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1276   AUTHORS          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 30961  CHANGES.html     file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 17987  LICENSE          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 3742   README           file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 16171  RELEASE_NOTES    file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 6      VERSION          file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 88110  waf              file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 28     waf.bat          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 35395  wscript          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 7673   wutils.py        file | revisions | annotate

ΠΠ°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° сцСнарии сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² дирСкторията examples. Ако Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ списък ΠΎΡ‚ ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠΈ. Π•Π΄ΠΈΠ½ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° tutorial β€” first.cc. Ако Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π½Π° first.cc , Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ…Ρ‚Π΅.

Борс ΠΊΠΎΠ΄ΡŠΡ‚ сС Π½Π°ΠΌΠΈΡ€Π° основно Π² дирСкторията src. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚Π΅ изходния ΠΊΠΎΠ΄, ΠΊΠ°Ρ‚ΠΎ ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° дирСкторията ΠΈΠ»ΠΈ Π²ΡŠΡ€Ρ…Ρƒ Π»ΠΈΠ½ΠΊΠ° "Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅" вдясно ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° дирСкторията. Ако ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ дирСкторията src, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ списък с ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° src. Ако слСд Ρ‚ΠΎΠ²Π° ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ поддирСкторията core, Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ списък с Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ (към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° написванС Π½Π° Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ) β€” abort.h. Ако ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π½Π° Π»ΠΈΠ½ΠΊΠ° abort.h, Ρ‰Π΅ Π±ΡŠΠ΄Π΅Ρ‚Π΅ насочСни към изходния Ρ„Π°ΠΉΠ» Π·Π° abort.h, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ макроси Π·Π° ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ‚ скриптовС, Π°ΠΊΠΎ сС открият Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΈ условия. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ†ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ Π² Ρ‚Π°Π·ΠΈ Π³Π»Π°Π²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² дирСкторията src/Applications/helper. НС сС ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡ‚Π΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉΡ‚Π΅, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ къдС Π΅ ΠΈ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ със стила Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° ns-3.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster