IP(TS) рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА TSDuck рд╡рд╛рдкрд░рдгреЗ

рдЖрдЬ, рдЖрдпрдкреА(рдЯреАрдПрд╕) рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ (рдорд╛рд▓рдХреАрдЪреЗ) рдЙрдкрд╛рдп рдЖрд╣реЗрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде VB ╨╕ iQ, рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ рдлрдВрдХреНрд╢рдиреНрд╕рдЪрд╛ рдмрд▒реНрдпрд╛рдкреИрдХреА рд╕рдореГрджреНрдз рд╕рдВрдЪ рдЖрд╣реЗ рдЖрдгрд┐ рд╕рд╣рд╕рд╛ рдЯреАрд╡реНрд╣реА рд╕реЗрд╡рд╛рдВрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдореЛрдареНрдпрд╛ рдСрдкрд░реЗрдЯрд░рдХрдбреЗ рдЕрд╕реЗ рдЙрдкрд╛рдп рдЕрд╕рддрд╛рдд. рд╣рд╛ рд▓реЗрдЦ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рдирд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ TSDuck, CC(рд╕рд╛рддрддреНрдп рдХрд╛рдЙрдВрдЯрд░) рдХрд╛рдЙрдВрдЯрд░ рдЖрдгрд┐ рдмрд┐рдЯрд░реЗрдЯрджреНрд╡рд╛рд░реЗ IP(TS) рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреНрдпрд╛ рдХрд┐рдорд╛рди рдирд┐рдпрдВрддреНрд░рдгрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ. рд╕рдВрднрд╛рд╡реНрдп рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдореНрд╣рдгрдЬреЗ рдкреЕрдХреЗрдЯреНрд╕рдЪреЗ рдиреБрдХрд╕рд╛рди рдХрд┐рдВрд╡рд╛ рд▓реАрдЬреНрдб L2 рдЪреЕрдиреЗрд▓рджреНрд╡рд╛рд░реЗ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреЗ (рдЬреНрдпрд╛рдЪреЗ рд╕рд╛рдорд╛рдиреНрдпрдкрдгреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд░рд╛рдВрдЧреЗрддреАрд▓ рдиреБрдХрд╕рд╛рди рдХрд╛рдЙрдВрдЯрд░ рд╡рд╛рдЪреВрди).

TSDuck рдмрджреНрджрд▓ рдереЛрдбрдХреНрдпрд╛рдд

рдЯреАрдПрд╕рдбрдХ рд╣реЗ рдУрдкрди рд╕реЛрд░реНрд╕ (2-рдХреНрд▓реЙрдЬ рдмреАрдПрд╕рдбреА рдкрд░рд╡рд╛рдирд╛) рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЖрд╣реЗ (рдХрдиреНрд╕реЛрд▓ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЬрдЪрд╛ рд╕рдВрдЪ рдЖрдгрд┐ рд╕рд╛рдиреБрдХреВрд▓ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЬ рдХрд┐рдВрд╡рд╛ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓рд╛рдпрдмреНрд░рд░реА) TS рдкреНрд░рд╡рд╛рд╣ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА. рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди, рддреЗ IP (рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ/рдпреБрдирд┐рдХрд╛рд╕реНрдЯ), http, hls, dvb рдЯреНрдпреВрдирд░реНрд╕, dektec dvb-asi demodulator рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддреЗ, рдЕрдВрддрд░реНрдЧрдд TS-stream рдЬрдирд░реЗрдЯрд░ рдЖрд╣реЗ рдЖрдгрд┐ рдлрд╛рдЗрд▓реНрд╕рдордзреВрди рд╡рд╛рдЪрди рдЖрд╣реЗ. рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдИрд▓, IP (рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ/рдпреБрдирд┐рдХрд╛рд╕реНрдЯ), hls, dektec dvb-asi рдЖрдгрд┐ HiDes рдореЙрдбреНрдпреБрд▓реЗрдЯрд░, рдкреНрд▓реЗрдпрд░реНрд╕ (mplayer, vlc, xine) рдЖрдгрд┐ рдбреНрд░реЙрдкрд╡рд░ рд▓рд┐рд╣реВ рд╢рдХрддреЗ. рдЗрдирдкреБрдЯ рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рд╡рд┐рд╡рд┐рдз рдЯреНрд░реЕрдлрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреАрдЖрдпрдбреА рд░реАрдореЕрдкрд┐рдВрдЧ, рд╕реНрдХреНрд░реЕрдореНрдмрд▓рд┐рдВрдЧ / рдбрд┐рд╕рдХреЕрдореНрдмрд▓рд┐рдВрдЧ, рд╕реАрд╕реА рдХрд╛рдЙрдВрдЯрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдмрд┐рдЯрд░реЗрдЯ рдХреЕрд▓реНрдХреНрдпреБрд▓реЗрд╢рди рдЖрдгрд┐ рдЯреАрдПрд╕ рдкреНрд░рд╡рд╛рд╣рд╛рдВрд╕рд╛рдареА рдЗрддрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдкрд░реЗрд╢рдиреНрд╕.

рдпрд╛ рд▓реЗрдЦрд╛рдд, IP рдкреНрд░рд╡рд╛рд╣ (рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ) рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреАрд▓, рдкреНрд░реЛрд╕реЗрд╕рд░ bitrate_monitor (рдирд╛рд╡рд╛рд╡рд░реВрди рддреЗ рдХрд╛рдп рдЖрд╣реЗ рддреЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ) рдЖрдгрд┐ рд╕рд╛рддрддреНрдп (CC рдХрд╛рдЙрдВрдЯрд░рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг) рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд. рддреБрдореНрд╣реА TSDuck рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд рдЕрдиреНрдп рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░рд╛рд╕рд╣ IP рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рд╕рд╣рдЬрдкрдгреЗ рдмрджрд▓реВ рд╢рдХрддрд╛.

рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХреГрдд рдмрд┐рд▓реНрдб/рдкреЕрдХреЗрдЬ рдмрд╣реБрддреЗрдХ рд╡рд░реНрддрдорд╛рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА TSDuck. рддреЗ рдбреЗрдмрд┐рдпрдирд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдорд╕реНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп рдбреЗрдмрд┐рдпрди 8 рдЖрдгрд┐ рдбреЗрдмрд┐рдпрди 10 рдЕрдВрддрд░реНрдЧрдд рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ.

рдкреБрдвреЗ, рдЖрд╡реГрддреНрддреА TSDuck 3.19-1520 рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ, рд▓рд┐рдирдХреНрд╕рдЪрд╛ рд╡рд╛рдкрд░ OS рдореНрд╣рдгреВрди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ (рдбреЗрдмрд┐рдпрди 10 рд╕реЛрд▓реНрдпреВрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЧреЗрд▓рд╛ рд╣реЛрддрд╛, CentOS 7 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЧреЗрд▓рд╛ рд╣реЛрддрд╛)

TSDuck рдЖрдгрд┐ OS рддрдпрд╛рд░ рдХрд░рдд рдЖрд╣реЗ

рд░рд┐рдЕрд▓ рдлреНрд▓реЛрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА TSDuck рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдХрд┐рдВрд╡рд╛ OS (рд╕реЙрдХреЗрдЯ) рд╕реНрддрд░рд╛рд╡рд░ рдХреЛрдгрддреЗрд╣реА рдереЗрдВрдм рдирд╛рд╣реАрдд. рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдХрд┐рдВрд╡рд╛ "рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдЖрдд" - рдереЗрдВрдм рдХреЛрдареЗ рдЖрд▓реЗ рдпрд╛рдЪрд╛ рдирдВрддрд░ рдЕрдВрджрд╛рдЬ рди рдпреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреБрдореНрд╣реА ethtool -S ethX рдХрдорд╛рдВрдбрд╕рд╣ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рд╕реНрддрд░рд╛рд╡рд░ рдереЗрдВрдм рддрдкрд╛рд╕реВ рд╢рдХрддрд╛, рддреНрдпрд╛рдЪ ethtool рджреНрд╡рд╛рд░реЗ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗрд▓реЗ рдЬрд╛рддреЗ (рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рддреБрдореНрд╣рд╛рд▓рд╛ RX рдмрдлрд░ (-G) рд╡рд╛рдврд╡рдгреЗ рдЖрдгрд┐ рдХрд╛рд╣реА рд╡реЗрд│рд╛ рдХрд╛рд╣реА рдСрдлрд▓реЛрдб (-K) рдЕрдХреНрд╖рдо рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ). рд╕рд╛рдорд╛рдиреНрдп рд╢рд┐рдлрд╛рд░рд╕ рдореНрд╣рдгреВрди, рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдд рд░рд╣рджрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рдкреЛрд░реНрдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджрд┐рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рд╢рдХреНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рдЗрддрд░ рд░рд╣рджрд╛рд░реАрдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдореБрд│реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреЛрд░реНрдЯрд╡рд░ рдбреНрд░реЙрдк рдиреЗрдордХреЗ рдЭрд╛рд▓реЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЦреЛрдЯреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХрдореА рдХрд░рддреЗ. рд╣реЗ рд╢рдХреНрдп рдирд╕рд▓реНрдпрд╛рд╕ (рдПрдХрд╛ рдкреЛрд░реНрдЯрд╕рд╣ рдПрдХ рдорд┐рдиреА-рд╕рдВрдЧрдгрдХ/NUC рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ), рдирдВрддрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░ рдЙрд░реНрд╡рд░рд┐рдд рдЯреНрд░реЕрдлрд┐рдХрдЪреНрдпрд╛ рд╕рдВрдмрдВрдзрд╛рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗрд▓реЗрд▓реНрдпрд╛ рд░рд╣рджрд╛рд░реАрдЪреЗ рдкреНрд░рд╛рдзрд╛рдиреНрдп рд╕реЗрдЯ рдХрд░рдгреЗ рдЕрддреНрдпрдВрдд рдЗрд╖реНрдЯ рдЖрд╣реЗ. рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдмрд╛рдмрдд, рдпреЗрдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рд╡рдзрдЧрд┐рд░реА рдмрд╛рд│рдЧрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдлрд┐рдЬрд┐рдХрд▓ рдкреЛрд░реНрдЯрдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд░реЗ рдЖрдгрд┐ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдордзреАрд▓ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрдгрд╛рд░реЗ рдкреЕрдХреЗрдЯ рдбреНрд░реЙрдкреНрд╕ рд╢реЛрдзрдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдпрдЬрдорд╛рдирд╛рдЪреНрдпрд╛ рдЖрдд рдкреНрд░рд╡рд╛рд╣рд╛рдЪреА рдирд┐рд░реНрдорд┐рддреА рдЖрдгрд┐ рд░рд┐рд╕реЗрдкреНрд╢рди

