Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатор Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° 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 ОсновСн код (Boilerplate)
4.2.2 Π‘Π²ΡŠΡ€Π·Π°Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ
4.2.3 ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ns3
4.2.4 Π›ΠΎΠ³ΠΈΡ€Π°Π½Π΅
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 (ΡƒΠ·Π΅Π») прСдоставя ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° прСдставянията Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΈ устройства Π² симулации.

Врябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Node ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ функционалност. Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ прилоТСния, стСковС Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΈ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π°Π²Π°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ»Π΅Π·Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. ИзползвамС ΡΡŠΡ‰Π°Ρ‚Π° основна ΠΌΠΎΠ΄Π΅Π» Π² 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. Π’ голям ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΡ€Π΅ΠΆΠ° Ρ‰Π΅ трябва Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ мноТСство ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. Node, 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 ОсновСн код (Boilerplate)
ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π΄ Π² Ρ„Π°ΠΉΠ»Π° Π΅ Ρ€Π΅Π΄ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° 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 Π›ΠΎΠ³ΠΈΡ€Π°Π½Π΅

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

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

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

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

Π‘Π΅Π³Π° трябва Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚Π΅ докумСнтацията Doxygen Π·Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Logging. Π’ списъка с макроси Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° страницата Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ записа Π·Π° NS_LOG_COMPONENT_DEFINE. ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°, Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ β€žΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅β€œ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π·Π° рСгистриранС, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² цялост. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Π²ΡŠΡ€Ρ‚ΠΈΡ‚Π΅ Π½Π°Π΄ΠΎΠ»Ρƒ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ β€žMoreβ€¦β€œ ΠΏΠΎΠ΄ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π°.

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

4.2.5 Основна функция

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

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

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

Time::SetResolution (Time::NS);

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

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

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

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

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 ΠΈΠΌΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅. Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ фактичСски Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° основно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π΅Ρ…ΠΎ-ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ към възСл. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π΅, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° NodeContainter ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ видяхмС.

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

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

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

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

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

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));

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

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

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

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

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 бСшС Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°), Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Π½Π° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ СдинствСна клиСнтска Π΅Ρ…ΠΎ заявка, Ρ‰Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ симулацията Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ‡Π°ΠΊΠ°Π½Π΅. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° сС случи, оставащитС ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π‘ΠΏΡ€ΠΈ Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚, Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° няма Π΄Π° останат ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΈ Simulator::Run Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°. ΠœΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ.

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

Simulator::Destroy ();
return 0;
}

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

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

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

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

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