IP(TS) рдкреНрд░рд╡рд╛рд╣рд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди TSDuck рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдЖрдЬ, рдЖрдИрдкреА(рдЯреАрдПрд╕) рдкреНрд░рд╡рд╛рд╣рд╣рд░реВ рдЕрдиреБрдЧрдорди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ (рд╕реНрд╡рд╛рдорд┐рддреНрд╡) рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдЫрдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ VB ╨╕ iQ, рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдПрдХрджрдо рд╕рдореГрджреНрдз рд╕реЗрдЯ рдЫ рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдареВрд▓рд╛ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ TV рд╕реЗрд╡рд╛рд╣рд░реВрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗ рд╕рдорд╛рди рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдЫрдиреНред рдпрд╕ рд▓реЗрдЦрд▓реЗ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рдирдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫ TSDuckCC (рдирд┐рд░рдиреНрддрд░рддрд╛ рдХрд╛рдЙрдиреНрдЯрд░) рдХрд╛рдЙрдиреНрдЯрд░ рд░ рдмрд┐рдЯрд░реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ IP(TS) рдкреНрд░рд╡рд╛рд╣рд╣рд░реВрдХреЛ рдиреНрдпреВрдирддрдо рдирд┐рдпрдиреНрддреНрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛред рдПрдХ рд╕рдореНрднрд╛рд╡рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рднрд╛рдбрд╛рдорд╛ рд▓рд┐рдЗрдПрдХреЛ L2 рдЪреНрдпрд╛рдирд▓ (рдЬрд╕рд▓рд╛рдИ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдЕрдиреБрдЧрдорди рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд▓рд╛рдордорд╛ рд╣рд╛рдирд┐ рдХрд╛рдЙрдиреНрдЯрд░рд╣рд░реВ рдкрдвреЗрд░) рдорд╛рд░реНрдлрдд рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рд╣рд╛рдирд┐ рд╡рд╛ рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рд╡рд╛рд╣рдХреЛ рдЕрдиреБрдЧрдорди рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫред

TSDuck рдХреЛ рдмрд╛рд░реЗрдорд╛ рдзреЗрд░реИ рдЫреЛрдЯрдХрд░реАрдорд╛

TSDuck рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд (2-Clause BSD рд▓рд╛рдЗрд╕реЗрдиреНрд╕) рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╣реЛ (рдХрдиреНрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ рд░ рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╡рд╛ рдкреНрд▓рдЧрдЗрдирд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп) TS рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ рд╣реЗрд░рдлреЗрд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ред рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛, рдпрд╕рд▓реЗ IP (multicast/unicast), http, hls, dvb рдЯреНрдпреБрдирд░рд╣рд░реВ, dektec dvb-asi demodulator рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдЫ, рддреНрдпрд╣рд╛рдБ рдЖрдиреНрддрд░рд┐рдХ TS рд╕реНрдЯреНрд░рд┐рдо рдЬрдирд░реЗрдЯрд░ рдЫ рд░ рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рдкрдвреНрдиреЗред рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓, IP (multicast/unicast), hls, dektec dvb-asi рд░ HiDes рдореЛрдбреНрдпреБрд▓реЗрдЯрд░рд╣рд░реВ, рдкреНрд▓реЗрдпрд░рд╣рд░реВ (mplayer, vlc, xine) рд░ рдбреНрд░рдкрдорд╛ рд░реЗрдХрд░реНрдбрд┐рдЩ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЗрдирдкреБрдЯ рд░ рдЖрдЙрдЯрдкреБрдЯрдХреЛ рдмреАрдЪрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдЯреНрд░рд╛рдлрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░рд╣рд░реВ рд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, PID рд╣рд░реВ рдкреБрди: рдореНрдпрд╛рдк рдЧрд░реНрдиреЗ, рд╕реНрдХреНрд░реНрдпрд╛рдореНрдмрд▓рд┐рдЩ/рдбреЗрд╕реНрдХреНрдпрд╛рдореНрдмрд▓ рдЧрд░реНрдиреЗ, CC рдХрд╛рдЙрдиреНрдЯрд░рд╣рд░реВрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреЗ, рдмрд┐рдЯрд░реЗрдЯ рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рд░ TS рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╣рд░реВред

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