TSDuck рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА netns рд╡рд╛рдкрд░реВрди рдПрдХрд╛рдЪ рд╣реЛрд╕реНрдЯрдордзреНрдпреЗ рд░рд╣рджрд╛рд░реА рдирд┐рд░реНрдорд╛рдг рдХрд░реВ рдЖрдгрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реВ.

рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░рдгреЗ:

ip netns add P #╤Б╨╛╨╖╨┤╨░╤С╨╝ netns P, ╨▓ ╨╜╤С╨╝ ╨▒╤Г╨┤╨╡╤В ╨┐╤А╨╛╨╕╤Б╤Е╨╛╨┤╨╕╤В╤М ╨░╨╜╨░╨╗╨╕╨╖ ╤В╤А╨░╤Д╨╕╨║╨░
ip link add type veth #╤Б╨╛╨╖╨┤╨░╤С╨╝ veth-╨┐╨░╤А╤Г - veth0 ╨╛╤Б╤В╨░╨▓╨╗╤П╨╡╨╝ ╨▓ netns ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О (╨▓ ╤Н╤В╨╛╤В ╨╕╨╜╤В╨╡╤А╤Д╨╡╨╣╤Б ╨▒╤Г╨┤╨╡╤В ╨│╨╡╨╜╨╡╤А╨╕╤А╨╛╨▓╨░╤В╤М╤Б╤П ╤В╤А╨░╤Д╨╕╨║)
ip link set dev veth1 netns P #veth1 - ╨┐╨╛╨╝╨╡╤Й╨░╨╡╨╝ ╨▓ netns P (╨╜╨░ ╤Н╤В╨╛╨╝ ╨╕╨╜╤В╨╡╤А╤Д╨╡╨╣╤Б╨╡ ╨▒╤Г╨┤╨╡╤В ╨┐╤А╨╕╤С╨╝ ╤В╤А╨░╤Д╨╕╨║╨░)
ip netns exec P ifconfig veth1 192.0.2.1/30 up #╨┐╨╛╨┤╨╜╨╕╨╝╨░╨╡╨╝ IP ╨╜╨░ veth1, ╨╜╨╡ ╨╕╨╝╨╡╨╡╤В ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П ╨║╨░╨║╨╛╨╣ ╨╕╨╝╨╡╨╜╨╜╨╛
ip netns exec P ip ro add default via 192.0.2.2 #╨╜╨░╤Б╤В╤А╨░╨╕╨▓╨░╨╡╨╝ ╨╝╨░╤А╤И╤А╤Г╤В ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О ╨▓╨╜╤Г╤В╤А╨╕ nents P
sysctl net.ipv6.conf.veth0.disable_ipv6=1 #╨╛╤В╨║╨╗╤О╤З╨░╨╡╨╝ IPv6 ╨╜╨░ veth0 - ╤Н╤В╨╛ ╨┤╨╡╨╗╨░╨╡╤В╤Б╤П ╨┤╨╗╤П ╤В╨╛╨│╨╛, ╤З╤В╨╛╨▒╤Л ╨▓ ╤Б╤З╤С╤В╤З╨╕╨║ TX ╨╜╨╡ ╨┐╨╛╨┐╨░╨┤╨░╨╗ ╨┐╨╛╤Б╤В╨╛╤А╨╛╨╜╨╜╨╕╨╣ ╨╝╤Г╤Б╨╛╤А
ifconfig veth0 up #╨┐╨╛╨┤╨╜╨╕╨╝╨░╨╡╨╝ ╨╕╨╜╤В╨╡╤А╤Д╨╡╨╣╤Б veth0
ip route add 239.0.0.1 dev veth0 #╤Б╨╛╨╖╨┤╨░╤С╨╝ ╨╝╨░╤А╤И╤А╤Г╤В, ╤З╤В╨╛╨▒╤Л ╨Ю╨б ╨╜╨░╨┐╤А╨░╨▓╨╗╤П╨╗╨░ ╤В╤А╨░╤Д╨╕╨║ ╨║ 239.0.0.1 ╨▓ ╤Б╤В╨╛╤А╨╛╨╜╤Г veth0

рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдЖрд╣реЗ. рдЖрдореНрд╣реА рд╡рд╛рд╣рддреВрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реБрд░реВ рдХрд░рддреЛ:

ip netns exec P tsp --realtime -t 
 -I ip 239.0.0.1:1234 
 -P continuity 
 -P bitrate_monitor -p 1 -t 1 
 -O drop

