ns-3 рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓. рдкреНрд░рдХрд░рдг 3

ns-3 рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓. рдкреНрд░рдХрд░рдг 3
рдзрдбрд╛ 1,2

3 рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреЗ
3.1 рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди
3.2 рдкреВрд░реНрд╡рддрдпрд╛рд░реА
3.2.1 рд╕реНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣рдг рдореНрд╣рдгреВрди ns-3 рдкреНрд░рдХрд╛рд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ
3.3 Git рд╡рд╛рдкрд░реВрди ns-3 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ
3.3.1 рдмреЗрдХ рд╡рд╛рдкрд░реВрди ns-3 рд▓реЛрдб рдХрд░рдд рдЖрд╣реЗ
3.4 рд╡рд┐рдзрд╛рдирд╕рднрд╛ ns-3
3.4.1 build.py рд╕рд╣ рдЗрдорд╛рд░рдд
3.4.2 рдмреЗрдХ рд╕рд╣ рдЗрдорд╛рд░рдд
3.4.3 Waf рд╕рд╣ рддрдпрд╛рд░ рдХрд░рд╛
3.5 рдЪрд╛рдЪрдгреА рдПрдирдПрд╕-3
3.6 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рдгреЗ
3.6.1 рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рддрд░реНрдХ
3.6.2 рдбреАрдмрдЧрд┐рдВрдЧ
3.6.3 рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛

рдзрдбрд╛ 3

рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреЗ

рд╣рд╛ рдзрдбрд╛ рд╡рд╛рдЪрдХрд╛рдВрдирд╛ рдЕрд╢рд╛ рд╕рдВрдЧрдгрдХрд╛рдкрд╛рд╕реВрди рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рдЖрд╣реЗ рдЬреНрдпрд╛рдиреЗ рдХрджрд╛рдЪрд┐рдд ns-3 рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдирд╕реЗрд▓. рдпрд╛рдд рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо, рдкреВрд░реНрд╡рддрдпрд╛рд░реА, ns-3 рдХрд╕реЗ рдорд┐рд│рд╡рд╛рдпрдЪреЗ, ns-3 рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдЖрдгрд┐ рддреБрдордЪреЗ рдмрд┐рд▓реНрдб рдЖрдгрд┐ рд░рди рд╕рд╛рдзреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╕реЗ рддрдкрд╛рд╕рд╛рдпрдЪреЗ рдпрд╛рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ.

3.1 рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди

ns-3 рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕рд╣рдпреЛрдЧреА рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА рдкреНрд░рдгрд╛рд▓реА рдореНрд╣рдгреВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЕрд╕реЗрдВрдмреНрд▓реА рджрд░рдореНрдпрд╛рди, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪрд╛ рдХреЛрдб рдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрд╢реА рдЬреЛрдбрд▓реЗрд▓рд╛ рдЕрд╕рддреЛ. C++ рдХрд┐рдВрд╡рд╛ Python рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.

Ns-3 рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдореНрд╣рдгреВрди рд╡рд┐рддрд░реАрдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реАрдордзреНрдпреЗ рдкреНрд░рдердо рд▓рд╛рдпрдмреНрд░рд░реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдирдВрддрд░ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддрддреНрд╡рддрдГ, ns-3 рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдгрд╛рд▓реАрд╕рд╛рдареА рддрдпрд╛рд░ рд▓рд╛рдпрдмреНрд░рд░реА рдореНрд╣рдгреВрди рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЖрдгрд┐ рднрд╡рд┐рд╖реНрдпрд╛рдд рддреЗ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдкрд░рдВрддреБ рдЖрдЬрдХрд╛рд▓ рдмрд░реЗрдЪ рд╡рд╛рдкрд░рдХрд░реНрддреЗ ns-3 рд╕реНрд╡рддрдГ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реВрди рддреНрдпрд╛рдВрдЪреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд, рдореНрд╣рдгреВрди рд▓рд╛рдпрдмреНрд░рд░реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдЕрд╕рдгреЗ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ. рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рд░реЗрдбреАрдореЗрдб рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдгрд┐ рдкреЕрдХреЗрдЬреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рдо рдХреЛрдгреАрд╣реА рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреГрдкрдпрд╛ рдореЗрд▓рд┐рдВрдЧ рд▓рд┐рд╕реНрдЯрд╢реА рд╕рдВрдкрд░реНрдХ рд╕рд╛рдзрд╛. ns-рдбреЗрд╡реНрд╣рд▓рдкрд░реНрд╕.

рдкреБрдвреЗ, рдЖрдореНрд╣реА ns-3 рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рддреАрди рдорд╛рд░реНрдЧ рдкрд╛рд╣реВ. рдкреНрд░рдердо рдореБрдЦреНрдп рд╕рд╛рдЗрдЯрд╡рд░реВрди рдЕрдзрд┐рдХреГрдд рдкреНрд░рдХрд╛рд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рдЖрдгрд┐ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╣реЗ. рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ рдореВрд▓рднреВрдд ns-3 рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдирдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдкреНрд░рддреАрдВрдЪреА рдирд┐рд╡рдб рдЖрдгрд┐ рдЕрд╕реЗрдВрдмрд▓реА. рддрд┐рд╕рд░реЗ рдореНрд╣рдгрдЬреЗ ns-3 рд╕рд╛рдареА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд┐рд▓реНрдб рдЯреВрд▓реНрд╕ рд╡рд╛рдкрд░рдгреЗ. рд╕рд╛рдзрдиреЗ рдереЛрдбреА рд╡реЗрдЧрд│реА рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХрд╛рдХрдбреЗ рдЬрд╛рдК.

рдЕрдиреБрднрд╡реА рд▓рд┐рдирдХреНрд╕ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдЖрд╢реНрдЪрд░реНрдп рд╡рд╛рдЯреЗрд▓ рдХреА рдкреЕрдХреЗрдЬ рдореЕрдиреЗрдЬрд░ рд╡рд╛рдкрд░рдгрд╛рд▒реНрдпрд╛ рдЗрддрд░ рд▓рд╛рдпрдмреНрд░рд░реАрдВрдкреНрд░рдорд╛рдгреЗ ns-3 рд╣реЗ рдкреЕрдХреЗрдЬ рдореНрд╣рдгреВрди рдХрд╛ рджрд┐рд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА? рд╡рд┐рд╡рд┐рдз Linux рд╡рд┐рддрд░рдгрд╛рдВрд╕рд╛рдареА (рдЙрджрд╛. рдбреЗрдмрд┐рдпрди) рдмрд╛рдпрдирд░реА рдкреЕрдХреЗрдЬреЗрд╕ рдЕрд╕рд▓реА рддрд░реА, рдмрд╣реБрддреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рд▓рд╛рдпрдмреНрд░рд░реА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛рдд рдЖрдгрд┐ ns-3 рд╕реНрд╡рддрдГрдЪ рдкреБрдирд░реНрдмрд╛рдВрдзрдгреА рдХрд░рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдЕрд╕рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ. рдпрд╛ рдХрд╛рд░рдгрд╛рд╕реНрддрд╡, рдЖрдореНрд╣реА рд╕реНрддреНрд░реЛрддрд╛рдкрд╛рд╕реВрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ.

рдмрд╣реБрддреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА ns-3 рдЕрдзрд┐рдХрд╛рд░ рдореВрд│ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА, рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдирд╕рд▓реЗрд▓реЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЦрд╛рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ.

3.2 рдкреВрд░реНрд╡рддрдпрд╛рд░реА

рдЙрдкрд▓рдмреНрдз ns-3 рд▓рд╛рдпрдмреНрд░рд░реАрдВрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЪрд╛рдордзреНрдпреЗ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдпрдмреНрд░рд░реАрдВрд╡рд░ рдЕрдиреЗрдХ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдмрд╣реБрддреЗрдХ рднрд╛рдЧрд╛рдВрд╕рд╛рдареА ns-3 рдЕрдиреЗрдХ рд╕рд╛рдорд╛рдиреНрдп (рдмрд╣реБрддреЗрдХрджрд╛ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдкрд┐рдд) рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рд╕рдорд░реНрдердирд╛рд╕рд╣ рддрдпрд╛рд░ рдЖрдгрд┐ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ: рдПрдХ C++ рдХрдВрдкрд╛рдЗрд▓рд░, рдкрд╛рдпрдерди, рд╕реНрддреНрд░реЛрдд рдХреЛрдб рд╕рдВрдкрд╛рджрдХ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╢рдХреНрддреА, emacs рдХрд┐рдВрд╡рд╛ рдЧреНрд░рд╣рдг) рдЖрдгрд┐, рдЬрд░ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЕрд╕рддреАрд▓ рддрд░, Git рдЖрд╡реГрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА. рдмрд╣реБрддреЗрдХ рдкреНрд░рдердо-рд╡реЗрд│ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдХрд╛рд╣реА ns-3 рдкреНрд░рдЧрдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЧрд╣рд╛рд│ рдЕрд╕рд▓реНрдпрд╛рд╕ рдХрд╛рд│рдЬреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЬреНрдпрд╛рдВрдирд╛ рдкреВрд░реНрдг рд╕реНрдерд╛рдкрдирд╛ рд╣рд╡реА рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдХрд▓реНрдк рдПрдХ рд╡рд┐рдХреА рдкреНрд░рджрд╛рди рдХрд░рддреЛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдиреЗрдХ рдЙрдкрдпреБрдХреНрдд рдЯрд┐рдкрд╛ рдЖрдгрд┐ рдпреБрдХреНрддреНрдпрд╛ рдЕрд╕рд▓реЗрд▓реА рдкреГрд╖реНрдареЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд. рдЕрд╕реЗрдЪ рдПрдХ рдкрд╛рди рд╣реЗ рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рди рдкреЗрдЬ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╡рд┐рд╡рд┐рдз рд╕рд┐рд╕реНрдЯреАрдорд╕рд╛рдареА рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реВрдЪрдирд╛ рдЖрд╣реЗрдд, рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд: https://www.nsnam.org/wiki/Installation.

рдпрд╛ рд╡рд┐рдХреАрдЪрд╛ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд┐рдд рд╡рд┐рднрд╛рдЧ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЛ рдХреА рд╕рд╛рдорд╛рдиреНрдп ns-3 рдкрд░реНрдпрд╛рдпрд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдгрддреА рдкреЕрдХреЗрдЬреЗрд╕ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд рдЖрдгрд┐ Linux рдХрд┐рдВрд╡рд╛ macOS рдЪреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдлреНрд▓реЗрд╡рд░реНрд╕рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдХрдорд╛рдВрдб рджреЗрдЦреАрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд.

рддреБрдореНрд╣реА ns-3 рд╡рд┐рдХреА рдкреЗрдЬ рдХрд┐рдВрд╡рд╛ рдореБрдЦреНрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рд╕рдВрдзреАрдЪрд╛ рдлрд╛рдпрджрд╛ рдШреЗрдК рд╢рдХрддрд╛: https://www.nsnam.org, рдХрд╛рд░рдг рддреЗрдереЗ рдмрд░реАрдЪ рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ. ns-3 (ns-3.29) рдЪреНрдпрд╛ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреАрдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрди, ns-3 рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЦрд╛рд▓реАрд▓ рд╕рд╛рдзрдиреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд:

рдЯреВрд▓ рдкреЕрдХреЗрдЬ/рдЖрд╡реГрддреНрддреА

  • C++ рдХрдВрдкрд╛рдЗрд▓рд░
    clang++ рдХрд┐рдВрд╡рд╛ g++ (g++ рдЖрд╡реГрддреНрддреА рек.реп рдХрд┐рдВрд╡рд╛ рдЙрдЪреНрдЪ)
  • python рд▓рд╛
    python2 рдЖрд╡реГрддреНрддреА >= 2.7.10, рдХрд┐рдВрд╡рд╛ python3 рдЖрд╡реГрддреНрддреА >=3.4
  • Git
    рдХреЛрдгрддреАрд╣реА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА (GitLab.com рд╡рд░ ns-3 рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА)
  • рдЯрд╛рд░
    рдХреЛрдгрддреАрд╣реА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА (NSтАС3 рд░рд┐рд▓реАрдЭ рдЕрдирдкреЕрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА)
  • bunzip2
    рдХреЛрдгрддреАрд╣реА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА (nsтАС3 рд░рд┐рд▓реАрдЭ рдЕрдирдкреЕрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА)

рдкрд╛рдпрдердирдЪреА рдбреАрдлреЙрд▓реНрдЯ рдЖрд╡реГрддреНрддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЯрд╛рдЗрдк рдХрд░рд╛ python -V. g++ рдЖрд╡реГрддреНрддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЯрд╛рдЗрдк рдХрд░рд╛ g++ -v. рдХреЛрдгрддреАрд╣реА рд╕рд╛рдзрдиреЗ рдЧрд╣рд╛рд│ рдХрд┐рдВрд╡рд╛ рдЦреВрдк рдЬреБрдиреА рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреГрдкрдпрд╛ ns-3 рд╡рд┐рдХреА рдкреГрд╖реНрдард╛рд╡рд░реАрд▓ рдкреНрд░рддрд┐рд╖реНрдард╛рдкрди рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдкрд╣рд╛.

рдЖрддрд╛рдкрд╛рд╕реВрди, рдЖрдореНрд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЛ рдХреА рд╡рд╛рдЪрдХ рд▓рд┐рдирдХреНрд╕, рдореЕрдХрдУрдПрд╕ рдХрд┐рдВрд╡рд╛ рд▓рд┐рдирдХреНрд╕ рдПрдореБрд▓реЗрдЯрд░ рдЪрд╛рд▓рд╡рдд рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдХрд┐рдорд╛рди рд╡рд░реАрд▓ рд╕рд╛рдзрдиреЗ рдЖрд╣реЗрдд.

3.2.1 рд╕реНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣рдг рдореНрд╣рдгреВрди ns-3 рдкреНрд░рдХрд╛рд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ

ns-3 рдЪреНрдпрд╛ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЭ рдЖрдгрд┐ рдкреЕрдХреЗрдЬ рдЖрд╡реГрддреНрддреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВрди рдкреНрд░рдпреЛрдЧ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдгрд╛рд▒реНрдпрд╛ рдирд╡реАрди рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА рд╣реА рдХрд╛рд░рд╡рд╛рдИ рдЖрд╣реЗ. ns-3 рдкреНрд░рдХрд╛рд╢рди рд╕рдВрдХреБрдЪрд┐рдд рд╕реНрддреНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣рдг рдореНрд╣рдгреВрди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдХрдзреАрдХрдзреА рдореНрд╣рдгрддрд╛рдд рдЯрд╛рд░рдмреЙрд▓. рдЯрд╛рд░рдмреЙрд▓ рд╣реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╕рдВрдЧреНрд░рд╣рдг рд╕реНрд╡рд░реВрдк рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдиреЗрдХ рдлрд╛рдИрд▓реНрд╕ рдПрдХрддреНрд░ рдЬреЛрдбрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рд╕рдВрдЧреНрд░рд╣рдг рд╕рд╣рд╕рд╛ рд╕рдВрдХреБрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. ns-3 рдмреВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░реЗ рдЯрд╛рд░рдмреЙрд▓ рд╕реЛрдкреЗ рдЖрд╣реЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдПрдХ рдкреНрд░рдХрд╛рд╢рди рдирд┐рд╡рдбрдгреЗ, рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рдЖрдгрд┐ рдЕрдирдкреЕрдХ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЪрд▓рд╛ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдХреА, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди, рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрдерд╛рдирд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд ns-3 рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░. рд▓рд┐рдирдХреНрд╕ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реВрди рддреБрдореНрд╣реА рд░рд┐рд▓реАрдЭрдЪреА рдХрд╛рд░реНрдпрд░рдд рдкреНрд░рдд рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ (рдЕрд░реНрдерд╛рддрдЪ рдпреЛрдЧреНрдп рдЖрд╡реГрддреНрддреА рдХреНрд░рдорд╛рдВрдХ рдмрджрд▓реВрди)

$ cd 
$ mkdir workspace 
$ cd workspace 
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2 
$ tar xjf ns-allinone-3.29.tar.bz2 

рд╡рд░ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдЙрдкрдпреБрдХреНрддрддреЗрдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛ wget, рдЬреЗ рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░реВрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рдЖрд╣реЗ. рддреБрдореНрд╣реА рддреЗ рдЗрдиреНрд╕реНрдЯреЙрд▓ рдХреЗрд▓реЗ рдирд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рдпрд╛рд╕рд╛рдареА рддреБрдордЪрд╛ рдмреНрд░рд╛рдЙрдЭрд░ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.

рдпрд╛ рдЪрд░рдгрд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХреЗрд▓реНрдпрд╛рдиреЗ рддреБрдореНрд╣рд╛рд▓рд╛ ns-allinone-3.29 рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдиреЗрд▓реЗ рдЬрд╛рдИрд▓, рддреЗрдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдиреЗрдХ рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджрд┐рд╕рддреАрд▓.

$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.py

рддреБрдореНрд╣реА рдЖрддрд╛ ns-3 рдмреЗрд╕ рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреБрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЖрд╣рд╛рдд рдЖрдгрд┐ ns-3 рдмрд┐рд▓реНрдбрд┐рдВрдЧрдЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛рдК рд╢рдХрддрд╛.

3.3 Git рд╡рд╛рдкрд░реВрди ns-3 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ

ns-3 рдХреЛрдб GitLab.com рд╡рд░ Git рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬрдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ https://gitlab.com/nsnam/. рдЧрдЯ nsnam рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░рдХрд▓реНрдкрд╛рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рд╡рд┐рдз рднрд╛рдВрдбрд╛рд░рд╛рдВрдирд╛ рдПрдХрддреНрд░ рдЖрдгрддреЗ.

Git рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рд╡рд╛рдкрд░рдгреЗ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдкрд░реНрдпрд╛рд╡рд░рдгрд╛рд▓рд╛ рдлреЛрд░реНрдХ рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рдХреНрд▓реЛрди рдХрд░рдгреЗ ns-3-рдПрд▓рд┐рдиреЛрди. рд╣рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рдПрдХ рд╕рдВрдЪ рдЖрд╣реЗ рдЬреЛ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдпрдкрдгреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ ns-3 рдЙрдкрдкреНрд░рдгрд╛рд▓реАрдВрдЪреЗ рд▓реЛрдбрд┐рдВрдЧ рдЖрдгрд┐ рдЕрд╕реЗрдВрдмреНрд▓реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ. рддреБрдореНрд╣реА Git рд╡рд░ рдирд╡реАрди рдЕрд╕рд▓реНрдпрд╛рд╕, "рдлреЛрд░реНрдХ" рдЖрдгрд┐ "рдХреНрд▓реЛрди" рд╣реЗ рд╢рдмреНрдж рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдЕрдкрд░рд┐рдЪрд┐рдд рдЕрд╕рддреАрд▓; рддрд╕реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ рдХреА рддреБрдореНрд╣реА GitLab.com рд╡рд░ рд╕реНрдерд┐рдд рд░рд┐рдкреЙрдЭрд┐рдЯрд░реА рдХреНрд▓реЛрди рдХрд░рд╛ (рд╕реНрд╡рддрдГрдЪреА рдкреНрд░рдд рдмрдирд╡рд╛)

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git 
$ cd ns-3-allinone 

рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рдЖрдкрд▓реНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪреЗ рджреГрд╢реНрдп ns-3-рдПрд▓рд┐рдиреЛрди рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд╢рди рд╕рдВрдЧреНрд░рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдкреЗрдХреНрд╖рд╛ рдереЛрдбреЗ рд╡реЗрдЧрд│реЗ. рд╣реЗ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ:

$ ls
build.py constants.py download.py README util.py

рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд╣реЗ download.py, рдЬреЗ рдЕрддрд┐рд░рд┐рдХреНрддрдкрдгреЗ ns-3 рдЖрдгрд┐ рд╕реЛрдмрддрдЪрд╛ рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдХрд╛рдвреЗрд▓. рдпреЗрдереЗ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдПрдХ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗ: рдПрдХрддрд░ рдирд╡реАрдирддрдо ns-3 рд╡рд┐рдХрд╛рд╕ рд╕реНрдиреЕрдкрд╢реЙрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛:

$ python download.py

рдХрд┐рдВрд╡рд╛ рдзреНрд╡рдЬ рд╡рд╛рдкрд░реВрди ns-3 рд░рд┐рд▓реАрдЭрд▓рд╛ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреНрдпрд╛ -n рдкреНрд░рдХрд╛рд╢рди рдХреНрд░рдорд╛рдВрдХ рд╕реВрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА:

$ python download.py -n ns-3.29

рдпрд╛ рдЪрд░рдгрд╛рдирдВрддрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЬрд╛ ns-3-рдПрд▓рд┐рдиреЛрди рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рдВрдбрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ ns-3, рдмреЗрдХ рдХрд░рд╛рд╡реЗ, pybindgen ╨╕ netanim.

рд╢реЗрд░рд╛
рд╕реНрд╡рдЪреНрдЫ Ubuntu16.04 рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдорд╢реАрдирд╡рд░, рдорд▓рд╛ рдХрдорд╛рдВрдб рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ: $ sudo python3 download.py -n ns-3.29 (рдпрд╛рдкреБрдвреЗ рдЕрдиреБрд╡рд╛рджрдХрд╛рдЪреНрдпрд╛ рдиреЛрдЯреНрд╕).

3.3.1 рдмреЗрдХ рд╡рд╛рдкрд░реВрди ns-3 рд▓реЛрдб рдХрд░рдд рдЖрд╣реЗ

рд╡рд░реАрд▓ рджреЛрди рдкрджреНрдзрддреА (рд╕реНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣рдг рдХрд┐рдВрд╡рд╛ рднрд╛рдВрдбрд╛рд░ ns-3-рдПрд▓рд┐рдиреЛрди Git рджреНрд╡рд╛рд░реЗ) рдПрдХрд╛рдзрд┐рдХ рдНрдбрдСрдиреНрд╕рд╕рд╣ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреА рдПрдирдПрд╕-3 рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗрдд(pybindgen рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА netanim рдиреЗрдЯрд╡рд░реНрдХ рдЕреЕрдирд┐рдореЗрд╢рдирд╕рд╛рдареА). ns-3-allinone рдордзреНрдпреЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рддрд┐рд╕рд▒реНрдпрд╛ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрд▓рд╛ рдореНрд╣рдгрддрд╛рдд рдмреЗрдХ рдХрд░рд╛рд╡реЗ.

рдмреЗрдХ рдХрд░рд╛рд╡реЗ ns-3 рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдХрд╛рдзрд┐рдХ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬрдордзреАрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдЪреНрдпрд╛ рд╕рдордиреНрд╡рдпрд┐рдд рдмрд┐рд▓реНрдбрд┐рдВрдЧрд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ. рдмреЗрдХ рдХрд░рд╛рд╡реЗ ns-3 рдЪреНрдпрд╛ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдЖрд╡реГрддреНрддреНрдпрд╛ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рддрд╕реЗрдЪ ns-3 рд╡рд┐рддрд░рдгрд╛рдЪреНрдпрд╛ рдмреЗрд╕ рд╡реНрд╣рд░реНрдЬрдирдЪреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЬрд╕реЗ рдХреА рдкрд░реНрдпрд╛рд╡рд░рдг рдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЛрдб рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рди, CradleNetwork рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдкрд╛рд│рдгрд╛, рдирд╡реАрди Python рдмрд╛рдЗрдВрдбрд┐рдВрдЧреНрдЬ рдЖрдгрд┐ рд╡рд┐рд╡рд┐рдз ns-3 тАЬappsтАЭ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.

рд╢реЗрд░рд╛
CradleNetwork Simulation Cradle рд╣реЗ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрд╣реЗ рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░рдордзреНрдпреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ TCP/IP рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреЕрдХ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ ns-3 рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдирдордзреНрдпреЗ рдкреНрд░рдЧрдд рдХрд┐рдВрд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЕрд╕рдгреНрдпрд╛рдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдпрд╛ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдорд╛рд░реНрдЧрд╛рдЪрд╛ рдЕрд╡рд▓рдВрдм рдХрд░реВ рд╢рдХрддрд╛.

рдирд╡реАрдирддрдо ns-3 рдкреНрд░рдХрд╛рд╢рдирд╛рдВрдордзреНрдпреЗ рдмреЗрдХ рдХрд░рд╛рд╡реЗ рдЯрд╛рд░ рд░рд┐рд▓реАрдЭрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ. рд░рд┐рд▓реАрдЭрдордзреНрдпреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд░рд┐рд▓реАрдЭрдЪреНрдпрд╛ рд╡реЗрд│реА рд╡рд░реНрддрдорд╛рди рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЖрд╡реГрддреНрддреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдореНрд╣рдгрдЬреЗрдЪ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрд╡реГрддреНрддреА рдмреЗрдХ рдХрд░рд╛рд╡реЗ, рдЬреЗ рдкреНрд░рдХрд╛рд╢рди ns-3.29 рд╕рд╣ рд╡рд┐рддрд░реАрдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗ ns-3 рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдкреВрд░реНрд╡реАрдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА рдШрдЯрдХ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдирдВрддрд░рдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА рдШрдЯрдХ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА (рдЬрд░ рдкреЕрдХреЗрдЬ рд╡рд░реНрдгрди рдлрд╛рдЗрд▓ bakeconf.xml рдЕрджреНрдпрддрдирд┐рдд рдирд╛рд╣реА).

рдЖрдкрдг рдирд╡реАрдирддрдо рдкреНрд░рдд рджреЗрдЦреАрд▓ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ рдмреЗрдХ рдХрд░рд╛рд╡реЗрддреБрдордЪреНрдпрд╛ рд▓рд┐рдирдХреНрд╕ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реВрди (рддреБрдореНрд╣реА Git рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВрди):

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА git рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рддрд╛, рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ:

Cloning into 'bake'...
remote: Enumerating objects: 2086, done. 
remote: Counting objects: 100% (2086/2086), done. 
remote: Compressing objects: 100% (649/649), done. 
remote: Total 2086 (delta 1404), reused 2078 (delta 1399) 
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done. 
Resolving deltas: 100% (1404/1404), done.

рдЖрджреЗрд╢ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдХреНрд▓реЛрди рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдирд╛рд╡рд╛рдЪреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЕрд╕рд╛рд╡реА рдмреЗрдХ рдХрд░рд╛рд╡реЗ, рддреНрдпрд╛рддреАрд▓ рд╕рд╛рдордЧреНрд░реА рдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рд▓реА рдкрд╛рд╣рд┐рдЬреЗ:

$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO

рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рддреБрдореНрд╣реА рдЕрдиреЗрдХ Python рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд, Python рдореЙрдбреНрдпреВрд▓ рдирд╛рд╡рд╛рдЪреЗ рдмреЗрдХ рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ XML рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓. рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбреАрдЪреЗ ns-3 рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ рд╣реА рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдЖрд╣реЗ. рдЕрдиреЗрдХ рд╕рд╛рдиреБрдХреВрд▓рд┐рдд рд▓рдХреНрд╖реНрдп рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд:

  1. ns-3.29: рдкреНрд░рдХрд╛рд╢рдирд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбреНрдпреВрд▓; рддреЗ рдЯрд╛рд░рдмреЙрд▓рдордзреНрдпреЗ рд╕реЛрдбрд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ рдШрдЯрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрд▓;

  2. ns-3-dev: рдПрдХ рд╕рдорд╛рди рдореЙрдбреНрдпреВрд▓, рдкрд░рдВрддреБ рд╡рд┐рдХрд╛рд╕ рд╡реГрдХреНрд╖рд╛рдЪрд╛ рдХреЛрдб рд╡рд╛рдкрд░реВрди;

  3. ns-allinone-3.29: рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдХреНрд▓рд┐рдХ рд░реВрдЯрд┐рдВрдЧ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдХреНрд░реЕрдбрд▓, ns-3 рд╕рд╛рдареА рдУрдкрдирдлреНрд▓реЛ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЗрддрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ.

  4. ns-3-рдПрд▓рд┐рдиреЛрди: рдореЙрдбреНрдпреВрд▓рдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд╢рди рдЖрд╡реГрддреНрддреАрд╕рд╛рд░рдЦреЗ рд╕рд░реНрд╡рд╕рдорд╛рд╡рд┐рд╖реНрдЯ, рдкрд░рдВрддреБ рд╡рд┐рдХрд╛рд╕ рдХреЛрдбрд╕рд╛рдареА.

рд╢реЗрд░рд╛
рдХреНрд▓рд┐рдХ рдХрд░рд╛ тАФ рд░рд╛рдЙрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЙрдбреНрдпреВрд▓рд░ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░.

рдУрдкрдирдлреНрд▓реЛ рд╣реЗ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░реВрди, рд░рд╛рдЙрдЯрд░ рдЖрдгрд┐ рд╕реНрд╡рд┐рдЪрджреНрд╡рд╛рд░реЗ рдбреЗрдЯрд╛ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЖрд╣реЗ.

рд╕рдзреНрдпрд╛рдЪрд╛ рд╡рд┐рдХрд╛рд╕ рд╕реНрдиреЕрдкрд╢реЙрдЯ (рдиреЙрди-рд░рд┐рд▓реАрдЭ) ns-3 рдпреЗрдереЗ рдЖрдврд│реВ рд╢рдХрддреЛ:https://gitlab.com/nsnam/ns-3-dev.git.

рдбреЗрд╡реНрд╣рд▓рдкрд░ рдпрд╛ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬрд▓рд╛ рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рдХрд╛рдордХрд╛рдЬрд╛рдЪреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рдареЗрд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рддреЗ рд╡рд┐рдХрд╛рд╕ рдХреНрд╖реЗрддреНрд░рд╛рдд рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдд рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЛрдб рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдХрд░рдд рдирд╕рд▓реНрдпрд╛рд╕, рдЕрдзрд┐рдХреГрдд рдкреНрд░рдХрд╛рд╢рди рдирд┐рд╡рдбрд╛.

рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬрдЪреА рд╕реВрдЪреА рдмреНрд░рд╛рдЙрдЭ рдХрд░реВрди рдХрд┐рдВрд╡рд╛ ns-3 рдкреНрд░рдХрд╛рд╢рди рд╡реЗрдм рдкреГрд╖реНрдард╛рд╡рд░ рдЬрд╛рдКрди рддреБрдореНрд╣реА рдХреЛрдбрдЪреА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА рд╢реЛрдзреВ рд╢рдХрддрд╛:https://www.nsnam.org/releases/ рдЖрдгрд┐ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА рджреБрд╡реНрдпрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░реВрди. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрдг ns-3.29 рд╕рд╣ рд╕реБрд░реВ рдареЗрд╡реВ.

рдЖрддрд╛, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ ns-3 рдШрдЯрдХ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╕рд╛рдзрди рд╡рд╛рдкрд░реВ рдмреЗрдХ рдХрд░рд╛рд╡реЗ. рдЪрд▓рд╛ рдХрд╛рдорд╛рдмрджреНрджрд▓ рдХрд╛рд╣реА рдкреНрд░рд╛рд╕реНрддрд╛рд╡рд┐рдХ рд╢рдмреНрдж рдмреЛрд▓реВрдпрд╛ рдмреЗрдХ рдХрд░рд╛рд╡реЗ.

рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдкреЕрдХреЗрдЬ рд╕реНрд░реЛрдд рд▓реЛрдб рдХрд░реВрди рдмреЗрдХ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╕реНрд░реЛрдд рдЖрдгрд┐ рдмрд┐рд▓реНрдб рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рд▓рд╛рдпрдмреНрд░рд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ. рдмреЗрдХ рдХрд░рд╛рд╡реЗ рдмрд╛рдпрдирд░реА рд╕рдВрджрд░реНрдн рджреЗрдКрди рдЪрд╛рд▓рд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рдмреЗрдХ рдХрд░рд╛рд╡реЗ рдЬреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рддреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗ рд╣реЛрддреЗ рддреНрдпрд╛рдордзреВрди рдирд╛рд╣реА, рддреНрдпрд╛рдд рдкрде рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджрд┐рд▓рд╛ рдЬрд╛рддреЛ рдмреЗрдХ рдХрд░рд╛рд╡реЗ рддреБрдордЪреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рд╡рд░ (PATH рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓), рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ (рд▓рд┐рдирдХреНрд╕ рдмреЕрд╢ рд╢реЗрд▓рдЪреЗ рдЙрджрд╛рд╣рд░рдг). "рдмреЗрдХ" рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╡рд░ рдЬрд╛ рдЖрдгрд┐ рдирдВрддрд░ рдЦрд╛рд▓реАрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рд╛:

$ export BAKE_HOME=`pwd` 
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin 
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib

рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдареЗрд╡реЗрд▓ bake.py рд╢реЗрд▓ рдорд╛рд░реНрдЧрд╛рд╡рд░ рдЬрд╛ рдЖрдгрд┐ рдЗрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдирд╛ рддреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реА рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдИрд▓ рдмреЗрдХ рдХрд░рд╛рд╡реЗ. рдХрд╛рд╣реА рд╡рд╛рдкрд░рд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдмреЗрдХ рдХрд░рд╛рд╡реЗ, рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ PATH рдЖрдгрд┐ PYTHONPATH рд╕реЗрдЯрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА, рдкрд░рдВрддреБ ns-3-allinone (рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЕрдХреЗрдЬреЗрд╕рд╕рд╣) рдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рд▓реНрдбрд╕рд╛рдареА рд╕рд╣рд╕рд╛ рдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ.

рддреБрдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╡рд░ рдЬрд╛ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:

$ ./bake.py configure -e ns-3.29

рдкреБрдвреЗ рдЖрдкрдг рд╡рд┐рдЪрд╛рд░реВ рдмреЗрдХ рдХрд░рд╛рд╡реЗ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╡рд┐рд╡рд┐рдз рдШрдЯрдХ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрд░реЗрд╢реА рд╕рд╛рдзрдиреЗ рдЖрд╣реЗрдд рдХрд╛ рддреЗ рддрдкрд╛рд╕рд╛. рдбрд╛рдпрд▓ рдХрд░рд╛:

$ ./bake.py check

рдЖрдкрдг рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдХрд╛рд╣реАрддрд░реА рдкрд╣рд╛рд╡реЗ:

> Python - OK 
> GNU C++ compiler - OK 
> Mercurial - OK 
> Git - OK 
> Tar tool - OK 
> Unzip tool - OK 
> Make - OK 
> cMake - OK 
> patch tool - OK 
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

рд╡рд┐рд╢реЗрд╖рддрдГ, рдорд░реНрдХреНрдпреБрд░рд┐рдЕрд▓, рд╕реАрд╡реНрд╣реАрдПрд╕, рдЧрд┐рдЯ рдЖрдгрд┐ рдмрд╛рдЬрд╛рд░ рд╕рд╛рд░рдЦреА рдЕрдкрд▓реЛрдб рд╕рд╛рдзрдиреЗ рдпрд╛ рдЪрд░рдгрд╛рдд рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд рдХрд╛рд░рдг рддреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЛрдб рдорд┐рд│рд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рдЖрдкрд▓реНрдпрд╛ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдЧрд╣рд╛рд│ рд╕рд╛рдзрдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛ (рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╕реЗ рдорд╛рд╣рд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕) рдХрд┐рдВрд╡рд╛ рдорджрддреАрд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХрд╛рд╢реА рд╕рдВрдкрд░реНрдХ рд╕рд╛рдзрд╛.

рдкреБрдвреЗ, рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛:

$ ./bake.py download

рдкрд░рд┐рдгрд╛рдо рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдЕрд╕рд╛рд╡реЗ:

>> Searching for system dependency setuptools - OK 
>> Searching for system dependency libgoocanvas2 - OK 
>> Searching for system dependency gi-cairo - OK 
>> Searching for system dependency pygobject - OK 
>> Searching for system dependency pygraphviz - OK 
>> Searching for system dependency python-dev - OK 
>> Searching for system dependency qt - OK 
>> Searching for system dependency g++ - OK 
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK 
>> Downloading netanim-3.108 - OK 
>> Downloading ns-3.29 - OK

рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рд╣реЛрдИрд▓ рдХреА рддреАрди рд╕реНрддреНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. рдЖрддрд╛ рд╕реЛрд░реНрд╕ рдбрд┐рд░реЗрдХреНрдЯрд░реА рд╡рд░ рдЬрд╛ рдЖрдгрд┐ ls рдЯрд╛рдЗрдк рдХрд░рд╛; рдЖрдкрдг рдкрд╣рд╛рд╡реЗ:

$ cd source 
$ ls
netanim-3.108 ns-3.29 pybindgen

рдЖрддрд╛ рддреБрдореНрд╣реА ns-3 рд╡рд┐рддрд░рдг рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рддрдпрд╛рд░ рдЖрд╣рд╛рдд.

3.4 рд╡рд┐рдзрд╛рдирд╕рднрд╛ ns-3

ns-3 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, ns-3 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЕрдиреЗрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд. рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдЬреНрдпрд╛рд╡рд░ рдЖрдореНрд╣реА рдЬреЛрд░ рджреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рддреА рдореНрд╣рдгрдЬреЗ ns-3 рдирд╛рд╡рд╛рдЪреЗ рдмрд┐рд▓реНрдб рдЯреВрд▓ рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ рд╡рд╛рдлрдЦрд╛рд▓реА рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдмрд╣реБрддреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдХрд╛рдо рдХрд░рддреАрд▓ рд╡рд╛рдл, рдкрд░рдВрддреБ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рдд рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрд┐рд▓реНрдб рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд╣реА рд╕реБрд▓рдн рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд╣реЗрдд. рдореНрд╣рдгреВрди рдХреГрдкрдпрд╛, рдЖрдкрдг рдпрд╛рдмрджреНрджрд▓ рд╡рд╛рдЪрдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╡рд╛рдл, рдкрд╣рд╛ build.py рдЖрдгрд┐ рд╕рд╣ рдЕрд╕реЗрдВрдмреНрд▓реА рдмреЗрдХ рдХрд░рд╛рд╡реЗ.

3.4.1 build.py рд╕рд╣ рдЗрдорд╛рд░рдд

рдЦрдмрд░рджрд╛рд░реА рд╣реА рдмрд┐рд▓реНрдб рдкрд╛рдпрд░реА рдХреЗрд╡рд│ рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрддреНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣рдг рдЖрд╡реГрддреНрддреАрд╡рд░реВрди рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ; рдЖрдгрд┐ git рдХрд┐рдВрд╡рд╛ рдмреЗрдХ рджреНрд╡рд╛рд░реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА.

рд░рд┐рд▓реАрдЭ рдЖрд░реНрдХрд╛рдЗрд╡реНрд╣рд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдЯрд╛рд░рдмреЙрд▓, рдордзреНрдпреЗ ns-3-рдПрд▓рд┐рдиреЛрди рдПрдХ рд╕реБрд▓рдн рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд╣реЗ рдЬреА рдШрдЯрдХ рдПрдХрддреНрд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдХрд░реВ рд╢рдХрддреЗ. рддреНрдпрд╛рд▓рд╛ build.py рдореНрд╣рдгрддрд╛рдд. рд╣рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рдЙрдкрдпреБрдХреНрдд рдорд╛рд░реНрдЧрд╛рдиреЗ рдкреНрд░рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░реЗрд▓. рддрдерд╛рдкрд┐, рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА ns-3 рд╕рд╣ рдЕрдзрд┐рдХ рдкреНрд░рдЧрдд рд╕реЗрдЯрдЕрдк рдЖрдгрд┐ рдХрд╛рд░реНрдпрд╛рдордзреНрдпреЗ рд╕рд╣рд╕рд╛ ns-3 рдЪреА рд╕реНрд╡рддрдГрдЪреА рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯреАрдо, Waf рд╡рд╛рдкрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рддреЗ, рдЬреЗ рдпрд╛ рдЯреНрдпреБрдЯреЛрд░рд┐рдпрд▓рдордзреНрдпреЗ рдирдВрддрд░ рд╕рд╛рджрд░ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.

рд╡рд╛рдкрд░реВрди рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЯрд╛рд░рдмреЙрд▓, рдирдВрддрд░ рддреБрдордЪреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд ~/рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХрд╛рд╣реАрддрд░реА рдирд╛рд╡ рдЕрд╕рд▓реЗрд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ns-allinone-3.29. рдЦрд╛рд▓реАрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:

$ ./build.py --enable-examples --enable-tests

рдлреЛрди рдХреЗрд▓рд╛ рдЕрд╕рддрд╛ build.py рдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реА рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рддрд░реНрдХ рд╡рд╛рдкрд░рд▓реЗ, рдЬреЗ ns-3 рдордзреНрдпреЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд. рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд░реНрд╡ рдЙрдкрд▓рдмреНрдз рдореЙрдбреНрдпреВрд▓ рджреЗрдЦреАрд▓ рддрдпрд╛рд░ рдХрд░рддреЛ. рдордЧ, рддреБрдордЪреА рдЗрдЪреНрдЫрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп ns-3 рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рддреБрдордЪреНрдпрд╛ рдХрд╛рдорд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдирд╕рд▓реЗрд▓реЗ рдореЙрдбреНрдпреВрд▓ рд╡рдЧрд│реВ рд╢рдХрддрд╛.

рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдмрд░реЗрдЪ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрджреЗрд╢ рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рддреАрд▓ рдХрд╛рд░рдг рддреЗ рддреБрдореНрд╣реА рд▓реЛрдб рдХреЗрд▓реЗрд▓реЗ рд╡рд┐рд╡рд┐рдз рднрд╛рдЧ рддрдпрд╛рд░ рдХрд░рддреЗ. рдкреНрд░рдердо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕреЕрдирд┐рдореЗрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрд▓ netanim, рдирдВрддрд░ рдмрдВрдзрдирдХрд╛рд░рдХ рдЬрдирд░реЗрдЯрд░ pybindgen рдЖрдгрд┐ рд╢реЗрд╡рдЯреА ns-3. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рд╡рд░, рдЖрдкрдг рдЦрд╛рд▓реАрд▓ рдкрд╣рд╛рд╡реЗ:

Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s) 

Modules built:
antenna                aodv                     applications
bridge                 buildings                config-store
core                   csma                     csma-layout
dsdv                   dsr                      energy 
fd-net-device          flow-monitor             internet
internet-apps          lr-wpan                  lte
mesh                   mobility                 mpi
netanim (no Python)    network                  nix-vector-routing 
olsr                   point-to-point           point-to-point-layout 
propagation            sixlowpan                spectrum 
stats                  tap-bridge               test (no Python) 
topology-read          traffic-control          uan 
virtual-net-device     visualizer               wave 
wifi                   wimax 

Modules not built (see ns-3 tutorial for explanation):
brite                  click                    openflow 
Leaving directory ./ns-3.29

рд╕реВрдЪреАрдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рддреАрди рдУрд│реАрдВрдордзреНрдпреЗ рдЖрдореНрд╣реА рддрдпрд╛рд░ рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдореЙрдбреНрдпреВрд▓реНрд╕рдмрджреНрджрд▓ рд╕рдВрджреЗрд╢ рдкрд╛рд╣рддреЛ:

Modules not built (see ns-3 tutorial for explanation):
brite                     click

рдпрд╛рдЪрд╛ рд╕рд░рд│ рдЕрд░реНрде рдЕрд╕рд╛ рд╣реЛрддреЛ рдХреА рдмрд╛рд╣реНрдп рд▓рд╛рдпрдмреНрд░рд░реАрдВрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рдгрд╛рд░реЗ рдХрд╛рд╣реА ns-3 рдореЙрдбреНрдпреВрд▓ рдХрджрд╛рдЪрд┐рдд рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдирд╕рддреАрд▓ рдХрд┐рдВрд╡рд╛ рддреЗ рдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдирд╛рд╣реА рдХреА рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдПрдХрддреНрд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдирд╛рд╣реА рдХрд┐рдВрд╡рд╛ рдЕрд╕реЗрдВрдмрд▓ рдХреЗрд▓реЗрд▓реЗ рдореЙрдбреНрдпреВрд▓ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реАрдд.

3.4.2 рдмреЗрдХ рд╕рд╣ рдЗрдорд╛рд░рдд

рдЬрд░ рддреБрдореНрд╣реА рдкреНрд░рдХрд▓реНрдк рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрдордзреВрди рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд░реАрд▓ рдмреЗрдХрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА ns-3 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡реВ рд╢рдХрддрд╛. рдбрд╛рдпрд▓ рдХрд░рд╛:

$ ./bake.py build

рдЖрдгрд┐ рдЖрдкрдг рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдкрд╣рд╛рд╡реЗ:

>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK 
>> Building netanim-3.108 - OK 
>> Building ns-3.29 - OK

рдкреНрд░реЙрдордкреНрдЯ: рддреБрдореНрд╣реА "bake.py deploy" рд╡рд░ рдХреЙрд▓ рдХрд░реВрди рдПрдХрд╛рдЪ рд╡реЗрд│реА рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдкреНрд╕ рджреЛрдиреНрд╣реА рдХрд░реВ рд╢рдХрддрд╛.

рд╕рд░реНрд╡ рдШрдЯрдХ рдПрдХрддреНрд░ рдХрд░рдгреЗ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдШрдЯрдХ рдЖрд╡рд╢реНрдпрдХ рдирд╕рд▓реНрдпрд╛рд╕ рдЕрд╕реЗрдВрдмреНрд▓реА рд╕реБрд░реВ рд░рд╛рд╣реАрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрд▓реАрдХрдбреАрд▓ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА castxml рд╕рд╛рдзрдирд╛рджреНрд╡рд╛рд░реЗ рдПрдХрддреНрд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдмреЗрдХ рдХрд░рд╛рд╡реЗ рд╕рд░реНрд╡ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдирд╛рд╣реА. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдпрд╛рд╕рд╛рд░рдЦрд╛ рд╕рдВрджреЗрд╢ рджрд┐рд╕реЗрд▓:

>> Building castxml - Problem 
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.

рддрдерд╛рдкрд┐, castxml рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрджреНрдпрдпрд╛рд╡рдд рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕рдЪ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдмрд░реНтАНрдпрд╛рдЪ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА (рдХрд┐рдорд╛рди рддреЗ ns-3 рдмрджрд▓рдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд), рддреНрдпрд╛рдореБрд│реЗ рдЕрд╢рд╛ рдЗрд╢рд╛рд▒реНрдпрд╛рдВрдХрдбреЗ рд╕рдзреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рдЬрд░ рддреЗ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реЗ рддрд░, рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рддреБрдореНрд╣рд╛рд▓рд╛ рдЧрд╣рд╛рд│ рдЕрд╡рд▓рдВрдмрдирд╛рдВрдмрджреНрджрд▓ рдЗрд╢рд╛рд░рд╛ рджреЗрдИрд▓:

$ ./bake.py show

рддреБрдореНрд╣реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреЕрдХреЗрдЬреЗрд╕рдЪреА рд╡рд┐рд╡рд┐рдз рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡реЗ рд╕реВрдЪреАрдмрджреНрдз рдХреЗрд▓реА рдЬрд╛рддреАрд▓.

3.4.3 Waf рд╕рд╣ рддрдпрд╛рд░ рдХрд░рд╛

рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рдкрд░реНрдпрдВрдд, ns-3 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдПрдХрддрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд░рд▓реА build.py, рдХрд┐рдВрд╡рд╛ рд╕рд╛рдзрди рдмреЗрдХ рдХрд░рд╛рд╡реЗ. рд╣реА рд╕рд╛рдзрдиреЗ ns-3 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реА рд░рд╛рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗрдд. рдЦрд░рдВ рддрд░, рдмрд┐рд▓реНрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреЗ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдЪрд╛рд▓рд╡рддрд╛рдд рд╡рд╛рдл рдбрд┐рд░реЗрдХреНрдЯрд░реА ns-3 рдордзреВрди. рд╡рд╛рдл ns-3 рд╕реНрддреНрд░реЛрдд рдХреЛрдбрд╕рд╣ рд╕реНрдерд╛рдкрд┐рдд. рдмрд╣реБрддреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдЖрдгрд┐ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдереЗрдЯ nsтАС3 рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрд╡рд░реАрдд рдкреБрдвреЗ рдЬрд╛рддрд╛рдд рд╡рд╛рдл. рддреНрдпрд╛рдореБрд│реЗ, рд╕реБрд░реВ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдХреГрдкрдпрд╛ рддреБрдореНрд╣реА рдореВрд│рддрдГ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ ns-3 рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╡рд░ рдЬрд╛.

рдпрд╛рд╡реЗрд│реА рд╣реЗ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдереЛрдбреЗ рдорд╛рдЧреЗ рдЬрд╛рдгреЗ рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдк рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдХрд╕реЗ рдмрджрд▓ рдХрд░рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣рдгреЗ рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓. рдХрджрд╛рдЪрд┐рдд рд╕рд░реНрд╡рд╛рдд рдЙрдкрдпреБрдХреНрдд рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдмрджрд▓ рдореНрд╣рдгрдЬреЗ рдХреЛрдбрдЪреА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА рддрдпрд╛рд░ рдХрд░рдгреЗ. рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рддреБрдореНрд╣реА рддреБрдордЪрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреАрдмрдЧ рдЖрд╡реГрддреНрддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдПрдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭреНрдб рдмрд┐рд▓реНрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдкреНрд░рдХрд▓реНрдк рдкрд╛рд╣реВ. Waf рд▓рд╛ рд╣реЗ рд╕рдордЬрд╛рд╡реВрди рд╕рд╛рдВрдЧрдгреНрдпрд╛рд╕рд╛рдареА рдХреА рддреНрдпрд╛рдиреЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд┐рд▓реНрдбреНрд╕ рдмрдирд╡рд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд рдЬреНрдпрд╛рдд рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреНрдпрд╛ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд, рддреБрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓:

$ ./waf clean 
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests

рд╣реЗ рд▓реЙрдиреНрдЪ рд╣реЛрдИрд▓ рд╡рд╛рдл рд╕реНрдерд╛рдирд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ (рддреБрдордЪреНрдпрд╛ рд╕реЛрдпреАрд╕рд╛рдареА). рдкрд╣рд┐рд▓реА рдХрдорд╛рдВрдб рдорд╛рдЧреАрд▓ рдмрд┐рд▓реНрдбрдордзреВрди рд╕рд╛рдл тАЛтАЛрдХрд░рддреЗ, рд╣реЗ рд╕рд╣рд╕рд╛ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╕рддреЗ, рдкрд░рдВрддреБ рд╣реЗ рдЪрд╛рдВрдЧрд▓реЗ рд╕рд░рд╛рд╡ рдЖрд╣реЗ (рдЦрд╛рд▓реАрд▓ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╛рдЗрд▓ рджреЗрдЦреАрд▓ рдкрд╣рд╛); рд╣реЗ рдкреВрд░реНрд╡реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реНрд╕ рд╣рдЯрд╡реЗрд▓ рдмрд╛рдВрдзрдгреЗ/. рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░рдХрд▓реНрдк рдкреБрдиреНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╡рд┐рдз рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рддрдкрд╛рд╕рддреЗ, рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ:

Setting top to      : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to      : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler)        : /usr/bin/gcc 
Checking for cc version                : 7.3.0 
Checking for 'g++' (C++ compiler)      : /usr/bin/g++ 
Checking for compilation flag -march=native support : ok 
Checking for compilation flag -Wl,--soname=foo support : ok 
Checking for compilation flag -std=c++11 support       : ok 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking for program 'python'            : /usr/bin/python 
Checking for python version >= 2.3       : 2.7.15 python-config                                                                     : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration                                      : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags   : yes
Testing pyext configuration                                        : yes

Checking for compilation flag -fvisibility=hidden support          : ok 
Checking for compilation flag -Wno-array-bounds support            : ok 
Checking for pybindgen location          : ../pybindgen ,!(guessed) 
Checking for python module 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
Checking for pybindgen version           : 0.19.0. ,!post4+g823d8b2 
Checking for code snippet                : yes 
Checking for types uint64_t and unsigned long equivalence : no 
Checking for code snippet                                 : no 
Checking for types uint64_t and unsigned long long equivalence     : yes 
Checking for the apidefs that can be used for Python bindings                       : gcc-LP64 
Checking for internal GCC cxxabi         : complete 
Checking for python module 'pygccxml'    : not found 
Checking for click location              : not found 
Checking for program 'pkg-config'        : /usr/bin/pkg- ,!config 
Checking for 'gtk+-3.0'                  : not found 
Checking for 'libxml-2.0'                : yes 
checking for uint128_t                   : not found 
checking for __uint128_t                 : yes 
Checking high precision implementation   : 128-bit integer ,!(default) 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found 
Checking for header sys/types.h          : yes 
Checking for header sys/stat.h           : yes 
Checking for header dirent.h             : yes 
Checking for header stdlib.h             : yes 
Checking for header signal.h             : yes 
Checking for header pthread.h            : yes 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found
Checking for library rt                  : yes 
Checking for header sys/ioctl.h          : yes 
Checking for header net/if.h             : yes 
Checking for header net/ethernet.h       : yes 
Checking for header linux/if_tun.h       : yes 
Checking for header netpacket/packet.h   : yes 
Checking for NSC location                : not found 
Checking for 'sqlite3'                   : not found 
Checking for header linux/if_tun.h       : yes 
Checking for python module 'gi'          : 3.26.1 
Checking for python module 'gi.repository.GObject'      : ok 
Checking for python module 'cairo'                      : ok 
Checking for python module 'pygraphviz'                 : 1.4rc1 
Checking for python module 'gi.repository.Gtk'          : ok 
Checking for python module 'gi.repository.Gdk'          : ok 
Checking for python module 'gi.repository.Pango'        : ok 
Checking for python module 'gi.repository.GooCanvas'    : ok 
Checking for program 'sudo'                             : /usr/bin/sudo 
Checking for program 'valgrind'                         : not found 
Checking for 'gsl' : not found python-config            : not found 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for program 'doxygen'                          : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory : 
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite)) 
DES Metrics event collection : not enabled (defaults to disabled) 
Emulation FdNetDevice        : enabled 
Examples                     : enabled 
File descriptor NetDevice    : enabled 
GNU Scientific Library (GSL) : not enabled (GSL not found) 
Gcrypt library               : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore               : not enabled (library 'gtk+-3.0 >= 3.0' not fou   nd)
MPI Support                  : not enabled (option --enable-mpi not selected)
ns-3 Click Integration       : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration   : not enabled (Required boost libraries not found) 
Network Simulation Cradle    : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled 
Python API Scanning Support   : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled 
Real Time Simulator           : enabled 
SQlite stats data output      : not enabled (library 'sqlite3' not found)
Tap Bridge                    : enabled 
Tap FdNetDevice               : enabled
Tests                         : enabled 
Threading Primitives          : enabled 
Use sudo to set suid bit   : not enabled (option --enable-sudo not selected)
XmlIo                         : enabled
'configure' finished successfully (6.387s)

рдХреГрдкрдпрд╛ рд╡рд░реАрд▓ рд╕реВрдЪреАрдЪрд╛ рд╢реЗрд╡рдЯрдЪрд╛ рднрд╛рдЧ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛. рдХрд╛рд╣реА ns-3 рдкрд░реНрдпрд╛рдп рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд рдХрд┐рдВрд╡рд╛ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд┐рд╕реНрдЯрдо рд╕рдорд░реНрдерди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, XmlTo рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд▓рд╛рдпрдмреНрд░рд░реА рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдЙрдкрд╕реНрдерд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ libxml-2.0. рд╣реА рд▓рд╛рдпрдмреНрд░рд░реА рд╕рд╛рдкрдбрд▓реА рдирд╛рд╣реА рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд ns-3 рдлрдВрдХреНрд╢рди рд╕рдХреНрд╖рдо рдХреЗрд▓реЗ рдирд╕рд▓реНрдпрд╛рд╕, рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рд╣реЗ рджреЗрдЦреАрд▓ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ рд╕реБрдбреЛ рдХрд╛рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рд╕рд╛рдареА suid рдмрд┐рдЯ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА тАЬрд░рдирдЯрд╛рдЗрдорд╡рд░ рдЧреНрд░реБрдк рдЖрдпрдбреА рд╕реЗрдЯ рдХрд░рд╛тАЭ. рд╣реЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА рдЖрдгрд┐ рдореНрд╣рдгреВрди рд╣реЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп "рд╕рдХреНрд╖рдо рдирд╛рд╣реА" рдореНрд╣рдгреВрди рджрд┐рд╕рддреЗ. рд╢реЗрд╡рдЯреА, рд╕рдХреНрд╖рдо рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рд╕реВрдЪреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд╛рдкрд░рд╛ рд╡рд╛рдл рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ --check-config.

рдЖрддрд╛ рдкрд░рдд рдЬрд╛рдК рдЖрдгрд┐ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреНрдпрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдбреАрдмрдЧ рдмрд┐рд▓реНрдбрд╡рд░ рдкрд░рдд рдЬрд╛рдК.

$ ./waf clean 
$ ./waf configure --build-profile=debug --enable-examples --enable-tests

рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯреАрдо рдЖрддрд╛ рд╕реЗрдЯ рдЭрд╛рд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рддреБрдореНрд╣реА рдлрдХреНрдд рдЯрд╛рдЗрдк рдХрд░реВрди ns-3 рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдЪреНрдпрд╛ рдбреАрдмрдЧ рдЖрд╡реГрддреНрддреНрдпрд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛:

$ ./waf

рд╡рд░реАрд▓ рдЪрд░рдгрд╛рдВрдореБрд│реЗ рддреБрдореНрд╣рд╛рд▓рд╛ ns-3 рдкреНрд░рдгрд╛рд▓реАрдЪрд╛ рднрд╛рдЧ рджреЛрдирджрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрд▓реЗ рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╕реЗ рдмрджрд▓рд╛рд╡реЗ рдЖрдгрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓рд╛ рдХреЛрдб рдХрд╕рд╛ рдмрдирд╡рд╛рдпрдЪрд╛ рд╣реЗ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ.

рджрд┐рд▓реЗрд▓реНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА рдХреЛрдгрддреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕рдХреНрд░рд┐рдп рдЖрд╣реЗ рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА, рдПрдХ рдХрдорд╛рдВрдб рдЖрд╣реЗ:

$ ./waf --check-profile 
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build' 
Build profile: debug

рд╡рд░реАрд▓ рдкрд░рд┐рд╕реНрдерд┐рддреА build.py рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рдВрдирд╛ рджреЗрдЦреАрд▓ рд╕рдорд░реНрдерди рджреЗрддреЗ --enable-examples ╨╕ --enable-tests, рдкрд░рдВрддреБ рдЗрддрд░ рдкрд░реНрдпрд╛рдп рд╡рд╛рдл рддреЗ рдереЗрдЯ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЗ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА:

$ ./build.py --disable-python

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрд╢реА рдЕрд╕реЗрд▓:

build.py: error: no such option: --disable-python

рддрдерд╛рдкрд┐, рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ - - рджреНрд╡рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ рд╡рд╛рдлрддреНрдпрд╛рдореБрд│реЗ рд╡рд░реАрд▓ рдРрд╡рдЬреА рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдХрд╛рд░реНрдп рдХрд░реЗрд▓:

$ ./build.py -- --disable-python

рдХрд╛рд░рдг рддреЗ рдореБрдЦреНрдп рдХрдорд╛рдВрдб рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рддреЗ ./waf рдХреЙрдиреНрдлрд┐рдЧрд░ --disable-python. рдпреЗрдереЗ рдХрд╛рд╣реА рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдЯрд┐рдкрд╛ рдЖрд╣реЗрдд рд╡рд╛рдл.

рдмрд┐рд▓реНрдб рддреНрд░реБрдЯреА рд╣рд╛рддрд╛рд│рдгреЗ

рд╕рд╛рдорд╛рдиреНрдп Linux рдЖрдгрд┐ MacOS рд╡рд┐рддрд░рдгрд╛рдВрд╡рд░ рдкреНрд░рдХрд╛рд╢рдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдирд╡реАрдирддрдо C++ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕рд╡рд░ ns-3 рдкреНрд░рдХрд╛рд╢рдирд╛рдВрдЪреА рдЪрд╛рдЪрдгреА рдХреЗрд▓реА рдЬрд╛рддреЗ. рддрдерд╛рдкрд┐, рдХрд╛рд▓рд╛рдВрддрд░рд╛рдиреЗ, рдирд╡реАрди рд╕рдВрдХрд▓рдХрд╛рдВрд╕рд╣ рдирд╡реАрди рд╡рд┐рддрд░рдгреЗ рдЬрд╛рд░реА рдХреЗрд▓реА рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рд╣реЗ рдирд╡реАрди рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдЪреЗрддрд╛рд╡рдгреАрдВрдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдкреЗрдбреЗрдВрдЯрд┐рдХ рдЕрд╕рддрд╛рдд. ns-3 рддреНрдпрд╛рдЪреНрдпрд╛ рдмрд┐рд▓реНрдбрд▓рд╛ рд╕рд░реНрд╡ рдЗрд╢рд╛рд▒реНрдпрд╛рдВрдирд╛ рддреНрд░реБрдЯреА рдорд╛рдирдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдЬрд░ рддреБрдореНрд╣реА рдирд╡реАрди рдкреНрд░рдгрд╛рд▓реАрд╡рд░ рдЬреБрдиреА рдЖрд╡реГрддреНрддреА рдЪрд╛рд▓рд╡рдд рдЕрд╕рд╛рд▓, рддрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдгреА рдмрд┐рд▓реНрдб рдерд╛рдВрдмрд╡реВ рд╢рдХрддреЗ.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреВрд░реНрд╡реА Fedora 3.28 рд╕рд╛рдареА nsтАС28 рдЪреЗ рдкреНрд░рдХрд╛рд╢рди рд╣реЛрддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдирд╡реАрди рдкреНрд░рдореБрдЦ рдЖрд╡реГрддреНрддреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рд╣реЛрддреА. рдЬреАрд╕реАрд╕реА (gcc-8). рд░рд┐рд▓реАрдЭ ns-3.28 рдХрд┐рдВрд╡рд╛ Fedora 28 рдЕрдВрддрд░реНрдЧрдд рдкреВрд░реНрд╡реАрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, Gtk2+ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рд╡рд░, рдЦрд╛рд▓реАрд▓ рддреНрд░реБрдЯреА рдЙрджреНрднрд╡реЗрд▓:

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of тАШ__gtk_reserved1тАЩ [-Werror=parentheses] void (*__gtk_reserved1);

nsтАС3.28.1 рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд▒реНрдпрд╛ рд░рд┐рд▓реАрдЭрдордзреНрдпреЗ, рдордзреНрдпреЗ рд╡рд╛рдл рдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдкрд░реНрдпрд╛рдп рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ. рд╣реЗ g++ рдЖрдгрд┐ clang++ рдордзреНрдпреЗ "-Werror" рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдгреЗ рдЕрдХреНрд╖рдо рдХрд░рддреЗ. рд╣рд╛ "--disable-werror" рдкрд░реНрдпрд╛рдп рдЖрд╣реЗ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рджрд░рдореНрдпрд╛рди рд▓рд╛рдЧреВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

$ ./waf configure --disable-werror --enable-examples --enable-tests

рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ рдПрдХрддреНрд░ рдХрд░рд╛

рдХрд╛рд╣реА рдЖрдЬреНрдЮрд╛ рд╡рд╛рдл рдлрдХреНрдд рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЯрдкреНрдкреНрдпрд╛рдд рдЕрд░реНрде рдЖрд╣реЗ, рдЖрдгрд┐ рдХрд╛рд╣реА рдлрдХреНрдд рдмрд┐рд▓реНрдб рдЯрдкреНрдкреНрдпрд╛рдд рд╡реИрдз рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣рд╛рд▓рд╛ ns-3 рдЗрдореНрдпреБрд▓реЗрд╢рди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд╛рдкрд░рд╛рдпрдЪреА рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдмрд┐рдЯ рд╕реЗрдЯрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реВ рд╢рдХрддрд╛ рджрдХреНрд╖рд┐рдг рд╡рд╛рдкрд░рдд рдЖрд╣реЗ рд╕реБрдбреЛ, рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ. рд╣реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реНрдЯреЗрдк рдХрдорд╛рдВрдбреНрд╕ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░реЗрд▓, рдЖрдгрд┐ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдмрджрд▓реВ рд╢рдХрддрд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреНрдпрд╛ рджреЗрдЦреАрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд.

$ ./waf configure --enable-sudo --enable-examples --enable-tests

рдЖрдкрдг рд╣реЗ рдХреЗрд▓реЗ рддрд░ рд╡рд╛рдл рд▓рд╛рдБрдЪ рдХрд░реЗрд▓ рд╕реБрдбреЛрдЗрдореНрдпреБрд▓реЗрд╢рди рдХреЛрдб рд╕реЙрдХреЗрдЯ рдХреНрд░рд┐рдПрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░рд╡рд╛рдирдЧреАрд╕рд╣ рдЪрд╛рд▓рд╡рд╛ рдореВрд│. рдж рд╡рд╛рдл рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрдгрд┐ рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдкреНрд╕рд╕рд╛рдареА рдЗрддрд░ рдЕрдиреЗрдХ рдкрд░реНрдпрд╛рдп рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд. рддреБрдордЪреЗ рдкрд░реНрдпрд╛рдп рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:

$ ./waf --help

рдкреБрдвреАрд▓ рднрд╛рдЧрд╛рдд рдЖрдореНрд╣реА рдХрд╛рд╣реА рдЪрд╛рдЪрдгреА рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реНрдпрд╛рдп рд╡рд╛рдкрд░реВ.

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓

рдЖрдкрдг рдХрд╕реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛ рддреЗ рдЖрдореНрд╣реА рдЖрдзреАрдЪ рдкрд╛рд╣рд┐рд▓реЗ рдЖрд╣реЗ рд╡рд╛рдл рд╕рдВрдореЗрд▓рдирд╛рдВрд╕рд╛рдареА рдбреАрдмрдЧ ╨╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реЗ:

$ ./waf --build-profile=debug

рдПрдХ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдЕрд╕реЗрдВрдмреНрд▓реА рдкреНрд░реЛрдлрд╛рдЗрд▓ рджреЗрдЦреАрд▓ рдЖрд╣реЗ, рдкреНрд░рдХрд╛рд╢рди. рдкрд░реНрдпрд╛рдп -d рдЪреНрдпрд╛ рд╕рдорд╛рдирд╛рд░реНрдереА рдЖрд╣реЗ --build-profile. рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╛рдЗрд▓ рд▓реЙрдЧрд┐рдВрдЧ, рдкреНрд░рддрд┐рдкрд╛рджрди рдЖрдгрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рд╕реНрд╡рд┐рдЪрдЪрд╛ рд╡рд╛рдкрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ:

ns-3 рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓. рдкреНрд░рдХрд░рдг 3

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рд▓реЙрдЧрд┐рдВрдЧ рдЖрдгрд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдлрдХреНрдд рдбреАрдмрдЧ рдмрд┐рд▓реНрдбрдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд. рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓рд╛ рд╕рд░рд╛рд╡ рдореНрд╣рдгрдЬреЗ рддреБрдордЪреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреАрдмрдЧ рдореЛрдбрдордзреНрдпреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рд╛, рддреНрдпрд╛рдирдВрддрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ (рдЖрдХрдбреЗрд╡рд╛рд░реА рдХрд┐рдВрд╡рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдмрджрд▓рд╛рдВрд╕рд╛рдареА) рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рд╛.

рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдХреЛрдб рдЕрд╕реЗрд▓ рдЬреЛ рдлрдХреНрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ рдЪрд╛рд▓рд▓рд╛ рдЕрд╕реЗрд▓, рддрд░ рдХреЛрдб рд░реЕрдкрд░ рдореЕрдХреНрд░реЛ рд╡рд╛рдкрд░рд╛:

NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)

рдбреАрдлреЙрд▓реНрдЯ, рд╡рд╛рдл рдмрд┐рд▓реНрдб рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдмрд┐рд▓реНрдб рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯреНрд╕ рдареЗрд╡рддрд╛рдд. рддреБрдореНрд╣реА рдкрд░реНрдпрд╛рдп рд╡рд╛рдкрд░реВрди рднрд┐рдиреНрди рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛ -тАп-out, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

$ ./waf configure --out=my-build-dir

рд╣реЗ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рд╕рд╣ рдПрдХрддреНрд░ рдХрд░реВрди, рддреБрдореНрд╣реА рд╡рд┐рд╡рд┐рдз рд╕рдВрдХрд▓рди рдкрд░реНрдпрд╛рдпрд╛рдВрдордзреНрдпреЗ рд╕рд╣рдЬрдкрдгреЗ рд╕реНрд╡рд┐рдЪ рдХрд░реВ рд╢рдХрддрд╛:

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

рдЬреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдирд╡реАрдирддрдо рдЕрд╕реЗрдВрдмреНрд▓реА рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рдПрдХрд╛рдзрд┐рдХ рдЕрд╕реЗрдВрдмреНрд▓реАрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рддреБрдореНрд╣реА рджреБрд╕рд▒реНрдпрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛, рд╡рд╛рдл рд╕рд░реНрд╡рдХрд╛рд╣реА рдкреВрд░реНрдгрдкрдгреЗ рд╕рдВрдХрд▓рд┐рдд рди рдХрд░рддрд╛ рдлрдХреНрдд рддреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрд▓.

рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рд╕рдорд╛рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкрд░реНрдпрд╛рдп рджреЗрдгреНрдпрд╛рдЪреА рдХрд╛рд│рдЬреА рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЕрдиреЗрдХ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реНрдпрд╛рдиреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЪреБрдХрд╛ рдЯрд╛рд│рдгреНрдпрд╛рд╕ рдорджрдд рд╣реЛрдИрд▓:

$ export NS3CONFIG="--enable-examples --enable-tests" 
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized" 

$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build 
... 
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build

рд╕рдВрдХрд▓рдХ рдЖрдгрд┐ рдзреНрд╡рдЬ

рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдордзреНрдпреЗ рд╡рд╛рдл ns-3 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА GCC рдЪреЗ C++ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд╛рдкрд░рддреЗ ( g ++). рддрдерд╛рдкрд┐, рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реЗ рдмрджрд▓реВ рд╢рдХрддрд╛ рд╡рд╛рдл C++ рдХрдВрдкрд╛рдЗрд▓рд░, CXX рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрди. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, C++ рдХрдВрдкрд╛рдЗрд▓рд░ Clang, clang++ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА,

$ CXX="clang++" ./waf configure 
$ ./waf build 

рддреНрдпрд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ рдЖрдкрдг рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛ рд╡рд╛рдл рд╡рд╛рдкрд░реВрди рд╡рд┐рддрд░рд┐рдд рд╕рдВрдХрд▓рди рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА distcc:

$ CXX="distcc g++" ./waf configure 
$ ./waf build

distcc рдЖрдгрд┐ рд╡рд┐рддрд░рд┐рдд рд╕рдВрдХрд▓рдирд╛рд╡рд┐рд╖рдпреА рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рдкреНрд░рдХрд▓реНрдк рдкреГрд╖реНрдард╛рд╡рд░ рдЖрдврд│реВ рд╢рдХрддреЗ. ns-3 рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддрд╛рдирд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реЕрдЧ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА, CXXFLAGS_EXTRA рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡рд╛рдкрд░рд╛.

рд╕реЗрдЯрд┐рдВрдЧ

рд╡рд╛рдл рдкреНрд░рдгрд╛рд▓реАрд╡рд░ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдард┐рдХрд╛рдгреА рд▓рд╛рдпрдмреНрд░рд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рд╕рдВрдХрд▓рд┐рдд рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдгрд┐ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓реНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЕрд╕рддрд╛рдд рддрдпрд╛рд░, рдЖрдгрд┐ Waf рд▓рд╛ рдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдгрд┐ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓рдЪреЗ рд╕реНрдерд╛рди рдорд╛рд╣рд┐рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЗрддрд░ рдХреЛрдареЗрд╣реА рд▓рд╛рдпрдмреНрд░рд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА.

рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдмрд┐рд▓реНрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреЗрдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛рдд ./waf рдЗрдВрд╕реНрдЯреЙрд▓. рд╕реНрдерд╛рдкрдиреЗрд╕рд╛рдареА рдбреАрдлреЙрд▓реНрдЯ рдЙрдкрд╕рд░реНрдЧ рдЖрд╣реЗ / usr / рд╕реНрдерд╛рдирд┐рдХ, рдореНрд╣рдгреВрди ./waf рдЗрдВрд╕реНрдЯреЙрд▓ рдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрд▓ / usr / рд╕реНрдерд╛рдирд┐рдХ / рдмрд┐рди, рдордзреНрдпреЗ рд▓рд╛рдпрдмреНрд░рд░реА / usr / рд╕реНрдерд╛рдирд┐рдХ / lib рдЖрдгрд┐ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реНрд╕ рдордзреНрдпреЗ /usr/local/include. рд╕реБрдкрд░рдпреБрдЬрд░ рдЕрдзрд┐рдХрд╛рд░ рд╕рд╛рдорд╛рдиреНрдпрдд: рдбреАрдлреЙрд▓реНрдЯ рдЙрдкрд╕рд░реНрдЧрд╛рд╕рд╣ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрдорд╛рдВрдб рдЕрд╕реЗрд▓ sudo ./waf рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛. рд▓реЙрдиреНрдЪ рдХреЗрд▓реНрдпрд╛рд╡рд░, Waf рдкреНрд░рдердо рдмрд┐рд▓реНрдб рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рдгреЗ рдирд┐рд╡рдбреЗрд▓, рдирдВрддрд░ рд╕реНрдерд╛рдирд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрдВрдЪреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рд╡рд░ рд▓рд╛рдпрдмреНрд░рд░реА рд╢реЛрдзрд╛. рддреНрдпрд╛рдореБрд│реЗ рд╕рд┐рд╕реНрдЯреАрдорд╡рд░ рд▓рд╛рдпрдмреНрд░рд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдирд╛, рдпреЛрдЧреНрдп рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдд рдЖрд╣реЗрдд рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ. рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рджрд░рдореНрдпрд╛рди рдкрд░реНрдпрд╛рдп рдкрд╛рд╕ рдХрд░реВрди рд╡рд╛рдкрд░рдХрд░реНрддреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдЙрдкрд╕рд░реНрдЧрд╛рд╕рд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдирд┐рд╡рдбреВ рд╢рдХрддрд╛рдд --prefix, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

./waf configure --prefix=/opt/local

рдирдВрддрд░, рдмрд┐рд▓реНрдб рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рддрд┐рд╖реНрдард╛рдкрди рдЖрджреЗрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ ./waf, рдЙрдкрд╕рд░реНрдЧ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓ /opt/рд╕реНрдерд╛рдирд┐рдХ.

рд╕рдВрдШ ./waf clean рдЬрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╡рд╛рдкрд░рдд рдЕрд╕реЗрд▓ рддрд░ рдкреНрд░рдХрд▓реНрдк рдкреБрдиреНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╡рд╛рдкрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╡рд╛рдл рд╡реЗрдЧрд│реНрдпрд╛ рдЙрдкрд╕рд░реНрдЧ рдЕрдВрддрд░реНрдЧрдд.

рддреНрдпрд╛рдореБрд│реЗ ns-3 рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА ./waf install. рдмрд╣реБрддреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдпрд╛ рдЖрджреЗрд╢рд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА рдХрд╛рд░рдг рд╡рд╛рдл рдмрд┐рд▓реНрдб рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрдордзреВрди рд╡рд░реНрддрдорд╛рди рд▓рд╛рдпрдмреНрд░рд░реА рдЙрдЪрд▓рддреАрд▓, рдкрд░рдВрддреБ рдХрд╛рд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдкрд╛рдВрдордзреНрдпреЗ ns-3 рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рд▓реНрдпрд╛рд╕ рд╣реЗ рдЙрдкрдпреБрдХреНрдд рд╡рд╛рдЯреВ рд╢рдХрддреЗ.

рд╡рд╛рдл рд╕рд┐рдВрдЧрд▓

ns-3 рд╕реНрддреНрд░реЛрдд рд╡реГрдХреНрд╖рд╛рдЪреНрдпрд╛ рд╡рд░рдЪреНрдпрд╛ рд╕реНрддрд░рд╛рд╡рд░, рдлрдХреНрдд рдПрдХ Waf рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд╣реЗ. рдПрдХрджрд╛ рддреБрдореНрд╣реА рдХрд╛рдо рд╕реБрд░реВ рдХреЗрд▓реЗ рдХреА, рддреБрдордЪрд╛ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдмрд░рд╛рдЪ рд╡реЗрд│ рдЬрд╛рдИрд▓ scratch/ рдХрд┐рдВрд╡рд╛ рдЦреЛрд▓рд╡рд░src/... рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдзрд╛рд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╡рд╛рдл. рддреБрдореНрд╣реА рдХреБрдареЗ рдЖрд╣рд╛рдд рддреЗ рддреБрдореНрд╣реА рдлрдХреНрдд рд▓рдХреНрд╖рд╛рдд рдареЗрд╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдзрд╛рд╡реВ рд╢рдХрддрд╛ рд╡рд╛рдл рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ:

$ ../../../waf ...

рдкрд░рдВрддреБ рд╣реЗ рдХрдВрдЯрд╛рд│рд╡рд╛рдгреЗ рдЖрдгрд┐ рддреНрд░реБрдЯреА рдкреНрд░рд╡рдг рдЕрд╕реЗрд▓, рдореНрд╣рдгреВрди рдЪрд╛рдВрдЧрд▓реЗ рдЙрдкрд╛рдп рдЖрд╣реЗрдд. рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдордЬрдХреВрд░ рд╕рдВрдкрд╛рджрдХ рд╡рд╛рдкрд░рдгреЗ рдЬрд╕реЗ рдХреА emacs рдХрд┐рдВрд╡рд╛ рд╢рдХреНрддреА, рдЬреНрдпрд╛рдордзреНрдпреЗ рджреЛрди рдЯрд░реНрдорд┐рдирд▓ рд╕рддреНрд░ рдЙрдШрдбрд▓реЗ рдЬрд╛рддрд╛рдд, рдПрдХ ns-3 рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рджреБрд╕рд░реЗ рд╕реНрддреНрд░реЛрдд рдХреЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЕрд╕реЗрд▓ рддрд░рдЪ рдЯрд╛рд░рдмреЙрд▓, рддрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдорджрдд рдХрд░реВ рд╢рдХрддреЗ:

$ export NS3DIR="$PWD" 
$ function waff { cd $NS3DIR && ./waf $* ; } 

$ cd scratch 
$ waff build

рдореЙрдбреНрдпреБрд▓ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдХреНрд╖реБрд▓реНрд▓рдХ waf рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рд░рдЦреА рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рдореЛрд╣ рд╣реЛрдК рд╢рдХрддреЛ exec ../../waf. рдХреГрдкрдпрд╛, рдЕрд╕реЗ рдХрд░реВ рдирдХрд╛. рд╣реЗ рдирд╡рд╢рд┐рдХреНрдпрд╛рдВрд╕рд╛рдареА рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрдгрд╛рд░реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рддреЗ рдЦрд░рд╛рдм рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рддреЗ рд╢реЛрдзрдгреНрдпрд╛рд╕ рдХрдареАрдг рдмрд┐рд▓реНрдб рддреНрд░реБрдЯреА рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛рдд. рд╡рд░ рджрд░реНрд╢рд╡рд┐рд▓реЗрд▓реЗ рдЙрдкрд╛рдп рд╣реЗ рд╡рд╛рдкрд░рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд.

3.5 рдЪрд╛рдЪрдгреА рдПрдирдПрд╕-3

рддреБрдореНрд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡реВрди ns-3 рд╡рд┐рддрд░рдгрд╛рдЪреНрдпрд╛ рдпреБрдирд┐рдЯ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛ ./test.py:

$ ./test.py

рдпрд╛ рдЪрд╛рдЪрдгреНрдпрд╛ рд╕рдорд╛рдВрддрд░ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рд╡рд╛рдл. рд╢реЗрд╡рдЯреА рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рд╕рдВрджреЗрд╢ рджрд┐рд╕рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ:

92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

рд╡реНрд╣реЕрд▓рдЧреНрд░рд┐рдВрдб рдХреНрд░реЕрд╢, рдХреНрд░реЕрд╢ рдХрд┐рдВрд╡рд╛ рддреНрд░реБрдЯреА рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рд╣рд╛ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рд╕рдВрджреЗрд╢ рдЖрд╣реЗ, рдЬреЛ рдХреЛрдбрдордзреАрд▓ рд╕рдорд╕реНрдпрд╛ рдХрд┐рдВрд╡рд╛ рдЯреВрд▓реНрд╕ рдЖрдгрд┐ рдХреЛрдбрдордзреАрд▓ рд╡рд┐рд╕рдВрдЧрддрддрд╛ рджрд░реНрд╢рд╡рддреЛ.

рдкрд╛рд╕реВрди рдЕрдВрддрд┐рдо рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреАрд▓ рджрд┐рд╕реЗрд▓ рд╡рд╛рдл рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рдЪрдгреА рдЪрд╛рд▓рд╡рдгрд╛рд░рд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдХ, рдЬреЛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕реЗрд▓:

Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
'build' finished successfully (1.799s) 

Modules built:
aodv           applications          bridge
click          config-store          core
csma           csma-layout           dsdv
emu            energy                flow-monitor
internet       lte                   mesh
mobility       mpi                   netanim
network        nix-vector-routing    ns3tcp
ns3wifi        olsr                  openflow
point-to-point point-to-point-layout propagation
spectrum       stats                 tap-bridge
template       test                  tools
topology-read  uan                   virtual-net-device
visualizer     wifi                  wimax

PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram 

...

PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

рд╣реА рдХрдорд╛рдВрдб рд╕рд╣рд╕рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ ns-3 рд╡рд┐рддрд░рдг рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ рдпрд╛рдЪреА рддреНрд╡рд░рд┐рдд рдкрдбрддрд╛рд│рдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЪрд╛рд▓рд╡рд▓реА рдЬрд╛рддреЗ. (рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА "PASS: ..." рдУрд│реАрдВрдЪрд╛ рдХреНрд░рдо рднрд┐рдиреНрди рдЕрд╕реВ рд╢рдХрддреЛ, рд╣реЗ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ. рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореНрд╣рдгрдЬреЗ рдЕрд╣рд╡рд╛рд▓рд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рд╕рд╛рд░рд╛рдВрд╢ рдУрд│ рджрд░реНрд╢рд╡рддреЗ рдХреА рд╕рд░реНрд╡ рдЪрд╛рдЪрдгреНрдпрд╛ рдЙрддреНрддреАрд░реНрдг рдЭрд╛рд▓реНрдпрд╛ рдЖрд╣реЗрдд; рдХреЛрдгрддреНрдпрд╛рд╣реА рдЪрд╛рдЪрдгреНрдпрд╛ рдЕрдпрд╢рд╕реНрд╡реА рдХрд┐рдВрд╡рд╛ рдХреНрд░реЕрд╢ рдЭрд╛рд▓реНрдпрд╛ рдирд╛рд╣реАрдд.) рдЖрдгрд┐ рд╡рд╛рдлрдЖрдгрд┐ test.py рдорд╢реАрдирдЪреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░рд╡рд░ рдХрд╛рдо рд╕рдорд╛рдВрддрд░ рдХрд░реЗрд▓.

3.6 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рдгреЗ

рдЖрдореНрд╣реА рд╕рд╣рд╕рд╛ рдирд┐рдпрдВрддреНрд░рдгрд╛рдЦрд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рддреЛ рд╡рд╛рдл. рд╣реЗ рд╕рд╛рдорд╛рдпрд┐рдХ рд▓рд╛рдпрдмреНрд░рд░реА рдкрде рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реА рд░рдирдЯрд╛рдЗрдорд╡рд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдлрдХреНрдд рд╡рд╛рдкрд░рд╛ рд╡рд╛рдл рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ -тАп-run. рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреЗ ns-3 рд╕рдорддреБрд▓реНрдп рдЪрд╛рд▓рд╡реВ рд╣реЕрд▓реЛ рдЬрдЧрд╛рддреАрд▓рдЦрд╛рд▓реАрд▓ рдЯрд╛рдЗрдк рдХрд░реВрди:

