ns-3 เบเบฒเบ™เบชเบญเบ™ simulator เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบšเบปเบ”เบ—เบต 3

ns-3 เบเบฒเบ™เบชเบญเบ™ simulator เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบšเบปเบ”เบ—เบต 3
เบšเบปเบ”เบ—เบต 1,2

3 เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™
3.1 เบžเบฒเบšเบฅเบงเบก
3.2 เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™
3.2.1 เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เบเบฒเบ™เบ›เปˆเบญเบ ns-3 เป€เบ›เบฑเบ™เบเบฒเบ™เบฎเบงเบšเบฎเบงเบกเปเบซเบผเปˆเบ‡
3.3 เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ” ns-3 เป‚เบ”เบเปƒเบŠเป‰ Git
3.3.1 เบเบฒเบ™เป‚เบซเบผเบ” ns-3 เป‚เบ”เบเปƒเบŠเป‰ Bake
3.4 เบชเบฐเบžเบฒเบ™ ns-3
3.4.1 เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เป‰เบงเบ build.py
3.4.2 เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เป‰เบงเบ Bake
3.4.3 เบชเป‰เบฒเบ‡เบ”เป‰เบงเบ Waf
3.5 เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš ns-3
3.6 เปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบš
3.6.1 เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡
3.6.2 เบเบฒเบ™เบ”เบตเบšเบฑเบ
3.6.3 เป€เบญเบเบฐเบชเบฒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ

เบšเบปเบ”เบ—เบต 3

เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เบšเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเบเบฐเบเบฝเบกเบœเบนเป‰เบญเปˆเบฒเบ™เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ„เบตเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡ ns-3. เบกเบฑเบ™เบเบงเบกเป€เบญเบปเบฒเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบกเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™, เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบงเบดเบ—เบตเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš ns-3, เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡ ns-3, เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‡เปˆเบฒเบเป†เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

3.1 เบžเบฒเบšเบฅเบงเบก

ns-3 simulator เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป€เบ›เบฑเบ™เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบŠเบญเบšเปเบงเบฎเปˆเบงเบกเบกเบท. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบš, เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบกเบœเบนเป‰เปƒเบŠเป‰เป„เบ”เป‰เบ–เบทเบเป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก C++ เบซเบผเบท Python เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡.

Ns-3 เบ–เบทเบเปเบˆเบเบขเบฒเบเป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบฅเบฐเบšเบปเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ•เป‰เบญเบ‡เบกเบตเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบŠเบญเบšเปเบงเป€เบžเบทเปˆเบญเบ—เปเบฒเบญเบดเบ”เบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบœเบนเป‰เปƒเบŠเป‰. เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, ns-3 เบชเบฒเบกเบฒเบ”เบ–เบทเบเปเบˆเบเบขเบฒเบเป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบชเบฐเป€เบžเบฒเบฐ, เปเบฅเบฐเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบžเบงเบเป€เบ‚เบปเบฒเบญเบฒเบ”เบˆเบฐเบ–เบทเบเปเบˆเบเบขเบฒเบเบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰. เปเบ•เปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เบซเบผเบฒเบเบ„เบปเบ™เบเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป‚เบ”เบเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰ ns-3 เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบกเบตเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบœเบนเป‰โ€‹เปƒเบ”โ€‹เบ—เบตเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ”โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบซเบธเป‰เบกโ€‹เบซเปเปˆโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹, เบเบฐโ€‹เบฅเบธโ€‹เบ™เบฒโ€‹เบ•เบดเบ”โ€‹เบ•เปเปˆโ€‹เบซเบฒโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบ—เบฒเบ‡โ€‹เป„เบ›เบชเบฐเบ™เบต ns-เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ.

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบชเบฒเบกเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเบชเป‰เบฒเบ‡ ns-3. เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เบ›เปˆเบญเบเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ•เบปเป‰เบ™เบ•เป. เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเปเบฅเบฐเบเบฒเบ™เบ›เบฐเบเบญเบšเบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™ ns-3. เบ—เบตเบชเบฒเบกเปเบกเปˆเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเป‚เบซเบฅเบ”เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบš ns-3. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบœเปˆเบฒเบ™เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ.

เบœเบนเป‰เปƒเบŠเป‰ Linux เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™เบญเบฒเบ”เบˆเบฐเบชเบปเบ‡เป„เบชเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡ ns-3 เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป€เบ›เบฑเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ„เบทเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบญเบทเปˆเบ™เป†เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ—เบตเปˆเปƒเบŠเป‰เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”? เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเปเบžเบฑเบเป€เบเบฑเบ”เบ„เบนเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบ Linux เบ•เปˆเบฒเบ‡เป† (เป€เบŠเบฑเปˆเบ™: Debian), เบœเบนเป‰เปƒเบŠเป‰เบชเปˆเบงเบ™เปƒเบซเบเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบฅเบฐเบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡ ns-3 เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบกเบตเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบกเปˆเบ™เบกเบตเบ›เบฐเป‚เบซเบเบ”. เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบˆเบฒเบเปเบซเบผเปˆเบ‡.

เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเบดเบ”เบ—เบด ns-3 เบฎเบฒเบ เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เปƒเบŠเป‰เบšเบฑเบ™เบŠเบตเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบšเปเปˆเบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”.

3.2 เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™

เบŠเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” ns-3 เบ—เบตเปˆเบกเบตเบขเบนเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบชเปˆเบงเบ™เปƒเบซเบเปˆ ns-3 เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบปเปˆเบงเป„เบ›เบซเบผเบฒเบ (เบกเบฑเบเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™) เป€เบ›เบฑเบ™: compiler C ++, Python, เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ (เบ•เบปเบงเบขเปˆเบฒเบ‡, vim, emacs เบซเบผเบท เบญเบธเบ›เบฐเบฅเบฒเบ„เบฒ) เปเบฅเบฐ, เบ–เป‰เบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเป€เบงเบตเบŠเบฑเบ™ Git. เบœเบนเป‰เปƒเบŠเป‰เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเบˆเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบฑเบ‡เบงเบปเบ™เบ–เป‰เบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบฅเบฒเบเบ‡เบฒเบ™เบšเบฒเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบฑเป‰เบ™เบชเบนเบ‡ ns-3 เบซเบฒเบเป„เบ›, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆ, เป‚เบ„เบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡ wiki เบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปเบฅเบฐเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบ. เบซเบ™เป‰เบฒเบซเบ™เบถเปˆเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบซเบ™เป‰เบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡, เบกเบตเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ•เปˆเบฒเบ‡เป†, เบกเบตเบขเบนเปˆ: https://www.nsnam.org/wiki/Installation.

เบžเบฒเบเบชเปˆเบงเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เบญเบ‡ wiki เบ™เบตเป‰เบญเบฐเบ—เบดเบšเบฒเบเบงเปˆเบฒเบŠเบธเบ”เปƒเบ”เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ ns-3 เบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบžเบงเบเบกเบฑเบ™เปƒเบ™เบฅเบปเบ”เบŠเบฒเบ”เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡ Linux เบซเบผเบท macOS.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเบ›เบฐเป‚เบซเบเบ”เบˆเบฒเบเป‚เบญเบเบฒเบ”เบ™เบตเป‰เป€เบžเบทเปˆเบญเบ„เบปเป‰เบ™เบซเบฒเบซเบ™เป‰เบฒ wiki ns-3 เบซเบผเบทเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ•เบปเป‰เบ™เบ•เป: https://www.nsnam.org, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เป‚เบ”เบเป€เบฅเบตเปˆเบกเบˆเบฒเบเป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”เบ‚เบญเบ‡ ns-3 (ns-3.29), เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเปเบฅเปˆเบ™ ns-3:

เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบท / เบฎเบธเปˆเบ™

  • C++ compiler
    clang++ เบซเบผเบท g++ (g++ เบฅเบธเป‰เบ™ 4.9 เบซเบผเบทเบชเบนเบ‡เบเบงเปˆเบฒ)
  • Python
    เบฅเบธเป‰เบ™ python2 >= 2.7.10, เบซเบผเบท เป€เบงเบตเบŠเบฑเปˆเบ™ python3 >=3.4
  • Git
    เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ” (เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ ns-3 เปƒเบ™ GitLab.com)
  • tar
    เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”เปƒเบ”เป†เบเปเบ•เบฒเบก (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ unpacking nsโ€‘3 release)
  • bunzip2
    เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”เปƒเบ”เป†เบเปเบ•เบฒเบก (เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ–เบญเบ”เบญเบญเบเบฅเบธเป‰เบ™ nsโ€‘3)

เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบงเบตเบŠเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ Python, เบžเบดเบก python -V. เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบงเบตเบŠเบฑเบ™ g++, เบžเบดเบก g++ -v. เบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ”เบ‚เบฒเบ”เบซเบฒเบเป„เบ› เบซเบผเบทเป€เบเบปเปˆเบฒเป€เบเบตเบ™เป„เบ›, เบเบฐเบฅเบธเบ™เบฒเป€เบšเบดเปˆเบ‡เบ„เบนเปˆเบกเบทเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เปœเป‰เบฒ wiki ns-3.

เบˆเบฒเบเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบœเบนเป‰เบญเปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ Linux, MacOS, เบซเบผเบท Linux emulator, เปเบฅเบฐเบกเบตเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

3.2.1 เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เบเบฒเบ™เบ›เปˆเบญเบ ns-3 เป€เบ›เบฑเบ™เบเบฒเบ™เบฎเบงเบšเบฎเบงเบกเปเบซเบผเปˆเบ‡

เบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฑเบเบชเบนเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เปƒเบซเบกเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเบ—เบปเบ”เบฅเบญเบ‡เบเบฑเบšเบฎเบธเปˆเบ™เบซเบผเป‰เบฒเบชเบธเบ”เปเบฅเบฐเบŠเบธเบ”เบ‚เบญเบ‡ ns-3. ns-3 เบ›เปˆเบญเบเบญเบญเบเบกเบฒเป€เบกเบทเปˆเบญเบ–เบทเบเบˆเบฑเบ”เบžเบดเบกเป€เบ›เบฑเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบšเบตเบšเบญเบฑเบ”, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เป€เบญเบตเป‰เบ™เบงเปˆเบฒ เปเบฒเบ เบšเบฒเบ™. เปเบฒเบ เบšเบฒเบ™ เปเบกเปˆเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบˆเบฑเบ”เป€เบเบฑเบšเบŠเบญเบšเปเบงเบžเบดเป€เบชเบ”เบ—เบตเปˆเบซเบผเบฒเบเป„เบŸเบฅเปŒเบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบเบฒเบ™เบˆเบฑเบ”เป€เบเบฑเบšเบˆเบฐเบ–เบทเบเบšเบตเบšเบญเบฑเบ”. ns-3 เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ boot เบœเปˆเบฒเบ™ เปเบฒเบ เบšเบฒเบ™ เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒเบเบฒเบ™เบ›เปˆเบญเบ, เบ”เบฒเบงเบ™เปŒเป‚เบซเบฅเบ”เปเบฅเบฐ unpack เบกเบฑเบ™.

เปƒเบซเป‰เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ ns-3 เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบžเบทเป‰เบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบชเปเบฒเป€เบ™เบปเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบญเบเบญเบญเบเบกเบฒเป‚เบ”เบเบเบฒเบ™เปƒเบชเปˆเบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ console Linux (เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก, เปเบ™เปˆเบ™เบญเบ™)

$ 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 เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ” ns-3 เป‚เบ”เบเปƒเบŠเป‰ Git

เบฅเบฐเบซเบฑเบ” ns-3 เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ Git เปƒเบ™ GitLab.com เบ—เบตเปˆ https://gitlab.com/nsnam/. เบเบธเปˆเบก เบ™เบฒเบกเบชเบฐเบเบธเบ™ เป€เบญเบปเบฒ repositories เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเปƒเบŠเป‰เป‚เบ”เบเป‚เบ„เบ‡เบเบฒเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”.

เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ Git เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบญเบกเปเบŠเบกเบซเบผเบทเป‚เบ„เบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก ns-3-allinone. เบ™เบตเป‰เปเบกเปˆเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบชเบฐเบ„เบดเบšเบ—เบตเปˆเบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เป‚เบซเบผเบ”เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเปˆเบญเบ ns-3 เบ—เบตเปˆเปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบซเบกเปˆเบเบฑเบš Git, เบ„เปเบฒเบงเปˆเบฒ "fork" เปเบฅเบฐ "clone" เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ—เปˆเบฒเบ™; เบ–เป‰เบฒเป€เบ›เบฑเบ™เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆ clone (เป€เบฎเบฑเบ”เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡) repository เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ GitLab.com เปเบšเบšเบ™เบตเป‰:

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

เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบกเบธเบกเป€เบšเบดเปˆเบ‡เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™ ns-3-allinone เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบŸเป‰เบกเบˆเบฑเบ”เป€เบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

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

เบเบฐเบฅเบธเบ™เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบกเบต script download.py, เป€เบŠเบดเปˆเบ‡เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเบชเบฐเบเบฑเบ” ns-3 เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ. เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบตโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹: เบ—เบฑเบ‡โ€‹เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ”โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒ ns-3 เบซเบฅเป‰เบฒโ€‹เบชเบธเบ”โ€‹:

$ python download.py

เบซเบผเบทเบกเบฑเบเบเบฒเบ™เบ›เปˆเบญเบ ns-3 เป‚เบ”เบเปƒเบŠเป‰เบ—เบธเบ‡ -n เป€เบžเบทเปˆเบญเบŠเบตเป‰เบšเบญเบเบ•เบปเบงเป€เบฅเบเบเบฒเบ™เบ›เปˆเบญเบ:

$ python download.py -n ns-3.29

เบซเบผเบฑเบ‡เบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต ns-3-allinone repositories เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบˆเบฐเบ–เบทเบเบ”เบฒเบงเป‚เบซเบผเบ” ns-3, bake, pybindgen ะธ เป€เบ™เบ•เบฑเบ™เบ™เบดเบก.

ะŸั€ะธะผะตั‡ะฐะฝะธะต
เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ—เบตเปˆเบกเบต Ubuntu16.04 เบ—เบตเปˆเบชเบฐเบญเบฒเบ”, เบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เปˆเบฝเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰: $ sudo python3 download.py -n ns-3.29 (เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบœเบนเป‰เปเบ›).

3.3.1 เบเบฒเบ™เป‚เบซเบผเบ” ns-3 เป‚เบ”เบเปƒเบŠเป‰ Bake

เบชเบญเบ‡เบงเบดเบ—เบตเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ (เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เปเบซเบผเปˆเบ‡เบซเบผเบท repository ns-3-allinone เบœเปˆเบฒเบ™ Git) เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ ns-3 เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบกเบต addons เบซเบผเบฒเบ (pybindgen เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เบœเบนเบเบกเบฑเบ” Python เปเบฅเบฐ เป€เบ™เบ•เบฑเบ™เบ™เบดเบก เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เป„เบซเบงโ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹)โ€‹. เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเบชเบฒเบกเบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™ ns-3-allinone เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ bake.

เบญเบปเบš เป€เบ›เบฑเบ™โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบชเบฒเบ™โ€‹เบ‡เบฒเบ™โ€‹เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบŠเบญเบšโ€‹เปเบงโ€‹เบˆเบฒเบ repositories เบซเบผเบฒเบโ€‹, เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™ nsโ€‹-3โ€‹. เบญเบปเบš เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบฎเบฑเบšเบฅเบธเป‰เบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ ns-3, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ” เปเบฅเบฐเบชเป‰เบฒเบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เป€เบงเบตเบŠเบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบ ns-3, เป€เบŠเบฑเปˆเบ™: เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเบเบปเบ‡, CradleNetwork Simulation Cradle, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบœเบนเบเบกเบฑเบ” Python เปƒเบซเบกเปˆเปเบฅเบฐ "เปเบญเบฑเบšเบฏ" ns-3 เบ•เปˆเบฒเบ‡เป†.

ะŸั€ะธะผะตั‡ะฐะฝะธะต
CradleNetwork Simulation Cradle เปเบกเปˆเบ™เบเบญเบšเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบŠเป‰ stacks เป€เบ„เบทเบญเบ‚เปˆเบฒเบ TCP / IP เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบžเบฒเบเปƒเบ™ simulator เป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ„เบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ ns-3 เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฐเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบฑเป‰เบ™เบชเบนเบ‡เบซเบผเบทเป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ™เบตเป‰.

เปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบ ns-3 เบซเบผเป‰เบฒเบชเบธเบ” เบญเบปเบš เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบ tar. เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบ›เบฐเบเบญเบšเบกเบตเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบฅเบ”เป€เบงเบตเบŠเบฑเบ™เบ‚เบญเบ‡เบŠเบญเบšเปเบงเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบญเบญเบ. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบฐเบšเบฑเบš เบญเบปเบš, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเปเบˆเบเบขเบฒเบเบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบ ns-3.29, เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ”เบถเบ‡เป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ‚เบญเบ‡ ns-3 เบซเบผเบทเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบฑเป‰เบ™, เปเบ•เปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ”เบถเบ‡เป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบญเบเบ•เปเปˆเบกเบฒ (เบ–เป‰เบฒเป„เบŸเบฅเปŒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบŠเบธเบ”. bakeconf.xml เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡).

เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบชเปเบฒเป€เบ™เบปเบฒเบซเบฅเป‰เบฒเบชเบธเบ” bakeเป‚เบ”เบเบเบฒเบ™เปƒเบชเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ console Linux เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ 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.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบชเปเบฒเป€เบฅเบฑเบ” clone เบ—เปˆเบฒเบ™เบ„เบงเบ™เบกเบตเบŠเบทเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต bake, เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

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

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เป‚เบซเบฅเบ”เบชเบฐเบ„เบดเบš Python เบซเบผเบฒเบเบญเบฑเบ™, เป‚เบกเบ”เบนเบ™ Python เบŠเบทเปˆ bake เปเบฅเบฐเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ XML. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰เบชเบฐเบ„เบดเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบ ns-3 เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบ. เป€เบ›เบปเป‰เบฒเปเบฒเบเบเบฒเบ™เบ›เบฑเบšเปเบ•เปˆเบ‡เบซเบผเบฒเบเบญเบฑเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰:

  1. ns-3.29: เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบ; เบกเบฑเบ™เบˆเบฐเบ”เบฒเบงเป‚เบซเบฅเบ”เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเปƒเบ™ tarball;

  2. ns-3-dev: เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™, เปเบ•เปˆเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบˆเบฒเบเบ•เบปเป‰เบ™เป„เบกเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ;

  3. ns-allinone-3.29: เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบญเบทเปˆเบ™เป†เป€เบŠเบฑเปˆเบ™: เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ„เบฅเบดเบ เปเบฅเบฐเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบณเบฅเบญเบ‡ Cradle, Openflow เบชเปเบฒเบฅเบฑเบš ns-3.

  4. ns-3-allinone: เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบฅเบธเป‰เบ™เบฅเบธเป‰เบ™เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™ Allinone, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ.

ะŸั€ะธะผะตั‡ะฐะฝะธะต
เบเบปเบ” โ€” เบชเบฐโ€‹เบ–เบฒโ€‹เบ›เบฑเบ”โ€‹เบ•เบฐโ€‹เบเบฐโ€‹เบเบฒเบ™โ€‹เบŠเบญเบšโ€‹เปเบง modular เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡ routersโ€‹.

Openflow เปเบกเปˆเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบ routers เปเบฅเบฐ switches, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบŠเบญเบšเปเบง.

เบžเบฒเบšเบ–เปˆเบฒเบเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™ (เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ›เปˆเบญเบ) ns-3 เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบ—เบตเปˆ:https://gitlab.com/nsnam/ns-3-dev.git.

เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฐเบเบฒเบเบฒเบกเบฎเบฑเบเบชเบฒ repositories เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบกเบตเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบญเบเบญเบญเบเบกเบฒ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบซเบกเปˆ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฅเบทเบญเบเบเบฒเบ™เบ›เปˆเบญเบเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™.

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบซเบฅเป‰เบฒโ€‹เบชเบธเบ”โ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡ repositoriesโ€‹, เบซเบผเบทโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบซเบ™เป‰เบฒโ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ•โ€‹เปŒ ns-3 Releasesโ€‹:https://www.nsnam.org/releases/ เปเบฅเบฐเบ„เบฅเบดเบเปƒเบชเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบฐเบšเบฑเบšเบซเบฅเป‰เบฒเบชเบธเบ”. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบทเบšเบ•เปเปˆเบเบฑเบš ns-3.29.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบš ns-3 เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท เบญเบปเบš. เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบงเบฝเบเบ‡เบฒเบ™ เบญเบปเบš.

Bake เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบเบฒเบ™เป‚เบซเบฅเบ”เปเบซเบผเปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต เปเบซเบผเปˆเบ‡ เปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ build directory. เบญเบปเบš เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡ binary, เปเบ•เปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ เบญเบปเบš เบšเปเปˆเปเบกเปˆเบ™เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบ”เบฒเบงเป‚เบซเบผเบ”, เบ„เบงเบ™เป€เบžเบตเปˆเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒ bake เป„เบ›เบชเบนเปˆเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก PATH), เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰ (เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบš Linux bash shell). เป„เบ›เบ—เบตเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต "bake" เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เบ™เบตเป‰เบˆเบฐเบˆเบฑเบ”เบงเบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™ bake.py เป„เบ›เบชเบนเปˆเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ shell เปเบฅเบฐเบˆเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™เป†เบŠเบญเบเบซเบฒ executables เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบกเบฑเบ™เบชเป‰เบฒเบ‡ bake. เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ bake, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ PATH เปเบฅเบฐ PYTHONPATH เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เปเบ•เปˆเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡ ns-3-allinone (เบกเบตเบŠเบธเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก) เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™.

เป„เบ›เบ—เบตเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเปƒเบชเปˆเบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ console:

$ ./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 ...

เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบญเบฑเบšเป‚เบซเบฅเบ”เป€เบŠเบฑเปˆเบ™ Mercurial, CVS, Git เปเบฅเบฐ Bazaar เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”. เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›เปƒเบ™เปเบšเบšเบ›เบปเบเบเบฐเบ•เบดเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเบดเบ—เบต) เบซเบผเบทเบ•เบดเบ”เบ•เปเปˆเบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบ‚เปเบ„เบงเบฒเบกเบŠเปˆเบงเบเป€เบซเบผเบทเบญ.

เบ•เปเปˆเป„เบ›, เบฅเบญเบ‡เบ”เบฒเบงเป‚เบซเบฅเบ”เบŠเบญเบšเปเบง:

$ ./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 เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ Wafเบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. เบœเบนเป‰เปƒเบŠเป‰เบชเปˆเบงเบ™เปƒเบซเบเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Waf, เปเบ•เปˆเบกเบตเบชเบฐเบ„เบฃเบดเบšเบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เปœเป‰เบญเบเปœเบถเปˆเบ‡เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เบซเบผเบทเบˆเบฑเบ”เบงเบฒเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เบตเปˆเบŠเบฑเบšเบŠเป‰เบญเบ™เบซเบผเบฒเบเบ‚เบถเป‰เบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฐเบฅเบธเบ™เบฒ, เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš Waf, เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡ build.py เปเบฅเบฐเบ›เบฐเบเบญเบšเบเบฑเบš bake.

3.4.1 เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เป‰เบงเบ build.py

เบฅเบฐโ€‹เบกเบฑเบ”โ€‹เบฅเบฐโ€‹เบงเบฑเบ‡ เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบˆเบฒเบเบชเบฐเบšเบฑเบš archive เปเบซเบผเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰; เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบ”เบฒเบงเป‚เบซเบผเบ”เบœเปˆเบฒเบ™ git เบซเบผเบท bake.

เป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบเบฒเบ™เบ›เปˆเบญเบ เปเบฒเบ เบšเบฒเบ™, เปƒเบ™ ns-3-allinone เบกเบตเบชเบฐเบ„เบดเบšเบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เบฐเบเบญเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™. เบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ build.py. เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ—เปˆเบฒเบ™โ€‹เปƒเบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบšเบšเบžเบดเป€เบชเบ”เปเบฅเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš ns-3 เบกเบฑเบเบˆเบฐเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ‚เบญเบ‡ ns-3, Waf, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ•เปเปˆเบกเบฒเปƒเบ™เบšเบปเบ”เปเบ™เบฐเบ™เปเบฒเบ™เบตเป‰.

เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบ”เบฒเบงเป‚เบซเบผเบ”เป‚เบ”เบเปƒเบŠเป‰ เปเบฒเบ เบšเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™ ~/เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบ เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเบŠเบทเปˆเป€เบŠเบฑเปˆเบ™ ns-allinone-3.29. เบเบฐเบฅเบธเบ™เบฒเปƒเบชเปˆเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เป€เบกเบทเปˆเบญเบ–เบทเบเป€เบญเบตเป‰เบ™ build.py เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบชเบญเบ™เบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™ ns-3. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป‚เบ„เบ‡เบเบฒเบ™เบเบฑเบ‡เบชเป‰เบฒเบ‡เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡ ns-3 เป‚เบ”เบเบšเปเปˆเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบซเบผเบทเบเบปเบเป€เบงเบฑเป‰เบ™เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เป€เบซเบฑเบ™โ€‹เบซเบผเบฒเบโ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ” compiler เบชเบฐโ€‹เปเบ”เบ‡โ€‹เป‚เบ”เบ script เบ”เบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เป‚เบซเบผเบ”โ€‹. เบ—เปเบฒเบญเบดเบ”เบชเบฐเบ„เบฃเบดเบšเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡เบ•เบปเบงเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง เป€เบ™เบ•เบฑเบ™เบ™เบดเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เบœเบนเบเบกเบฑเบ” 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 เบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบฒเบเบ™เบญเบเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เบซเบผเบทเบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰. เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ simulator เบšเปเปˆเป„เบ”เป‰เบ›เบฐเบเบญเบšเบซเบผเบทเป‚เบกเบ”เบนเบ™เบ›เบฐเบเบญเบšเบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡.