рдЬрд┐рдереЗ "-p 1 -t 1" рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХрдВрджрд╛рд▓рд╛ рдмрд┐рдЯрд░реЗрдЯрдЪреА рдЧрдгрдирд╛ рдХрд░рдгреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХрдВрджрд╛рд▓рд╛ рдмрд┐рдЯрд░реЗрдЯрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рдЖрдореНрд╣реА рдЯреНрд░реЕрдлрд┐рдХ рдЬрдирд░реЗрдЯрд░ 10Mbps рдЪреНрдпрд╛ рдЧрддреАрдиреЗ рд╕реБрд░реВ рдХрд░рддреЛ:

tsp -I craft 
 -P regulate -b 10000000 
 -O ip -p 7 -e --local-port 6000 239.0.0.1:1234

рдЬреЗрдереЗ "-p 7 -e" рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ 7 TS рдкреЕрдХреЗрдЯ 1 IP рдкреЕрдХреЗрдЯрдордзреНрдпреЗ рдкреЕрдХ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдХрдареЛрд░рдкрдгреЗ (-e), рдЙрджрд╛. IP рдкреЕрдХреЗрдЯ рдкрд╛рдард╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдиреЗрд╣рдореА рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░рдЪреНрдпрд╛ 7 TS рдкреЕрдХреЗрдЯрдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛.

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЛ:

* 2020/01/03 14:55:44 - bitrate_monitor: 2020/01/03 14:55:44, TS bitrate: 9,970,016 bits/s
* 2020/01/03 14:55:45 - bitrate_monitor: 2020/01/03 14:55:45, TS bitrate: 10,022,656 bits/s
* 2020/01/03 14:55:46 - bitrate_monitor: 2020/01/03 14:55:46, TS bitrate: 9,980,544 bits/s

рдЖрддрд╛ рдХрд╛рд╣реА рдереЗрдВрдм рдШрд╛рд▓рд╛:

ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP

рдЖрдгрд┐ рдЕрд╕реЗ рд╕рдВрджреЗрд╢ рджрд┐рд╕рддрд╛рдд:

* 2020/01/03 14:57:11 - continuity: packet index: 80,745, PID: 0x0000, missing 7 packets
* 2020/01/03 14:57:11 - continuity: packet index: 83,342, PID: 0x0000, missing 7 packets 

рдЬреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрд╣реЗ. рдкреЕрдХреЗрдЯ рд▓реЙрд╕ рдЕрдХреНрд╖рдо рдХрд░рд╛ (ip netns exec P iptables -F) рдЖрдгрд┐ рдЬрдирд░реЗрдЯрд░ рдмрд┐рдЯрд░реЗрдЯ 100Mbps рдкрд░реНрдпрдВрдд рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛. рд╡рд┐рд╢реНрд▓реЗрд╖рдХ CC рддреНрд░реБрдЯреАрдВрдЪрд╛ рдПрдХ рд╕рдореВрд╣ рдЖрдгрд┐ 75 рдРрд╡рдЬреА рд╕реБрдорд╛рд░реЗ 100 Mbps рдиреЛрдВрджрд╡рддреЛ. рдЖрдореНрд╣реА рджреЛрд╖ рдХреЛрдгрд╛рд▓рд╛ рджреНрдпрд╛рдпрдЪрд╛ рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЛрдд - рдЬрдирд░реЗрдЯрд░рд▓рд╛ рд╡реЗрд│ рдирд╛рд╣реА рдХрд┐рдВрд╡рд╛ рд╕рдорд╕реНрдпрд╛ рддреНрдпрд╛рдд рдирд╛рд╣реА, рдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реБрд░реВ рдХрд░рддреЛ. рдкреЕрдХреЗрдЯреНрд╕ (700000 TS рдкреЕрдХреЗрдЯреНрд╕ = 100000 IP рдкреЕрдХреЗрдЯ):

# ifconfig veth0 | grep TX
       TX packets 151825460  bytes 205725459268 (191.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# tsp -I craft -c 700000 -P regulate -b 100000000 -P count -O ip -p 7 -e --local-port 6000 239.0.0.1:1234
* count: PID    0 (0x0000):    700,000 packets
# ifconfig veth0 | grep TX
        TX packets 151925460  bytes 205861259268 (191.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЕрдЧрджреА 100000 IP рдкреЕрдХреЗрдЯреНрд╕ рд╡реНрдпреБрддреНрдкрдиреНрди рдЭрд╛рд▓реЗ (151925460-151825460). рдЪрд▓рд╛ рддрд░ рдордЧ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рд╕реЛрдмрдд рдХрд╛рдп рдШрдбрдд рдЖрд╣реЗ рддреЗ рд╢реЛрдзреВрди рдХрд╛рдвреВрдпрд╛, рдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА veth1 рд╡рд░реАрд▓ RX рдХрд╛рдЙрдВрдЯрд░ рддрдкрд╛рд╕рддреЛ, рддреЗ veth0 рд╡рд░реАрд▓ TX рдХрд╛рдЙрдВрдЯрд░рдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪреЗ рдЖрд╣реЗ, рдордЧ рд╕реЙрдХреЗрдЯ рд╕реНрддрд░рд╛рд╡рд░ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдЖрдкрдг рдкрд╛рд╣реВ:

# ip netns exec P cat /proc/net/udp                                                                                                           
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops             
  133: 010000EF:04D2 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 72338 2 00000000e0a441df 24355 

рдпреЗрдереЗ рддреБрдореНрд╣реА рдереЗрдВрдмрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ = 24355 рдкрд╛рд╣реВ рд╢рдХрддрд╛. TS рдкреЕрдХреЗрдЯреНрд╕рдордзреНрдпреЗ, рд╣реЗ 170485 рдЪреНрдпрд╛ 24.36 рдХрд┐рдВрд╡рд╛ 700000% рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА рддреЗрдЪ 25% рдЧрдорд╛рд╡рд▓реЗрд▓реЗ рдмрд┐рдЯрд░реЗрдЯ udp рд╕реЙрдХреЗрдЯрдордзреАрд▓ рдереЗрдВрдм рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдкрд╛рд╣рддреЛ. UDP рд╕реЙрдХреЗрдЯрдордзреАрд▓ рдереЗрдВрдм рд╕рд╣рд╕рд╛ рдмрдлрд░рдЪреНрдпрд╛ рдХрдорддрд░рддреЗрдореБрд│реЗ рдЙрджреНрднрд╡рддрд╛рдд, рдбреАрдлреЙрд▓реНрдЯ рд╕реЙрдХреЗрдЯ рдмрдлрд░ рдЖрдХрд╛рд░ рдЖрдгрд┐ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд╕реЙрдХреЗрдЯ рдмрдлрд░ рдЖрдХрд╛рд░ рдкрд╣рд╛:

# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЬрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдмрдлрд░ рдЖрдХрд╛рд░рд╛рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдд рдирд╕рддреАрд▓, рддрд░ 208 KB рдЪреНрдпрд╛ рдмрдлрд░рд╕рд╣ рд╕реЙрдХреЗрдЯ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдиреА рдЕрдзрд┐рдХ рд╡рд┐рдирдВрддреА рдХреЗрд▓реНрдпрд╛рд╕, рддреНрдпрд╛рдВрдирд╛ рд╡рд┐рдирдВрддреА рдХреЗрд▓реЗрд▓реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА. рддреБрдореНрд╣реА IP рдЗрдирдкреБрдЯ (-buffer-size) рд╕рд╛рдареА tsp рдордзреНрдпреЗ рдмрдлрд░ рдЖрдХрд╛рд░ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рдбреАрдлреЙрд▓реНрдЯ рд╕реЙрдХреЗрдЯ рдЖрдХрд╛рд░рд╛рд▓рд╛ рд╕реНрдкрд░реНрд╢ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдлрдХреНрдд рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд╕реЙрдХреЗрдЯ рдмрдлрд░ рдЖрдХрд╛рд░ рд╕реЗрдЯ рдХрд░реВ рдЖрдгрд┐ tsp рд╡рд┐рддрд░реНрдХрд╛рдВрджреНрд╡рд╛рд░реЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдмрдлрд░ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ:

sysctl net.core.rmem_max=8388608
ip netns exec P tsp --realtime -t -I ip 239.0.0.1:1234 -b 8388608 -P continuity -P bitrate_monitor -p 1 -t 1 -O drop

рд╕реЙрдХреЗрдЯ рдмрдлрд░рдЪреНрдпрд╛ рдпрд╛ рдЯреНрдпреВрдирд┐рдВрдЧрд╕рд╣, рдЖрддрд╛ рдиреЛрдВрджрд╡рд▓реЗрд▓рд╛ рдмрд┐рдЯрд░реЗрдЯ рд╕реБрдорд╛рд░реЗ 100Mbps рдЖрд╣реЗ, CC рддреНрд░реБрдЯреА рдирд╛рд╣реАрдд.

рдЯреАрд╕реНрдкреА рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ CPU рд╡рд╛рдкрд░рд╛рдиреБрд╕рд╛рд░. рдПрдХрд╛ рдХреЛрд░ i5-4260U CPU @ 1.40GHz рдЪреНрдпрд╛ рд╕рд╛рдкреЗрдХреНрд╖, 10Mbps рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА 3-4% CPU, 100Mbps - 25%, 200Mbps - 46% рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓. % рдкреЕрдХреЗрдЯ рд▓реЙрд╕ рд╕реЗрдЯ рдХрд░рддрд╛рдирд╛, рд╕реАрдкреАрдпреВрд╡рд░реАрд▓ рднрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрд░рд┐рддреНрдпрд╛ рд╡рд╛рдврдд рдирд╛рд╣реА (рдкрд░рдВрддреБ рдХрдореА рд╣реЛрдК рд╢рдХрддреЛ).

рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдирдХреНрд╖рдо рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рд╡рд░, рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдорд╕реНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп 1Gb/s рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдкреНрд░рд╡рд╛рд╣ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ.

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдбреНрд╕рд╡рд░ рдЪрд╛рдЪрдгреА

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

рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорджреНрд╡рд╛рд░реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд░рдгреЗ (Zabbix)

tsp рдордзреНрдпреЗ SNMP рдХрд┐рдВрд╡рд╛ рддрддреНрд╕рдо рдХреЛрдгрддреЗрд╣реА рдорд╢реАрди-рд╡рд╛рдЪрдиреАрдп API рдирд╛рд╣реА. CC рд╕рдВрджреЗрд╢ рдХрд┐рдорд╛рди 1 рд╕реЗрдХрдВрджрд╛рд╕рд╛рдареА рдПрдХрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рдкреЕрдХреЗрдЯ рдЧрдорд╛рд╡рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрдЪреНрдЪ рдЯрдХреНрдХреЗрд╡рд╛рд░реАрд╕рд╣, рдмрд┐рдЯрд░реЗрдЯрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдж рд╢реЗрдХрдбреЛ/рд╣рдЬрд╛рд░/рджрд╣рд╛ рд╣рдЬрд╛рд░ рдЕрд╕реВ рд╢рдХрддрд╛рдд).

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рджреЛрдиреНрд╣реА рдорд╛рд╣рд┐рддреА рдЬрддрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ CC рддреНрд░реБрдЯреА рдЖрдгрд┐ рдмрд┐рдЯрд░реЗрдЯрд╕рд╛рдареА рдЖрд▓реЗрдЦ рдХрд╛рдврдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рдЕрдкрдШрд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЦрд╛рд▓реАрд▓ рдкрд░реНрдпрд╛рдп рдЕрд╕реВ рд╢рдХрддрд╛рдд:

  1. tsp рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рд░реНрд╕ рдЖрдгрд┐ рдПрдХрддреНрд░рд┐рдд рдХрд░рд╛ (CC рджреНрд╡рд╛рд░реЗ), рдЙрджрд╛. рдЗрдЪреНрдЫрд┐рдд рдлреЙрд░реНрдордордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛.
  2. tsp рд╕реНрд╡рддрдГ рдЖрдгрд┐/рдХрд┐рдВрд╡рд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ bitrate_monitor рдЖрдгрд┐ рд╕рд╛рддрддреНрдп рдкреВрд░реНрдг рдХрд░рд╛ рдЬреЗрдгреЗрдХрд░реВрди рдкрд░рд┐рдгрд╛рдо рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рдпреЛрдЧреНрдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдорд╢реАрди-рд╡рд╛рдЪрдиреАрдп рд╕реНрд╡рд░реВрдкрд╛рдд рджрд┐рд▓рд╛ рдЬрд╛рдИрд▓.
  3. рддреБрдордЪрд╛ рдЕрд░реНрдЬ tsduck рд▓рд╛рдпрдмреНрд░рд░реАрдЪреНрдпрд╛ рд╡рд░ рд▓рд┐рд╣рд╛.

рдЕрд░реНрдерд╛рдд, рдкреНрд░рдпрддреНрдирд╛рдВрдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ рдкрд░реНрдпрд╛рдп 1 рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдЖрд╣реЗ, рд╡рд┐рд╢реЗрд╖рдд: tsduck рд╕реНрд╡рддрдГ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп (рдЖрдзреБрдирд┐рдХ рдорд╛рдирдХрд╛рдВрдиреБрд╕рд╛рд░) рднрд╛рд╖реЗрдд (C ++) рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛.

рдПрдХрд╛ рд╕рд╛рдзреНрдпрд╛ рдмреЕрд╢ рдкрд╛рд░реНрд╕рд░+рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрдиреЗ рджрд╛рдЦрд╡рд▓реЗ рдХреА 10Mbps рдкреНрд░рд╡рд╛рд╣ рдЖрдгрд┐ 50% рдкреЕрдХреЗрдЯ рд▓реЙрд╕ (рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдХреЗрд╕) рд╡рд░, рдмреЕрд╢ рдкреНрд░рдХреНрд░рд┐рдпреЗрдиреЗ tsp рдкреНрд░рдХреНрд░рд┐рдпреЗрдкреЗрдХреНрд╖рд╛ 3-4 рдкрдЯ рдЬрд╛рд╕реНрдд CPU рд╡рд╛рдкрд░рд▓реЗ. рд╣реЗ рджреГрд╢реНрдп рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрд╣реЗ. рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЦрд╛рд▓реА рдпрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрдЪрд╛ рдПрдХ рддреБрдХрдбрд╛

рд╡рд░ рдиреВрдбрд▓реНрд╕

#!/usr/bin/env bash

missingPackets=0
ccErrorSeconds=0
regexMissPackets='^* (.+) - continuity:.*missing ([0-9]+) packets$'
missingPacketsTime=""

ip netns exec P tsp --realtime -t -I ip -b 8388608 "239.0.0.1:1234" -O drop -P bitrate_monitor -p 1 -t 1  -P continuity 2>&1 | 
while read i
do
    #line example:* 2019/12/28 23:41:14 - continuity: packet index: 6,078, PID: 0x0100, missing 5 packets
    #line example 2: * 2019/12/28 23:55:11 - bitrate_monitor: 2019/12/28 23:55:11, TS bitrate: 4,272,864 bits/s
    if [[ "$i" == *continuity:* ]] 
    then
        if [[ "$i" =~ $regexMissPackets ]]
        then
            missingPacketsTimeNew="${BASH_REMATCH[1]}" #timestamp (seconds)
            if [[ "$missingPacketsTime" != "$missingPacketsTimeNew" ]] #new second with CC error
            then
                ((ccErrorSeconds += 1))
            fi
            missingPacketsTime=$missingPacketsTimeNew
            packets=${BASH_REMATCH[2]} #TS missing packets
            ((missingPackets += packets))
        fi
    elif [[ "$i" == *bitrate_monitor:* ]]
    then
        : #...
    fi
done

рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдпрдкрдгреЗ рдордВрдж рдЕрд╕рдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдмреЕрд╢рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рд╕рд╛рдорд╛рдиреНрдп рдереНрд░реЗрдб рдирд╛рд╣реАрдд, рдмреЕрд╢ рдЬреЙрдм рд╣реА рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдорд▓рд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯрд╡рд░ (рджрд░ рд╕реЗрдХрдВрджрд╛рд▓рд╛ рдпреЗрдгрд╛рд░реЗ рдмрд┐рдЯрд░реЗрдЯ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛рдирд╛) рд╕реЗрдХрдВрджрд╛рдд рдПрдХрджрд╛ missingPackets рдЪреЗ рдореВрд▓реНрдп рд▓рд┐рд╣рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ. рдкрд░рд┐рдгрд╛рдореА, рдмрд╛рд╢ рдПрдХрдЯрд╛рдЪ рд░рд╛рд╣рд┐рд▓рд╛ рдЖрдгрд┐ рдЧреЛрд▓рдВрдЧрдордзреНрдпреЗ рд░реЕрдкрд░ (рдкрд╛рд░реНрд╕рд░ + рдПрдЧреНрд░реАрдЧреЗрдЯрд░) рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрдгреНрдпрд╛рдд рдЖрд▓рд╛. рд╕рдорд╛рди рдЧреЛрд▓рд╛рдВрдЧ рдХреЛрдбрдЪрд╛ CPU рд╡рд╛рдкрд░ рдЯреАрд╕реНрдкреВрди рдкреНрд░рдХреНрд░рд┐рдпреЗрдкреЗрдХреНрд╖рд╛ 4-5 рдкрдЯ рдХрдореА рдЖрд╣реЗ. рдЧреЛрд▓рдВрдЧрд╕рд╣ рдмреЕрд╢ рдмрджрд▓рд▓реНрдпрд╛рдореБрд│реЗ рд░реЕрдкрд░рдЪреА рдЧрддреА рд╕реБрдорд╛рд░реЗ 16 рдкрдЯ рдЭрд╛рд▓реА рдЖрдгрд┐ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрд╣реЗ (рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рд╕реАрдкреАрдпреВ рдУрд╡реНрд╣рд░рд╣реЗрдб 25% рдиреЗ). рдЧреЛрд▓рдВрдЧ рд╕реНрддреНрд░реЛрдд рдлрд╛рдЗрд▓ рд╕реНрдерд┐рдд рдЖрд╣реЗ рдпреЗрдереЗ.

рд░реЕрдкрд░ рдЪрд╛рд▓рд╡рд╛

рд░реЕрдкрд░ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, systemd рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╡рд▓рд╛ рд╣реЛрддрд╛ (рдпреЗрдереЗ). рд░реЕрдкрд░ рд╕реНрд╡рддрдГрдЪ /opt/tsduck-stat/ рдордзреНрдпреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдмрд╛рдпрдирд░реА рдлрд╛рдЗрд▓ (go build tsduck-stat.go) рдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрд╣реЗ. рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рд▓реЗ рдЬрд╛рддреЗ рдХреА рддреБрдореНрд╣реА рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдШрдбреНрдпрд╛рд│ (>=1.9) рдЪреНрдпрд╛ рд╕рдорд░реНрдердирд╛рд╕рд╣ рдЧреЛрд▓рдВрдЧ рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд.

рд╕реЗрд╡реЗрдЪреЗ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ systemctl enable рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛рд╡реА рд▓рд╛рдЧреЗрд▓ [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд]:1234 рдирдВрддрд░ systemctl start рд╕рд╣ рдЪрд╛рд▓рд╡рд╛ [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд]: 1234

Zabbix рдХрдбреВрди рд╢реЛрдз

zabbix рд╕рд╛рдареА рдЪрд╛рд▓реВ рд╕реЗрд╡рд╛ рд╢реЛрдзрдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рддреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЧрдЯ рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ (discovery.sh), Zabbix рд╢реЛрдзрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ, рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рд▓реЗ рдЬрд╛рддреЗ рдХреА рддреЗ рддреНрдпрд╛рдЪ рдард┐рдХрд╛рдгреА рдЖрд╣реЗ - /opt/tsduck-stat рдордзреНрдпреЗ. zabbix-agent рджреНрд╡рд╛рд░реЗ рд╢реЛрдз рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ .conf рдлрд╛рдЗрд▓ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА zabbix-рдПрдЬрдВрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд.

Zabbix рдЯреЗрдореНрдкрд▓реЗрдЯ

рдЯреЗрдореНрдкрд▓реЗрдЯ рддрдпрд╛рд░ рдХреЗрд▓реЗ (tsduck_stat_template.xml) рдордзреНрдпреЗ рдСрдЯреЛрдбрд┐рд╕реНрдХрд╡реНрд╣рд░ рдирд┐рдпрдо, рдЖрдпрдЯрдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдЖрд▓реЗрдЦ рдЖрдгрд┐ рдЯреНрд░рд┐рдЧрд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд.

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЪреЗрдХрд▓рд┐рд╕реНрдЯ (рдЪрд╛рдВрдЧрд▓реЗ, рдЬрд░ рдХреЛрдгреА рддреЗ рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рдард░рд╡рд▓реЗ рддрд░ рдХрд╛рдп рд╣реЛрдИрд▓)

  1. рдЯреАрдПрд╕рдкреА "рдЖрджрд░реНрд╢" рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдкреЕрдХреЗрдЯ рд╕реЛрдбрдд рдирд╛рд╣реА рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛ (рдЬрдирд░реЗрдЯрд░ рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдереЗрдЯ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗрдд), рдереЗрдВрдм рдЕрд╕рд▓реНрдпрд╛рд╕, рдкрд░рд┐рдЪреНрдЫреЗрдж 2 рдХрд┐рдВрд╡рд╛ рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд▓реЗрдЦрд╛рдЪрд╛ рдордЬрдХреВрд░ рдкрд╣рд╛.
  2. рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд╕реЙрдХреЗрдЯ рдмрдлрд░ рдЯреНрдпреВрдирд┐рдВрдЧ рдХрд░рд╛ (net.core.rmem_max=8388608).
  3. tsduck-stat.go рд╕рдВрдХрд▓рд┐рдд рдХрд░рд╛ (tsduck-stat.go рддрдпрд╛рд░ рдХрд░рд╛).
  4. рд╕реЗрд╡рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ /lib/systemd/system рдордзреНрдпреЗ рдареЗрд╡рд╛.
  5. systemctl рд╕рд╣ рд╕реЗрд╡рд╛ рд╕реБрд░реВ рдХрд░рд╛, рдХрд╛рдЙрдВрдЯрд░ рджрд┐рд╕рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдЭрд╛рд▓реА рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рд╛ (grep "" /dev/shm/tsduck-stat/*). рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреБрд╕рд╛рд░ рд╕реЗрд╡рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛. рдпреЗрдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рдЧрдЯрд╛рд╕рд╛рдареА рдорд╛рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реВ рд╢рдХрддреЗ, рдХрджрд╛рдЪрд┐рдд rp_filter рдЕрдХреНрд╖рдо рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ рд╕реНрддреНрд░реЛрдд ip рд╕рд╛рдареА рдорд╛рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рд╛.
  6. Discovery.sh рдЪрд╛рд▓рд╡рд╛, рддреЗ json рдЬрдирд░реЗрдЯ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛.
  7. zabbix рдПрдЬрдВрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╛, zabbix рдПрдЬрдВрдЯ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рд╛.
  8. zabbix рд╡рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдкрд▓реЛрдб рдХрд░рд╛, рджреЗрдЦрд░реЗрдЦ рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╣реЛрд╕реНрдЯрд╡рд░ рддреЗ рд▓рд╛рдЧреВ рдХрд░рд╛ рдЖрдгрд┐ zabbix-рдПрдЬрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ, рд╕реБрдорд╛рд░реЗ 5 рдорд┐рдирд┐рдЯреЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛, рдирд╡реАрди рдЖрдпрдЯрдо, рдЖрд▓реЗрдЦ рдЖрдгрд┐ рдЯреНрд░рд┐рдЧрд░ рдЖрд╣реЗрдд рдХрд╛ рддреЗ рдкрд╣рд╛.

рдкрд░рд┐рдгрд╛рдо

IP(TS) рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА TSDuck рд╡рд╛рдкрд░рдгреЗ

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

рдЦрд░рдВрдЪ, рд╡реНрд╣рд┐рдбрд┐рдУ рддреБрдХрдбреНрдпрд╛рдВрдЪреЗ рд╡рд┐рд▓реАрдиреАрдХрд░рдг рдХрд░рддрд╛рдирд╛ рд╕реАрд╕реА "рдиреБрдХрд╕рд╛рди" рд╣реЛрдК рд╢рдХрддреЗ (рдорд╛рдЭреНрдпрд╛ рдорд╛рд╣рд┐рддреАрдиреБрд╕рд╛рд░, рд░рд╢рд┐рдпрди рдлреЗрдбрд░реЗрд╢рдирдордзреАрд▓ рд╕реНрдерд╛рдирд┐рдХ рдЯреАрд╡реНрд╣реА рдХреЗрдВрджреНрд░рд╛рдВрд╡рд░ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЗрдиреНрд╕рд░реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдореНрд╣рдгрдЬреЗ рд╕реАрд╕реА рдХрд╛рдЙрдВрдЯрд░рдЪреА рдкреБрдирд░реНрдЧрдгрдирд╛ рди рдХрд░рддрд╛), рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. SCTE-35 рд▓реЗрдмрд▓реЗ рд╢реЛрдзреВрди (рд╕реНрдЯреНрд░реАрдо рдЬрдирд░реЗрдЯрд░рдиреЗ рдЬреЛрдбрд▓реНрдпрд╛рд╕) рдкреНрд░реЛрдкреНрд░рд╛рдпрдЯрд░реА рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕ рдЕрдВрд╢рддрдГ рдпрд╛ рд╕рдорд╕реНрдпреЗрд▓рд╛ рджреВрд░ рдХрд░рддрд╛рдд.

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

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

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