$ ./waf --run hello-simulator

Waf рдкреНрд░рдердо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕реЗрд▓ рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕ рддрдпрд╛рд░ рдХрд░реЗрд▓. рдордЧ рд╡рд╛рдл рдЦрд╛рд▓реАрд▓ рдЖрдЙрдЯрдкреБрдЯ рддрдпрд╛рд░ рдХрд░рдгрд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрд▓.

Hello Simulator

рдЕрднрд┐рдирдВрджрди! рддреБрдореНрд╣реА рдЖрддрд╛ ns-3 рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрд╣рд╛рдд!

рдорд▓рд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рд╕рдд рдирд╕рд▓реНрдпрд╛рд╕ рдореА рдХрд╛рдп рдХрд░рд╛рд╡реЗ?

рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдореЗрд╕реЗрдЬ рджрд┐рд╕рдд рдЕрд╕рддреАрд▓ рд╡рд╛рдлрдмрд┐рд▓реНрдб рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдЪреЗ рджрд░реНрд╢рд╡рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рд╕рдд рдирд╛рд╣реА "рд╣реЕрд▓реЛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░", рддрд░ рдЕрд╢реА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ рдХреА [Bild-with-Waf] рд╡рд┐рднрд╛рдЧрд╛рдд рддреБрдореНрд╣реА рддреБрдордЪрд╛ рдмрд┐рд▓реНрдб рдореЛрдб рд╕реНрд╡рд┐рдЪ рдХреЗрд▓рд╛ рдЖрд╣реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реЗ, рдкрд░рдВрддреБ рдореЛрдбрд╡рд░ рдкрд░рдд рдЬрд╛рдгреЗ рдЪреБрдХрд▓реЗ рдбреАрдмрдЧ. рдпрд╛ рдЯреНрдпреБрдЯреЛрд░рд┐рдпрд▓рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рд╕рд░реНрд╡ рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рд╡рд┐рд╢реЗрд╖ ns-3 рдШрдЯрдХ рд╡рд╛рдкрд░рддреЗ рдЬреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рддреЗ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓рд╡рд░ рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдореБрджреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдЬреЗрд╡реНрд╣рд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓рд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рдпрд╛ рдШрдЯрдХрд╛рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдЕрдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рддреЗ - рддреЗ "рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реЗ" рдЕрд╕рддреЗ. рддреБрдореНрд╣рд╛рд▓рд╛ "рд╣реЕрд▓реЛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░" рдЖрдЙрдЯрдкреБрдЯ рджрд┐рд╕рдд рдирд╕рд▓реНрдпрд╛рд╕, рдЦрд╛рд▓реАрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:

$ ./waf configure --build-profile=debug --enable-examples --enable-tests

рд╕рд╛рдиреБрдХреВрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдл ns-3 рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдЪреНрдпрд╛ рдбреАрдмрдЧ рдЖрд╡реГрддреНрддреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреНрдпрд╛ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд. рддреНрдпрд╛рдирдВрддрд░ рддреБрдореНрд╣реА рдЯрд╛рдЗрдк рдХрд░реВрди рдХреЛрдбрдЪреА рд╡рд░реНрддрдорд╛рди рдбреАрдмрдЧ рдЖрд╡реГрддреНрддреА рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рд╛рд╡реА

$ ./waf

рдЖрддрд╛ рдЬрд░ рддреБрдореНрд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд╛рд▓рд╡рд▓рд╛рдд рд╣реЕрд▓реЛ-рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рд╕рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ.

3.6.1 рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рддрд░реНрдХ

ns-3 рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЦрд╛рд▓реАрд▓ рдкреЕрдЯрд░реНрди рд╡рд╛рдкрд░рд╛:

$ ./waf --run <ns3-program> --command-template="%s <args>"

рдмрджрд▓рд╛ рддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░ рдЖрдгрд┐ рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рдВрдирд╛. рдпреБрдХреНрддрд┐рд╡рд╛рдж -тАп-command-template рддреЗ рд╡рд╛рдл рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореВрд▓рдд: рдПрдХ рдХреГрддреА рдЖрд╣реЗ рд╡рд╛рдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. Waf рдмрд┐рд▓реНрдб рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдЪреЗ рддрдкрд╛рд╕рддреЗ, рд╕рд╛рдорд╛рдпрд┐рдХ рд▓рд╛рдпрдмреНрд░рд░реА рдкрде рд╕реЗрдЯ рдХрд░рддреЗ, рдирдВрддрд░ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд╛рдкрд░рддреЗ рдЖрдгрд┐ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА %s рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░рд╕рд╛рдареА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╛рд╡ рдмрджрд▓рддреЗ. рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╛ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдХреНрд▓рд┐рд╖реНрдЯ рд╡рд╛рдЯрдд рдЕрд╕реЗрд▓, рддрд░ рдПрдХ рд╕реЛрдкреА рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ ns-3 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕рдордзреНрдпреЗ рдмрдВрдж рдЖрд╣реЗрдд:

$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'

рджреБрд╕рд░реЗ рд╡рд┐рд╢реЗрд╖рддрдГ рдЙрдкрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгрдЬреЗ рдЪрд╛рдЪрдгреА рд╕реВрдЯ рдирд┐рд╡рдбрдХрдкрдгреЗ рдЪрд╛рд▓рд╡рдгреЗ. рдорд╛рдпрдЯреЗрд╕реНрдЯ рдирд╛рд╡рд╛рдЪрд╛ рдПрдХ рдЪрд╛рдЪрдгреА рд╕рдВрдЪ рдЖрд╣реЗ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ (рдЦрд░реЗрддрд░ рддреЗрдереЗ рдирд╛рд╣реА). рд╡рд░ рдЖрдореНрд╣реА ./test.py рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рд╡рд╛рдкрд░ рд╕рдорд╛рдВрддрд░рдкрдгреЗ рдЕрдиреЗрдХ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреА рд╡рд╛рд░рдВрд╡рд╛рд░ рдЪрд╛рдЪрдгреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдХреЙрд▓ рдХрд░рддреЗ рдЪрд╛рдЪрдгреА рдзрд╛рд╡рдгрд╛рд░рд╛. рдХреЙрд▓ рдХрд░рд╛ рдЪрд╛рдЪрдгреА рдзрд╛рд╡рдгрд╛рд░рд╛ рдереЗрдЯ рдПрдХ рдЪрд╛рдЪрдгреА рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА:

$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"

рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рдд рдпреБрдХреНрддрд┐рд╡рд╛рдж рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ рдЪрд╛рдЪрдгреА рдзрд╛рд╡рдгрд╛рд░рд╛. mytest рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдПрдХ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЙрдкрд▓рдмреНрдз рдЪрд╛рдЪрдгреА-рд░рдирд░ рдкрд░реНрдпрд╛рдп рдореБрджреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 рдбреАрдмрдЧрд┐рдВрдЧ

ns-3 рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рджреБрд╕рд▒реНрдпрд╛ рдпреБрдЯрд┐рд▓рд┐рдЯреА рдЕрдВрддрд░реНрдЧрдд рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЬрд╕реЗ рдХреА рдбреАрдмрдЧрд░ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреАрдбреАрдмреА) рдХрд┐рдВрд╡рд╛ рдореЗрдорд░реА рдЪрд╛рдЪрдгреА рд╕рд╛рдзрди (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, valgrind), рдПрдХ рд╕рдорд╛рди рдлреЙрд░реНрдо рд╡рд╛рдкрд░рд╛ -тАп-command-template = "тАж". рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдбреАрдмрдЧрд░рдордзреНрдпреЗ рдЪрд╛рд▓рдгреНрдпрд╛рд╕рд╛рдареА рдЬреАрдбреАрдмреА рддреБрдордЪрд╛ рд╣реЕрд▓реЛ-рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдПрдирдПрд╕-рей рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рддрд░реНрдХрд╛рдВрд╕рд╣:

$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"

рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА ns-3 рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреЗ рдирд╛рд╡ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯрд╕рд╣ рдпреЗрддреЗ -тАп-run, рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЙрдкрдпреБрдХреНрддрддрд╛ (рдпреЗрдереЗ рдЬреАрдбреАрдмреА) рд╣реЗ рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рддреАрд▓ рдкрд╣рд┐рд▓реЗ рдЯреЛрдХрди рдЖрд╣реЗ -тАп-command-template. рдкрд░реНрдпрд╛рдп -тАп-args рдорд╛рд╣рд┐рддреА рджреЗрддреЛ рдЬреАрдбреАрдмреАрдЙрд░реНрд╡рд░рд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди "рд▓реЛрдЕрд░" рдкреНрд░реЛрдЧреНрд░рд╛рдорд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. (рдХрд╛рд╣реА рдЖрд╡реГрддреНрддреНрдпрд╛ рдЬреАрдбреАрдмреА рдкрд░реНрдпрд╛рдп рд╕рдордЬрдд рдирд╛рд╣реА -тАп-args. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдкрд╛рд╕реВрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рддрд░реНрдХ рдХрд╛рдврд╛ -тАп-command-template рдЖрдгрд┐ рдХрдорд╛рдВрдб рд╕реЗрдЯ рд╡рд╛рдкрд░рд╛ рдЬреАрдбреАрдмреА args.) рдбреАрдмрдЧрд░ рдЕрдВрддрд░реНрдЧрдд рдЪрд╛рдЪрдгреА рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╣реА рд░реЗрд╕рд┐рдкреА рдЖрдгрд┐ рдорд╛рдЧреАрд▓ рдПрдХ рдПрдХрддреНрд░ рдХрд░реВ рд╢рдХрддреЛ:

$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

3.6.3 рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛

рд╡рд╛рдл ns-3 рдЭрд╛рдбрд╛рдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд╛рдирд╛рд╡рд░реВрди рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рд╣реЗ рдлреЛрд▓реНрдбрд░ рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирддреЗ рдЬрд┐рдереЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реНрд╕ рд▓рд┐рд╣рд┐рд▓реНрдпрд╛ рдЬрд╛рддреАрд▓. рдкрдг рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдлрд╛рдЗрд▓реНрд╕ ns-3 рд╕реЛрд░реНрд╕ рдЯреНрд░реАрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдареЗрд╡рд╛рдпрдЪреНрдпрд╛ рдЕрд╕рддреАрд▓ рддрд░? рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╡рд╛рдкрд░рд╛ -тАп-cwd:

$ ./waf --cwd=...

рддреБрдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реНрд╕ рдорд┐рд│рд╡рдгреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдзрд┐рдХ рд╕реЛрдпреАрдЪреЗ рд╡рд╛рдЯреВ рд╢рдХрддреЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЦрд╛рд▓реАрд▓ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреГрддреА рдорджрдд рдХрд░реВ рд╢рдХрддрд╛рдд:

$ function waff {
CWD="$PWD" 
cd $NS3DIR >/dev/null 
./waf --cwd="$CWD" $*
cd - >/dev/null 
}

рдХрдорд╛рдВрдбрдЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рдЖрд╡реГрддреНрддреАрдЪреА рд╣реА рд╕рдЬрд╛рд╡рдЯ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрддрди рдХрд░рддреЗ, рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЬрд╛рддреЗ рд╡рд╛рдлрдЖрдгрд┐ рдирдВрддрд░ рд╕реВрдЪрдирд╛ рджреЗрддреЗ рд╡рд╛рдл рдкреНрд░реЛрдЧреНрд░реЕрдо рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЬрддрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА. рдЖрдореНрд╣реА рд╕рдВрдШрд╛рдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЛ -тАп-cwd рдкреВрд░реНрдгрддреЗрд╕рд╛рдареА, рдмрд╣реБрддреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдлрдХреНрдд рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреВрди Waf рдЪрд╛рд▓рд╡рддрд╛рдд рдЖрдгрд┐ рддреЗрдереЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░рддрд╛рдд.

рдЪрд╛рд▓реВ: рдЕрдзреНрдпрд╛рдп 4

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