3.4.2 เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เป‰เบงเบ Bake

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ bake เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบˆเบฒเบ repositories เป‚เบ„เบ‡เบเบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบทเบšเบ•เปเปˆเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ 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 เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบกเบท bake เบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ—เบธเบเป€เบงเบ—เบต. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ‚เปเป‰เบ„เบงเบฒเบกเปเบšเบšเบ™เบตเป‰เบˆเบฐเบ›เบฒเบเบปเบ”:

>> 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 เบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบœเบนเบเบกเบฑเบ” Python เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡. เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบชเปˆเบงเบ™เปƒเบซเบเปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰ (เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบˆเบปเบ™เบเปˆเบงเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ›เปˆเบฝเบ™ ns-3), เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบฐเป€เบฅเบตเบเบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบžเบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

เบ–เป‰เบฒเบกเบฑเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบง, เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเปƒเบซเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปเบเปˆเป€เบˆเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›:

$ ./bake.py show

เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบ”เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡เบˆเบฐเบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰.

3.4.3 เบชเป‰เบฒเบ‡เบ”เป‰เบงเบ Waf

เป€เบ–เบดเบ‡เบˆเบธเบ”เบ™เบตเป‰, เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ ns-3, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบชเบฐเบ„เบดเบš build.py, เบซเบผเบทเป€เบ„เบทเปˆเบญเบ‡เบกเบท bake. เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ ns-3 เปเบฅเบฐเบเบฒเบ™เบฎเบฑเบเบชเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเปเปˆเบชเป‰เบฒเบ‡ Waf เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต ns-3. Waf เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ ns-3. เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เบชเปˆเบงเบ™โ€‹เปƒเบซเบเปˆโ€‹เบเป‰เบฒเบโ€‹เป„เบ›โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป‚เบ”เบโ€‹เบเบปเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เบงเปˆเบญเบ‡โ€‹เป„เบงโ€‹เป€เบžเบทเปˆเบญโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบ„เปˆเบฒโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบเบญเบš nsโ€‘3โ€‹ Waf. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเบชเบทเบšเบ•เปเปˆ, เบเบฐเบฅเบธเบ™เบฒเป„เบ›เบ—เบตเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต ns-3 เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™.

เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฒเบกเป€เบฅเบฑเบเบ™เป‰เบญเบเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™. เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเบฐเบšเบฑเบšเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ—เปˆเบฒเบ™เป„เบ”เป‰เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฐเบšเบฑเบšเบ”เบตเบšเบฑเบ. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. เป€เบžเบทเปˆเบญเบญเบฐเบ—เบดเบšเบฒเบเปƒเบซเป‰ Waf เบงเปˆเบฒเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เบ™เบตเป‰เบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง Waf เบขเบนเปˆเบ™เบญเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ (เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™). เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบˆเบฒเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบต (เบเบฑเบ‡เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰); เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบถเบšเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™ เปเบฅเบฐเป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต เบชเป‰เบฒเบ‡/. เป€เบกเบทเปˆเบญเป‚เบ„เบ‡เบเบฒเบ™เบ–เบทเบ configured เปเบฅเบฐเบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบˆเบฐเบเบงเบ”เบชเบญเบšเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ•เปˆเบฒเบ‡เป†, เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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 เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰, เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบ–เบทเบเบชเบฐเปเบ”เบ‡. เบเบฑเบ‡เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ sudo เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ” suid bit "เบ•เบฑเป‰เบ‡ ID เบเบธเปˆเบกเปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™" เบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™. เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบ›เบฒเบเบปเบ”เป€เบ›เบฑเบ™ "เบšเปเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰". เบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰, เปƒเบŠเป‰ Waf เบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต --check-config.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ› เปเบฅเบฐเบ›เปˆเบฝเบ™เบเบฑเบšเป„เบ›เบชเป‰เบฒเบ‡ debug เบ—เบตเปˆเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡ เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

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

เบ”เบฝเบงเบ™เบตเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ–เบทเบเบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™ เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป€เบงเบตเบŠเบฑเบ™ debug เบ‚เบญเบ‡เป‚เบ›เบฃเปเบเบฃเบก 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, เปเบ•เปˆเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™ Waf เบกเบฑเบ™เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป‚เบ”เบเบเบปเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบญเบฑเบ™เบ™เบตเป‰เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ:

$ ./build.py --disable-python

เบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒเบˆเบฐเป€เบ›เบฑเบ™เปเบšเบšเบ™เบตเป‰:

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

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบžเบดเป€เบชเบ” - - เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป‚เบ”เบเบœเปˆเบฒเบ™ wafเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ:

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

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบชเป‰เบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เบปเป‰เบ™เบ•เป ./waf configure --disable-python. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš Waf.

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡

ns-3 เบฅเบธเป‰เบ™เบ–เบทเบเบ—เบปเบ”เบชเบญเบšเบขเบนเปˆเปƒเบ™เบ•เบปเบงเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™ C ++ เบซเบผเป‰เบฒเบชเบธเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบญเบ Linux เปเบฅเบฐ MacOS เบ—เบปเปˆเบงเป„เบ›. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบกเบทเปˆเบญเป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›, เบเบฒเบ™เปเบˆเบเบขเบฒเบเปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเป‚เบ”เบ compilers เปƒเบซเบกเปˆ, เปเบฅเบฐ compilers เปƒเบซเบกเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบตเปเบ™เบงเป‚เบ™เป‰เบกเบ—เบตเปˆเบˆเบฐ pedantic เบซเบผเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบž. ns-3 configure เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบฐเบšเบฑเบšเป€เบเบปเปˆเบฒเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเปƒเบซเบกเปˆ, เบ„เปเบฒเป€เบ•เบทเบญเบ™ compiler เบญเบฒเบ”เบˆเบฐเบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบกเบตเบเบฒเบ™เบ›เปˆเบญเบ nsโ€‘3.28 เบชเปเบฒเบฅเบฑเบš Fedora 28, เป€เบŠเบดเปˆเบ‡เบฅเบงเบกเบกเบตเบฎเบธเปˆเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปƒเบซเบกเปˆ. gcc (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, เปƒเบ™ Waf เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบกเบฑเบ™เบ›เบดเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ—เบธเบ‡ "-Wrror" เปƒเบ™ g++ เปเบฅเบฐ clang++. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบทเบญเบ "--disable-wrror" เปเบฅเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเบ™เบณเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบเบณเบ™เบปเบ”เบ„เปˆเบฒ:

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

เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบผเบทเบ›เบฐเบเบญเบš

เบšเบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡ Waf เบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบฅเบฐเบšเบฒเบ‡เบญเบฑเบ™เปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡: เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡ ns-3, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเบดเบ” เปƒเบ•เป‰ เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ sudo, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. เบ™เบตเป‰เบˆเบฐ override เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

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

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰ Waf เบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง sudoเป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เป‚เบ›เบฃเปเบเบกเบชเป‰เบฒเบ‡เบŠเบฑเบญเบเป€เบเบฑเบ”เบฅเบฐเบซเบฑเบ” emulation เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ”เป‰เบงเบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ” เบฎเบฒเบ. เบเบฒเบ™ Waf เบกเบตเบซเบผเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเบชเปเบฒเบฅเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เป€เบžเบทเปˆเบญเบชเบณเบซเบผเบงเบ”เบ•เบปเบงเป€เบฅเบทเบญเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบเบฐเบฅเบธเบ™เบฒเปƒเบชเปˆ:

$ ./waf --help

เปƒเบ™เบžเบฒเบเบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบšเบฒเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

เป‚เบ›เบฃเป„เบŸเบฅเปŒเบ›เบฐเบเบญเบš

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เปเบฅเป‰เบงเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบ™เบงเปƒเบ” Waf เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบŠเบธเบกเบ™เบธเบก debug ะธ เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”:

$ ./waf --build-profile=debug

เบเบฑเบ‡เบกเบตเป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบ›เบฐเบเบญเบšเบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡, เบ›เปˆเบญเบ. เบ—เบฒเบ‡เป€เบฅเบทเบญเบ -d เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบšเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš --build-profile. เป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ, เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™, เปเบฅเบฐเบชเบฐเบซเบผเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™:

ns-3 เบเบฒเบ™เบชเบญเบ™ simulator เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบšเบปเบ”เบ—เบต 3

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ เปเบฅเบฐ เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ”เบตเบšเบฑเบเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเปเบ™เบฐเบ™เปเบฒเปเบกเปˆเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเบฐเบ„เบดเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™เป‚เบซเบกเบ”เบ”เบตเบšเบฑเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบŠเป‰เปเบฒเบŠเป‰เบญเบ™ (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฐเบ–เบดเบ•เบดเบซเบผเบทเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต) เปƒเบ™เป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบšเบฒเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เปƒเบŠเป‰ Code Wrapper Macro:

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

เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, Waf เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡เบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเป‰เบฒเบ‡. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบ -โ€ฏ-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
...

เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบซเบผเบฒเบเบชเบฐเบžเบฒเปเบซเปˆเบ‡เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‚เบฝเบ™เปƒเบซเบกเปˆเบเบฒเบ™เบ›เบฐเบเบญเบšเบซเบฅเป‰เบฒเบชเบธเบ”เปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เป„เบ›เบซเบฒเป‚เบ›เบฃเป„เบŸเบฅเปŒเบญเบทเปˆเบ™, Waf เบˆเบฐเบฅเบงเบšเบฅเบงเบกเบžเบฝเบ‡เปเบ•เปˆเบกเบฑเบ™, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡.

เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ•เบปเบงเป€เบฅเบทเบญเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ”เบฝเบงเบเบฑเบ™เปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡. เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”:

$ 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

Compilers เปเบฅเบฐเบ—เบธเบ‡

เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ Waf เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ ns-3 เปƒเบŠเป‰ C++ compiler เบˆเบฒเบ GCC ( g ++). เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบญเบฑเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบŠเป‰ Waf C++ compiler, เป‚เบ”เบเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก CXX. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ C ++ compiler Clang, clang ++,

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

เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” configure เป„เบ”เป‰ Waf เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เปเบˆเบเบขเบฒเบเป‚เบ”เบเปƒเบŠเป‰ distcc:

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

เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš distcc เปเบฅเบฐเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เปเบˆเบเบขเบฒเบเบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™เบžเบฒเบเป€เบญเบเบฐเบชเบฒเบ™. เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ—เบธเบ‡ compiler เป€เบกเบทเปˆเบญเบเบณเบ™เบปเบ”เบ„เปˆเบฒ ns-3, เปƒเบซเป‰เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก CXXFLAGS_EXTRA.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ

Waf เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ•เปˆเบฒเบ‡เป†เปƒเบ™เบฅเบฐเบšเบปเบš. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เปเบฅเบฐเบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Waf เบฎเบนเป‰เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบขเบนเปˆเบšเปˆเบญเบ™เบญเบทเปˆเบ™.

เบ–เป‰เบฒเบœเบนเป‰เปƒเบŠเป‰เบกเบฑเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ™เบญเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปเปˆเบชเป‰เบฒเบ‡, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ ./waf เบ•เบดเบ”เบ•เบฑเป‰เบ‡. เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบกเปˆเบ™ / usr / เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™ ./waf เบ•เบดเบ”เบ•เบฑเป‰เบ‡ เบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ / usr / local / bin, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบ™ / usr / local / lib เปเบฅเบฐเป„เบŸเบฅเปŒ header เปƒเบ™ /usr/local/include. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบชเบดเบ” Superuser เบˆเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเบ•เบฑเป‰เบ‡เบ”เป‰เบงเบเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ›เบปเบเบเบฐเบ•เบดเบˆเบฐเป€เบ›เบฑเบ™ sudo ./waf เบ•เบดเบ”เบ•เบฑเป‰เบ‡. เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง, Waf เบˆเบฐเป€เบฅเบทเบญเบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเป‰เบฒเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŠเบญเบเบซเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เปเบฒโ€‹เบ™เปเบฒโ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบœเปˆเบฒเบ™โ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹ --prefixเบ•เบปเบงเบขเปˆเบฒเบ‡:

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

เบ–เป‰เบฒเบ•เปเปˆเบกเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เบœเบนเป‰เปƒเบŠเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ ./waf, เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ /opt/local.

เบ—เบตเบกเบ‡เบฒเบ™ ./waf clean เบ•เป‰เบญเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ configure เป‚เบ„เบ‡เบเบฒเบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบˆเบฐเบ™เปเบฒเปƒเบŠเป‰ Waf เบžเบฒเบโ€‹เปƒเบ•เป‰โ€‹เบ„เปเบฒโ€‹เบ™เปเบฒโ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเปƒเบŠเป‰ ns-3 เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป‚เบ—เบซเบฒ ./waf install. เบœเบนเป‰เปƒเบŠเป‰เบชเปˆเบงเบ™เปƒเบซเบเปˆเบˆเบฐเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เป€เบžเบฒเบฐเบงเปˆเบฒ Waf เบˆเบฐเป€เบเบฑเบšเป€เบญเบปเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเป‰เบฒเบ‡, เปเบ•เปˆเบœเบนเป‰เปƒเบŠเป‰เบšเบฒเบ‡เบ„เบปเบ™เบญเบฒเบ”เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ–เป‰เบฒเบเบดเบ”เบˆเบฐเบเปเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบšเบฑเบ™เบ”เบฒเป‚เบ„เบ‡เบเบฒเบ™เบ™เบญเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต ns-3.

Waf เบ”เบฝเบง

เปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เปเบซเบผเปˆเบ‡ ns-3, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡ script Waf. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบ, เบ—เปˆเบฒเบ™เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต scratch/ เบซเบผเบทเป€เบฅเบดเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™src/... เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Waf. เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบˆเบทเปˆเบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบขเบนเปˆเปเบฅเบฐเปเบฅเปˆเบ™ Waf เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เปเบ•เปˆเบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™ tedious เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบชเบฐเบ™เบฑเป‰เบ™เบกเบตเบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ. เบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบเป‰เป„เบ‚เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบŠเบฑเปˆเบ™: emacs เบซเบผเบท vim, เปƒเบ™เบชเบญเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบก terminal เบ–เบทเบเป€เบ›เบตเบ”, เบซเบ™เบถเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ ns-3, เปเบฅเบฐเบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบกเบตเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ เปเบฒเบ เบšเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป„เบ”เป‰:

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

$ cd scratch 
$ waff build

เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเป‚เบกเบ”เบนเบ™เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบฅเปเป‰เบฅเบงเบ‡เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบชเบฐเบ„เบดเบš waf trivial เป€เบŠเบฑเปˆเบ™ exec ../../waf. เบเบฐเบฅเบธเบ™เบฒ, เบขเปˆเบฒเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบซเบกเปˆเปเบฅเบฐ, เป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เบšเปเปˆเบ”เบต, เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเบเบงเบ”เบžเบปเบš. เบงเบดเบ—เบตเปเบเป‰เป„เบ‚เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบ„เบงเบ™เปƒเบŠเป‰.

3.5 เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš ns-3

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบ ns-3 เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เบชเบฐเบ„เบดเบš ./test.py:

$ ./test.py

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบเบฑเบš Waf. เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เป€เบˆเบปเป‰เบฒเบ„เบงเบ™เบˆเบฐเป€เบซเบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒ:

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

เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ” valgrind crashes, crashes เบซเบผเบทเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบšเบฑเบ™เบซเบฒเบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบซเบฑเบ”เบซเบผเบทเบ„เบงเบฒเบกเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบฅเบฐเบฅเบฐเบซเบฑเบ”.

เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเบฐเป€เบซเบฑเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบชเบธเบ”เบ—เป‰เบฒเบเบˆเบฒเบ Waf เปเบฅเบฐเบœเบนเป‰เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเปเบฅเปˆเบ™เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

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: ... " เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ›เบปเบเบเบฐเบ•เบด. เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบงเปˆเบฒเป€เบชเบฑเป‰เบ™เบชเบฐเบซเบผเบธเบšเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบœเปˆเบฒเบ™; เบšเปเปˆเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบฅเบปเป‰เบกเป€เบซเบฅเบงเบซเบผเบท crashed.) เปเบฅเบฐ Wafเปเบฅเบฐ test.py เบˆเบฐเบ‚เบฐเปœเบฒเบ™เบเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ—เบปเปˆเบงเปเบเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡.

3.6 เปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบš

เบžเบงเบเป€เบฎเบปเบฒเบ›เบปเบเบเบฐเบ•เบดเปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบšเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ„เบงเบšเบ„เบธเบก Waf. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™. เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™, เบžเบฝเบ‡เปเบ•เปˆเบ™เปเบฒเปƒเบŠเป‰ Waf เบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต -โ€ฏ-run. เปƒเบซเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ ns-3 เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡ เบชเบฐโ€‹เบšเบฒเบโ€‹เบ”เบตโ€‹เบŠเบฒเบงโ€‹เป‚เบฅเบเป‚เบ”เบเบเบฒเบ™เบžเบดเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

$ ./waf --run hello-simulator

Waf เบ—เปเบฒเบญเบดเบ”เบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบเปเปˆเบชเป‰เบฒเบ‡เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™. เบˆเบฒเบเบ™เบฑเป‰เบ™ Waf เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบœเบฐเบฅเบดเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰.

Hello Simulator

เบŠเบปเบกเป€เบŠเบตเบ! เบ”เบฝเบงเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบŠเป‰ ns-3!

เบ‚เป‰เบญเบเบ„เบงเบ™เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ‚เป‰เบญเบเบšเปเปˆเป€เบซเบฑเบ™เบœเบปเบ™?

เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบก WafเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบซเบฑเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš "เบชเบฐเบšเบฒเบเบ”เบต Simulator", เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบตเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบงเปˆเบฒเปƒเบ™เบžเบฒเบ [Build-with-Waf] เบ—เปˆเบฒเบ™เป„เบ”เป‰เบ›เปˆเบฝเบ™เป‚เบซเบกเบ”เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™. เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”, เปเบ•เปˆเบžเบฒเบ”เบเบฒเบ™เบชเบฐเบซเบผเบฑเบšเบเบฑเบšเป„เบ›เป‚เปเบ” debug. เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบ„เบญเบ™เป‚เบŠเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบšเบปเบ”เบชเบญเบ™เบ™เบตเป‰เปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบš ns-3 เบžเบดเป€เบชเบ”เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ เปเบฅเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบžเบดเบกเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡เปƒเบชเปˆ console. เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ™เบตเป‰เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบกเบทเปˆเบญเบฅเบฐเบซเบฑเบ” optimized เบ–เบทเบเบฅเบงเบšเบฅเบงเบก - เบกเบฑเบ™เปเบกเปˆเบ™ "optimized". เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เป€เบซเบฑเบ™โ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ” "Hello Simulatorโ€‹"โ€‹, เปƒเบซเป‰โ€‹เปƒเบชเปˆโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

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

เป€เบžเบทเปˆเบญเบ›เบฑเบšเปเบ•เปˆเบ‡ Waf เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฐเบšเบฑเบš debug เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ ns-3, เป€เบŠเบดเปˆเบ‡เบฅเบงเบกเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡ เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบ„เบงเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเบฐเบšเบฑเบšเบ”เบตเบšเบฑเบเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ„เบทเบ™เปƒเปเปˆเป‚เบ”เบเบเบฒเบ™เบžเบดเบก

$ ./waf

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™ เบชเบฐเบšเบฒเบเบ”เบต simulator, เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰.

3.6.1 เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡

เป€เบžเบทเปˆเบญเบœเปˆเบฒเบ™ arguments เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡เป„เบ›เบซเบฒเป‚เบ›เปเบเบก ns-3, เปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เปเบ—เบ™เบ—เบตเปˆ เบเบฑเบšเบŠเบทเปˆเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡. เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ -โ€ฏ-command-template เบเบฒเบ™ Waf เป€เบ›เบฑเบ™เบชเบนเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เบปเบงเบˆเบดเบ‡ Waf เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™. Waf เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเป‰เบง, เบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบŠเป‰เปเบกเปˆเปเบšเบšเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เปเบฅเบฐเบ—เบปเบ”เปเบ—เบ™เบŠเบทเปˆเป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš %s placeholder เป€เบžเบทเปˆเบญเป‚เบ—เบซเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบปเบšเบงเปˆเบฒ syntax เบ™เบตเป‰เบชเบฑเบšเบชเบปเบ™, เบกเบตเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ ns-3 เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบงเบปเบ‡เบขเบทเบกเบ”เบฝเบง:

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

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เปเบฅเปˆเบ™เบŠเบธเบ”เบ—เบปเบ”เบชเบญเบšเปเบšเบšเป€เบฅเบทเบญเบ. เปƒเบซเป‰เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบกเบตเบŠเบธเบ”เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ mytest (เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบšเปเปˆเบกเบต). เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰เบชเบฐเบ„เบดเบš ./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 เบžเบฒเบเปƒเบ•เป‰เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบญเบทเปˆเบ™, เป€เบŠเบฑเปˆเบ™: debugger (เบ•เบปเบงเบขเปˆเบฒเบ‡, gdb) เบซเบผเบทเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบปเบ”เบชเบญเบšเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ (เบ•เบปเบงเบขเปˆเบฒเบ‡: valgrind), เปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™ -โ€ฏ-command-template = "โ€ฆ". เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™ debugger เป„เบ”เป‰ gdb เป‚เบ›เบฃเปเบเบฃเบก hello-simulator ns-3 เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡:

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

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบŠเบทเปˆเป‚เบ›เบฃเปเบเบฃเบก ns-3 เบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ -โ€ฏ-run, เปเบฅเบฐเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡ (เบ—เบตเปˆเบ™เบตเป‰ gdb) เป€เบ›เบฑเบ™ token เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ -โ€ฏ-command-template. เบ—เบฒเบ‡เป€เบฅเบทเบญเบ -โ€ฏ-args informs gdbเบงเปˆเบฒเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ›เบฑเบ™เบ‚เบญเบ‡เป‚เบ›เปเบเบก "เบ•เปˆเปเบฒ". (เบšเบฒเบ‡เบชเบฐเบšเบฑเบš gdb เบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ—เบฒเบ‡เป€เบฅเบทเบญเบ -โ€ฏ-args. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เป€เบญเบปเบฒเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบญเบญเบเบˆเบฒเบ -โ€ฏ-command-template เปเบฅเบฐเปƒเบŠเป‰เบŠเบธเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡ gdb เป‚เบ•เป‰เบ–เบฝเบ‡.) เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบฅเบงเบกโ€‹เบชเบนเบ”โ€‹เบ™เบตเป‰โ€‹เปเบฅเบฐโ€‹เบญเบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบœเปˆเบฒเบ™โ€‹เบกเบฒโ€‹เป€เบžเบทเปˆเบญโ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบžเบฒเบโ€‹เปƒเบ•เป‰โ€‹เบเบฒเบ™ debugger เป„เบ”เป‰โ€‹:

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

3.6.3 เป€เบญเบเบฐเบชเบฒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ

Waf เบ„เบงเบ™เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเบˆเบฒเบเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰ ns-3. เป‚เบŸเบ™เป€เบ”เบตเบ™เบตเป‰เบเบฒเบเป€เบ›เบฑเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเป„เบŸเบฅเปŒเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฐเบ–เบทเบเบ‚เบฝเบ™. เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบฎเบฑเบเบชเบฒเป„เบŸเบฅเปŒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเบ™เบญเบเบ•เบปเป‰เบ™เป„เบกเป‰เปเบซเบผเปˆเบ‡ ns-3? เปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ -โ€ฏ-cwd:

$ ./waf --cwd=...

เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบชเบฐเบ”เบงเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเป„เบŸเบฅเปŒเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฒเบ‡เบญเป‰เบญเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป„เบ”เป‰:

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

เบเบฒเบ™เบ•เบปเบเปเบ•เปˆเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบฐเบšเบฑเบšเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบฎเบฑเบเบชเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต Wafเปเบฅเบฐโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒโ€‹ Waf เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเป‚เบ„เบ‡เบเบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฒเบงเป€เบ–เบดเบ‡เบ—เบตเบกเบ‡เบฒเบ™ -โ€ฏ-cwd เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™, เบœเบนเป‰เปƒเบŠเป‰เบชเปˆเบงเบ™เปƒเบซเบเปˆเบžเบฝเบ‡เปเบ•เปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Waf เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เปเบฅเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

เบชเบทเบšเบ•เปเปˆ: เบšเบปเบ”เบ—เบต 4

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™