рдЙрдкрд▓рдмреНрдз рдЫ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд┐рд░реНрдорд╛рдг / рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕рдмреИрднрдиреНрджрд╛ рд╣рд╛рд▓рдХреЛ OS рдХреЛ рд▓рд╛рдЧрд┐ TSDuckред рддреНрдпрд╣рд╛рдБ рдбреЗрдмрд┐рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдкрдирд┐ рдЫреИрди, рддрд░ рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдбреЗрдмрд┐рдпрди 8 рд░ рдбреЗрдмрд┐рдпрди 10 рдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдкрдирд┐ рд╕рдорд╕реНрдпрд╛ рдмрд┐рдирд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдпреМрдВред

рдЕрд░реНрдХреЛ, TSDuck рд╕рдВрд╕реНрдХрд░рдг 3.19-1520 рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рд▓рд┐рдирдХреНрд╕ OS рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ (debian 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" рдХреЛ рдЕрд░реНрде рд╣реЛ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреЗрдиреНрдб рдмрд┐рдЯрд░реЗрдЯ рдЧрдгрдирд╛ рдЧрд░реНрди рд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреЗрдиреНрдб рдмрд┐рдЯрд░реЗрдЯ рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рд╣рд╛рдореА 10 Mbit/s рдХреЛ рдЧрддрд┐ рд╕рдВрдЧ рдЯреНрд░рд╛рдлрд┐рдХ рдЬреЗрдирд░реЗрдЯрд░ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ:

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) рд░ рдЬреЗрдиреЗрд░реЗрдЯрд░ рдмрд┐рдЯрд░реЗрдЯ 100 Mbit/s рдорд╛ рдмрдврд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд▓реЗ CC рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рдЧреБрдЪреНрдЫрд╛ рд░ 75 рдХреЛ рд╕рдЯреНрдЯрд╛ рд▓рдЧрднрдЧ 100 Mbit/s рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрджрдЫред рд╣рд╛рдореА рдХреЛ рджреЛрд╖ рдХреЛ рд╣реЛ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдХреЛрд╢рд┐рд╕ рдЧрд░реНрджреИрдЫреМрдВ - рдЬреЗрдиреЗрд░реЗрдЯрд░ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫреИрди рд╡рд╛ рд╕рдорд╕реНрдпрд╛ рдпрд╕рдорд╛ рдЫреИрди, рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЙрддреНрдкрд╛рджрди рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВред рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ (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 рдЖрдИрдкреА рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдЙрддреНрдкрдиреНрди рднрдПрдХрд╛ рдерд┐рдП (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% рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ UDP рд╕рдХреЗрдЯрдорд╛ рд╣рд░рд╛рдПрдХреЛ рдмрд┐рдЯрд░реЗрдЯрдХреЛ рдЙрд╣реА 25% рдбреНрд░рдк рднрдПрдХреЛ рджреЗрдЦреНрдЫреМрдВред UDP рд╕рдХреЗрдЯрдорд╛ рдбреНрд░рдк рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдмрдлрд░рдХреЛ рдХрдореАрдХреЛ рдХрд╛рд░рдгрд▓реЗ рд╣реБрдиреНрдЫ, рд╣реЗрд░реМрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдХреЗрдЯ рдмрдлрд░ рд╕рд╛рдЗрдЬ рд░ рдЕрдзрд┐рдХрддрдо рд╕рдХреЗрдЯ рдмрдлрд░ рд╕рд╛рдЗрдЬ рдХреЗ рд╣реЛ:

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

рдпрд╕рд░реА, рдпрджрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдмрдлрд░ рд╕рд╛рдЗрдЬ рдЕрдиреБрд░реЛрдз рдЧрд░реНрджреИрдирдиреН рднрдиреЗ, рд╕рдХреЗрдЯрд╣рд░реВ 208 KB рдмрдлрд░рд╕рдБрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫрдиреН, рддрд░ рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдердк рдЕрдиреБрд░реЛрдз рдЧрд░реНрдЫрдиреН рднрдиреЗ, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЕрдиреБрд░реЛрдз рдЧрд░реЗрдХреЛ рдХреБрд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИрдирдиреНред tsp рдорд╛ рддрдкрд╛рдИрдВрд▓реЗ IP рдЗрдирдкреБрдЯ (--buffer-size) рдХреЛ рд▓рд╛рдЧрд┐ рдмрдлрд░ рд╕рд╛рдЗрдЬ рд╕реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд╣рд╛рдореА рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдХреЗрдЯ рд╕рд╛рдЗрдЬ рдЫреБрдиреЗ рдЫреИрдиреМрдВ, рддрд░ рдЕрдзрд┐рдХрддрдо рд╕рдХреЗрдЯ рдмрдлрд░ рд╕рд╛рдЗрдЬ рдорд╛рддреНрд░ рд╕реЗрдЯ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ 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 рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЫреИрдирдиреНред

tsp рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ CPU рдЦрдкрдд рдорд╛ рдЖрдзрд╛рд░рд┐рддред рдПрдХ рдХреЛрд░ i5-4260U CPU @ 1.40GHz рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛, 10Mbit/s рдкреНрд░рд╡рд╛рд╣рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди, CPU рдХреЛ 3-4% рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫ, 100Mbit/s - 25%, 200Mbit/s - 46%ред % рдкреНрдпрд╛рдХреЗрдЯ рд╣рд╛рдирд┐ рд╕реЗрдЯ рдЧрд░реНрджрд╛, CPU рд▓реЛрдб рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдкрдорд╛ рдмрдвреНрджреИрди (рддрд░ рдШрдЯреНрди рд╕рдХреНрдЫ)ред

рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░рдорд╛, рдХреБрдиреИ рдкрдирд┐ рд╕рдорд╕реНрдпрд╛ рдмрд┐рдирд╛ 1Gb/s рднрдиреНрджрд╛ рдмрдвреА рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рд╕рдореНрднрд╡ рдерд┐рдпреЛред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдбрд╣рд░реВрдорд╛ рдкрд░реАрдХреНрд╖рдг

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

рдЕрдиреБрдЧрдорди рдкреНрд░рдгрд╛рд▓реА (Zabbix) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

tsp рд╕рдБрдЧ рдХреБрдиреИ рдкрдирд┐ рдореЗрд╕рд┐рди-рдкрдвреНрдиреЗ рдпреЛрдЧреНрдп API рдЬрд╕реНрддреИ SNMP рд╡рд╛ рд╕рдорд╛рди рдЫреИрдиред CC рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдПрдХ рдкрдЯрдХрдорд╛ рдХрдореНрддрд┐рдорд╛ 1 рд╕реЗрдХреЗрдиреНрдб рдЬрдореНрдорд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рдкреНрдпрд╛рдХреЗрдЯ рд╣рд╛рдирд┐рдХреЛ рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рд╢рддрдХреЛ рд╕рд╛рде, рдмрд┐рдЯрд░реЗрдЯрдХреЛ рдЖрдзрд╛рд░рдорд╛ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рд╕рдп/рд╣рдЬрд╛рд░/рджрд╢реМрдВ рд╣рдЬрд╛рд░ рд╣реБрди рд╕рдХреНрдЫ)ред

рддрд╕рд░реНрде, рдЬрд╛рдирдХрд╛рд░реА рдмрдЪрдд рдЧрд░реНрди рд░ CC рддреНрд░реБрдЯрд┐рд╣рд░реВ рд░ рдмрд┐рдЯрд░реЗрдЯрдХрд╛ рд▓рд╛рдЧрд┐ рдЧреНрд░рд╛рдлрд╣рд░реВ рдХреЛрд░реНрди рд░ рдХреЗрд╣реА рдкреНрд░рдХрд╛рд░рдХрд╛ рджреБрд░реНрдШрдЯрдирд╛рд╣рд░реВ рдердк рдЧрд░реНрди, рддреНрдпрд╣рд╛рдБ рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреН:

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

рдЬрд╛рд╣рд┐рд░ рдЫ, рд╢реНрд░рдо рд▓рд╛рдЧрддрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛, рд╡рд┐рдХрд▓реНрдк 1 рд╕рдмреИрднрдиреНрджрд╛ рд╕рд░рд▓ рд╣реЛ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА tsduck рдЖрдлреИрд▓рд╛рдИ рдирд┐рдореНрди-рд╕реНрддрд░ (рдЖрдзреБрдирд┐рдХ рдорд╛рдкрджрдгреНрдбрд╣рд░реВ рджреНрд╡рд╛рд░рд╛) рднрд╛рд╖рд╛ (C++) рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ рднрдиреЗрд░ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрджреИред

bash рдорд╛ рдкрд╛рд░реНрд╕рд░ + рдПрдЧреНрд░реАрдЧреЗрдЯрд░рдХреЛ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрд▓реЗ рджреЗрдЦрд╛рдПрдХреЛ рдЫ рдХрд┐ 10 Mbit/s рдХреЛ рдкреНрд░рд╡рд╛рд╣ рд░ 50% рдкреНрдпрд╛рдХреЗрдЯ рд╣рд╛рдирд┐ (рд╕рдмреИрднрдиреНрджрд╛ рдЦрд░рд╛рдм рдЕрд╡рд╕реНрдерд╛рдорд╛), bash рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ 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

рдпреЛ рдЕрд╕реНрд╡реАрдХреГрдд рд░реВрдкрдорд╛ рдмрд┐рд╕реНрддрд╛рд░реИ рдХрд╛рдо рдЧрд░реНрджрдЫ рднрдиреНрдиреЗ рддрдереНрдпрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, bash рдорд╛ рдХреБрдиреИ рд╕рд╛рдорд╛рдиреНрдп рдереНрд░реЗрдбрд╣рд░реВ рдЫреИрдирдиреН, bash рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реНрд╡рддрдиреНрддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╣реБрдиреН рд░ рдореИрд▓реЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯрдорд╛ рдПрдХ рд╕реЗрдХреЗрдиреНрдбрдорд╛ рдЫреБрдЯреЗрдХреЛ рдкреНрдпрд╛рдХреЗрдЯ рдорд╛рди рд▓реЗрдЦреНрдиреБрдкрд░реНрдереНрдпреЛ (рдЬрдм рдмрд┐рдЯрд░реЗрдЯ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреЗрдиреНрдбрдорд╛ рдЖрдЙрдБрдЫ)ред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдмрд╛рд╕ рдПрдХреНрд▓реИ рдЫреЛрдбрд┐рдпреЛ рд░ рдЧреЛрд▓рд╛рдЩрдорд╛ рд░реНрдпрд╛рдкрд░ (рдкрд╛рд░реНрд╕рд░ + рдПрдЧреНрд░реАрдЧреЗрдЯрд░) рд▓реЗрдЦреНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░рд┐рдпреЛред рдЧреЛрд▓рд╛рдЩрдорд╛ рд╕рдорд╛рди рдХреЛрдбрдХреЛ CPU рдЦрдкрдд tsp рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднрдиреНрджрд╛ 4-5 рдЧреБрдгрд╛ рдХрдо рдЫред рдЧреЛрд▓рд╛рдЩрд╕рдБрдЧ рдмреНрдпрд╛рд╢ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реЗрд░ рд░реНрдпрд╛рдкрд░рдХреЛ рдкреНрд░рд╡реЗрдЧ рд▓рдЧрднрдЧ 16 рдкрдЯрдХ рдерд┐рдпреЛ рд░ рд╕рдордЧреНрд░рдорд╛ рдирддрд┐рдЬрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЫ (рд╕рдмреИрднрдиреНрджрд╛ рдЦрд░рд╛рдм рдЕрд╡рд╕реНрдерд╛рдорд╛ 25% рджреНрд╡рд╛рд░рд╛ CPU рдУрднрд░рд╣реЗрдб)ред Golang рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓ рдЕрд╡рд╕реНрдерд┐рдд рдЫ рдпрд╣рд╛рдБ.

рд░реНрдпрд╛рдкрд░ рд╕реБрд░реБ рдЧрд░реНрджреИ

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

рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓реЗ systemctl рд╕рдХреНрд╖рдо рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ [рдИрдореЗрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд]:1234, рддреНрдпрд╕рдкрдЫрд┐ systemctl рд╕реБрд░реБрдХреЛ рд╕рд╛рде рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН [рдИрдореЗрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд]: 1234ред

Zabbix рдмрд╛рдЯ рдЦреЛрдЬ

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

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

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдпреЛ (tsduck_stat_template.xml) рд▓реЗ рд╕реНрд╡рдд: рдЦреЛрдЬ рдирд┐рдпрдо, рддрддреНрд╡, рдЧреНрд░рд╛рдл, рд░ рдЯреНрд░рд┐рдЧрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рдЫреЛрдЯреЛ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ (рдпрджрд┐ рдХрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдЫ рднрдиреЗ рдХреЗ рд╣реБрдиреНрдЫ)

  1. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ tsp рд▓реЗ "рдЖрджрд░реНрд╢" рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрдорд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдЫреЛрдбреНрджреИрди (рдЬреЗрдиреЗрд░реЗрдЯрд░ рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╣рд░реВ рд╕рд┐рдзреИ рдЬреЛрдбрд┐рдПрдХрд╛ рдЫрдиреН), рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдбреНрд░рдкрд╣рд░реВ рдЫрдиреН рднрдиреЗ, рдмрд┐рдиреНрджреБ 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 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдкреНрдпрд╛рдХреЗрдЯ рд╣рд╛рдирд┐ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ рд▓рдЧрднрдЧ рдкрд░реНрдпрд╛рдкреНрдд рдЫ, рдХрдореНрддрд┐рдорд╛ рдпреЛ рдХреБрдиреИ рдирд┐рдЧрд░рд╛рдиреА рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдЫред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рднрд┐рдбрд┐рдпреЛ рдЯреБрдХреНрд░рд╛рд╣рд░реВ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрджрд╛ CC "рд╣рд╛рдирд┐рд╣рд░реВ" рд╣реБрди рд╕рдХреНрдЫ (рдЬрд╣рд╛рдБрд╕рдореНрдо рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рд░реВрд╕реА рд╕рдВрдШрдорд╛ рд╕реНрдерд╛рдиреАрдп рдЯреЗрд▓рд┐рднрд┐рдЬрди рдХреЗрдиреНрджреНрд░рд╣рд░реВрдорд╛ рдпрд╕рд░реА рдШреБрд╕рд╛рдЗрдиреНрдЫ, рдЕрд░реНрдерд╛рддреН CC рдХрд╛рдЙрдиреНрдЯрд░ рдкреБрди: рдЧрдгрдирд╛ рдирдЧрд░реА), рдпреЛ рд╕рдореНрдЭрдирд╛ рд╣реБрдиреБрдкрд░реНрдЫред рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╕рдорд╛рдзрд╛рдирд╣рд░реВрдорд╛, рдпреЛ рд╕рдорд╕реНрдпрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдкрдорд╛ SCTE-35 рдЯреНрдпрд╛рдЧрд╣рд░реВ (рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рд╕реНрдЯреНрд░рд┐рдо рдЬреЗрдиреЗрд░реЗрдЯрд░рджреНрд╡рд╛рд░рд╛ рдердкрд┐рдПрдХрд╛ рдЫрдиреН) рдкрддреНрддрд╛ рд▓рдЧрд╛рдПрд░ рд╕рдорд╛рдзрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди