P4 Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΡΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ ΡΠ°Π·ΠΈΠΊΠΎΡ Π·Π° ΠΎΠΏΡΡΠ° Π½Π°ΠΌΠ΅Π½Π° ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ C ΠΈΠ»ΠΈ Python, P4 Π΅ ΡΠ°Π·ΠΈΠΊ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π·Π° Π΄ΠΎΠΌΠ΅Π½ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ Π΄ΠΈΠ·Π°ΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠ½ΠΎ ΡΡΡΠΈΡΠ°ΡΠ΅.
P4 Π΅ ΡΠ°Π·ΠΈΠΊ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠΈΡΠ°Π½ ΠΈ ΠΎΠ΄ΡΠΆΡΠ²Π°Π½ ΠΎΠ΄ Π½Π΅ΠΏΡΠΎΡΠΈΡΠ½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ° Π½Π°ΡΠ΅ΡΠ΅Π½Π° P4 Language Consortium. ΠΠΎΠ΄Π΄ΡΠΆΠ°Π½ Π΅ ΠΈ ΠΎΠ΄ Π€ΠΎΠ½Π΄Π°ΡΠΈΡΠ°ΡΠ° Π·Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ (ONF) ΠΈ Π€ΠΎΠ½Π΄Π°ΡΠΈΡΠ°ΡΠ° Linux (LF), Π΄Π²Π΅ ΠΎΠ΄ Π½Π°ΡΠ³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΠ°Π΄ΠΎΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄.
ΠΠ°Π·ΠΈΠΊΠΎΡ ΠΏΡΠ²ΠΈΡΠ½ΠΎ Π±Π΅ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»Π΅Π½ Π²ΠΎ 2013 Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΎΠΏΠΈΡΠ°Π½ Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΡ SIGCOMM CCR ΠΎΠ΄ 2014 Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠΎ Π½Π°ΡΠ»ΠΎΠ² βΠΠ΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π·Π° ΡΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈβ.
ΠΠ΄ ΡΠ²ΠΎΠ΅ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅, P4 ΡΠ°ΡΡΠ΅ΡΠ΅ ΠΈ Π΅Π²ΠΎΠ»ΡΠΈΡΠ°ΡΠ΅ Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ, Π±ΡΠ·ΠΎ ΡΡΠ°Π½ΡΠ²Π°ΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄ Π·Π° ΠΎΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΠ΄ ΠΌΡΠ΅ΠΆΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ ΠΌΡΠ΅ΠΆΠ½ΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠΈ, ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΈ ΠΈ ΡΡΡΠ΅ΡΠΈ.
βSDN ΡΠ° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°ΡΠ΅ ΠΌΡΠ΅ΠΆΠ½Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ°, Π° P4 Π³ΠΎ ΠΎΠ΄Π½Π΅ΡΠ΅ SDN Π½Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΡΠΎ ΡΠΎΠ° ΡΡΠΎ ΡΠ΅ ΡΠ° Π΄ΠΎΠ²Π΅Π΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°Π±ΠΈΠ»Π½ΠΎΡΡΠ° Π²ΠΎ ΡΡΡΠΈΡΠ°ΡΠ΅ΡΠΎβ, ΡΠ΅ΡΠ΅ ΠΡΡΡ ΠΠ°ΡΡΠ»ΠΊΠ°Ρ, ΠΈΠ·Π²ΡΡΠ΅Π½ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡ Π½Π° Π€ΠΎΠ½Π΄Π°ΡΠΈΡΠ°ΡΠ° Π·Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ.
ΠΠ°Π·ΠΈΠΊΠΎΡ P4 ΠΏΡΠ²ΠΈΡΠ½ΠΎ Π±Π΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ ΠΎΠ΄ Π³ΡΡΠΏΠ° ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ ΠΈ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠΈ ΠΎΠ΄ Google, Intel, Microsoft Research, Barefoot, Princeton ΠΈ Stanford. Π¦Π΅Π»ΡΠ° Π±Π΅ΡΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π°: Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ Π»Π΅ΡΠ΅Π½ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π° ΡΠ°Π·ΠΈΠΊ ΡΡΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ Π½Π° ΡΠΎΡΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΡΡΠΈ Π·Π° Π΅Π΄Π΅Π½ Π΄Π΅Π½ ΠΈ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎ Π΄Π° ΠΎΠΏΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠ°Π°Ρ Π½ΠΈΠ· ΠΌΡΠ΅ΠΆΠΈΡΠ΅.
ΠΠ΄ ΡΠ°ΠΌΠΈΠΎΡ ΠΏΠΎΡΠ΅ΡΠΎΠΊ, P4 Π±Π΅ΡΠ΅ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠ΅Π»Π½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ (Ρ.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ P4 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ° Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π»ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ASIC, FPGA, CPU, NPU ΠΈ GPU).
ΠΠ°Π·ΠΈΠΊΠΎΡ Π΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΎΠ΄ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΡ (Ρ.Π΅., ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° P4 ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΎΠΏΠΈΡΠ΅ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½ΠΎΠ²ΠΈ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ Π½Π° Π°Π΄ΡΠ΅ΡΠΈΡΠ°ΡΠ΅).
ΠΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ°ΡΠ°, P4 ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ Π½Π° ΡΡΠ΅Π΄ΠΈ. ΠΠΎΠΆΠ΅Π±ΠΈ Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΈΡΠ΅ Internet-RFC ΠΈ IEEE ΡΠ΅ ΡΠ° Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° P4.
P4 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΠ±ΠΈΠ»Π½ΠΈ ΠΈ Π·Π° ΡΠΈΠΊΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΡΠ΅Π΄ΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎ ΡΠ½ΠΈΠΌΠ°ΡΠ΅ Π½Π° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΎΡ Π½Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΎΡ Π²ΠΎ API-ΠΈΡΠ΅ Π½Π° Switch Abstraction Interface (SAI) ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΎΠ΄ SONiC ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΎΡ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄. P4 ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ONF Stratum Π·Π° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠ΅ΡΡΠ»ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΊΡΠ½ΠΈ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°Π±ΠΈΠ»Π½ΠΈ ΡΡΠ΅Π΄ΠΈ.
ΠΠ° ΠΏΡΠ² ΠΏΠ°Ρ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΎΡ ΠΈ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ Π°Π΄Π°ΠΏΡΠ΅ΡΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠΎΡΠ΅Π½ ΠΈΠ·Π²ΡΡΠ΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΠ΅Π»Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ° ΠΏΡΠ΅Π΄ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ. ΠΠΎΠ»Π΅ΠΌΠΈΡΠ΅ Π΄Π°Π²Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΎΠ±Π»Π°ΠΊ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ° ΡΠ΅ΡΡΠΈΡΠ°Π°Ρ ΠΈ Π΄Π΅Π±Π°Π³ΠΈΡΠ°Π°Ρ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠΎΡΡΠ²Π΅Ρ, Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΡΡΠΈ Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΈ ΡΡΠΎΡΠΎΡΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠΎΠΏΠ΅ΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡ Π²ΠΎ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡΠ° Π±Π΅Π· Π΄Π° Π±Π°ΡΠ°Π°Ρ ΡΠΊΠ°ΠΏ Ρ Π°ΡΠ΄Π²Π΅Ρ.
Π‘ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° P4, ΠΏΡΠΎΠ΄Π°Π²Π°ΡΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠ½Π° ΠΎΠΏΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΎΡΠ΅ΠΊΡΠ²Π°Π°Ρ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΡΠΈΡΠ°ΡΠ΅ ΠΊΠ°Ρ ΡΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΡΠ΅ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° ΡΠΎΡΡΠ²Π΅Ρ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΈ Π½Π° ΠΊΡΠ°ΡΠΎΡ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΎΠΏΠ΅ΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡ.
Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, P4 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΊΠΎΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π°Ρ ΡΠΎΡΠ΅ΠΌΠ° Π½ΠΎΠ²ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π½Π° ΡΡΡΠΈΡΠ°ΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, P4 Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π½ Π·Π° ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡΠ° ΠΈ ΠΌΠ΅ΡΠ΅ΡΠ° Π²ΠΎ ΡΠ΅Π½ΡΡΠΈ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΏΡΠ΅ΡΠΏΡΠΈΡΠ°ΡΠΈΡΠ° ΠΈ ΠΌΡΠ΅ΠΆΠΈ Π½Π° Π΄Π°Π²Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ»ΡΠ³ΠΈ.
ΠΡΡΡΠ°ΠΆΡΠ²Π°ΡΠΊΠ°ΡΠ° Π·Π°Π΅Π΄Π½ΠΈΡΠ° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π·Π°ΡΠΈΠ»ΠΈ. ΠΠ΅ΠΊΠΎΠ»ΠΊΡ Π²ΠΎΠ΄Π΅ΡΠΊΠΈ Π°ΠΊΠ°Π΄Π΅ΠΌΡΠΊΠΈ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠΊΠΈ Π³ΡΡΠΏΠΈ Π·Π° Π²ΠΌΡΠ΅ΠΆΡΠ²Π°ΡΠ΅ ΠΎΠ±ΡΠ°Π²ΠΈΡΠ° Π²ΠΎΠ·Π±ΡΠ΄Π»ΠΈΠ²ΠΈ Π½ΠΎΠ²ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ P4, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅Π½Π·ΡΡ ΠΈ ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠ»ΡΡΠ½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ. Π‘Π΅ ΡΠΎΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠ° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°, ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈΡΠ΅ ΡΠ΅ Π΄Π²ΠΈΠΆΠ°Ρ ΠΎΠ΄ Ρ Π°ΡΠ΄Π²Π΅Ρ Π²ΠΎ ΡΠΎΡΡΠ²Π΅Ρ, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΡΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²Π°Ρ ΠΌΠ½ΠΎΠ³Ρ Π½Π΅ΠΎΡΠ΅ΠΊΡΠ²Π°Π½ΠΈ, Π½ΠΎΠ²ΠΈ ΠΈ Π³Π΅Π½ΠΈΡΠ°Π»Π½ΠΈ ΠΈΠ΄Π΅ΠΈ.
ΠΠ°Π΅Π΄Π½ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ ΠΏΡΠΈΠ΄ΠΎΠ½Π΅Ρ Π²ΠΎ ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° ΠΊΠΎΠ΄ΠΎΡ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΈ, ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ, ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅, API, ΡΠ΅ΡΡ ΡΠ°ΠΌΠΊΠΈ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ²Π΅ΡΠ΅. ΠΠΎΠΌΠΏΠ°Π½ΠΈΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ΠΈ ZTE ΠΈΠΌΠ°Π°Ρ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈ; ΠΎΠ΄ ΡΠ½ΠΈΠ²Π΅ΡΠ·ΠΈΡΠ΅ΡΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΈ BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ΠΈ USI; ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΈ CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ΠΈ Stratum Π³ΠΎ ΠΈΡΡΠ°ΠΊΠ½ΡΠ²Π°Π°Ρ ΡΠ°ΠΊΡΠΎΡ Π΄Π΅ΠΊΠ° P4 Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ°.
Π’ΠΈΠΏΠΈΡΠ½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ Π·Π° ΡΠ°Π·ΠΈΠΊΠΎΡ P4:
ΠΠ·Π³Π»Π΅Π΄ΠΈΡΠ΅ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°
ΠΠΈΠ΄Π΅ΡΡΠΈ ΡΠ°Π·ΠΈΠΊΠΎΡ Π΅ Π½Π°ΠΌΠ΅Π½Π΅Ρ Π·Π° ΡΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, ΡΠΏΠΈΡΠΎΠΊΠΎΡ Π½Π° Π±Π°ΡΠ°ΡΠ° ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° Π΄ΠΈΠ·Π°ΡΠ½ Π΅ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π²ΠΎ ΡΠΏΠΎΡΠ΅Π΄Π±Π° ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ Π·Π° ΠΎΠΏΡΡΠ° Π½Π°ΠΌΠ΅Π½Π°. ΠΠ»Π°Π²Π½ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ ΡΠ΅:
- ΠΠ΅Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΠ΅Π»Π½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°;
- ΠΠ΅Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»(ΠΈ);
- Π Π΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΡΠ΅ΡΠ΅Π½ΠΎΡ.
ΠΠ΅Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΠ΅Π»Π½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ P4 ΡΠ΅ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ΠΈ Π΄Π° Π±ΠΈΠ΄Π°Ρ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΈ ΠΎΠ΄ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ°, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π°Ρ Π·Π° ΠΌΠ½ΠΎΠ³Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΈΠ·Π²ΡΡΠ½ΠΈ ΠΌΠΎΡΠΎΡΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Π·Π° ΠΎΠΏΡΡΠ° Π½Π°ΠΌΠ΅Π½Π°, FPGA, ΡΠΈΡΡΠ΅ΠΌ-Π½Π°-ΡΠΈΠΏΠΎΠ²ΠΈ, ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ΠΈ ASIC. ΠΠ²ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½ΠΈ ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅Π»ΠΈ P4, ΠΈ ΡΠ΅ΠΊΠΎΡΠ° ΡΠ΅Π» Π±Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π½Π° P4 Π²ΠΎ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΠ΅Π»Π΅Π½ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°Ρ. ΠΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ Π²ΠΎ ΡΠ΅Π»Π½ΠΈΠΎΡ ΡΡΠ΅Π΄, Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΡΠΎΡΡΠ²Π΅Ρ, ΠΏΠ° Π΄ΡΡΠΈ ΠΈ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊ ΡΡΠ»ΡΠ³Π°. ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΎΠ΄ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΠ΅ ΡΠ΅Π»ΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ P4 Π±Π΅Π° Π·Π° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΡΠ΅ΡΡΠ»ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΌΠ½ΠΎΠ³Ρ Π΅ Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ»ΡΡΠ½Π΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΡ βP4 switchβ ΠΈΠ°ΠΊΠΎ βP4 targetβ Π΅ ΠΏΠΎΠΏΡΠ΅ΡΠΈΠ·Π΅Π½.
ΠΠ΅Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»(ΠΈ).
P4 Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΎΠ΄ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΡ. ΠΠ²Π° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΡΠ°Π·ΠΈΠΊΠΎΡ Π½Π΅ΠΌΠ° ΠΌΠ°ΡΡΠΈΠ½ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ IP, Ethernet, TCP, VxLAN ΠΈΠ»ΠΈ MPLS. ΠΠ°ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΎΡ P4 Π³ΠΈ ΠΎΠΏΠΈΡΡΠ²Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ ΠΈ ΠΈΠΌΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠΎΠ»ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ Π²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΠΈ ΠΏΠ°ΠΊ ΡΠ΅ ΡΠΎΠ»ΠΊΡΠ²Π°Π°Ρ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°Π°Ρ ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈ ΡΠ΅Π»Π½ΠΈΠΎΡ ΡΡΠ΅Π΄.
Π Π΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΡΠ΅ΡΠ΅Π½ΠΎΡ
ΠΠ΅Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΡ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π½Π° Π°ΠΏΡΡΡΠ°ΠΊΡΠ½ΠΈΠΎΡ ΡΠ°Π·ΠΈΠΊ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°Π°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° - ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° P4 ΡΡΠ΅Π±Π° Π΄Π° ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ° ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈ. ΠΠ²Π°Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π° ΡΠΎ ΡΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠ΅ΠΊΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Π·Π° ΠΎΠΏΡΡΠ° Π½Π°ΠΌΠ΅Π½Π° ΠΈΠ»ΠΈ ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Π½Π°ΠΌΠ΅ΡΡΠΎ ΡΠΎ ΡΠΈΠΊΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ»Π°.
ΠΠ°ΠΊΠΎ Π½Π΅ΠΌΠ° Π½ΠΈΡΡΠΎ Π²ΠΎ ΡΠ°Π·ΠΈΠΊΠΎΡ ΡΡΠΎ Π±ΠΈ ΡΠΏΡΠ΅ΡΠΈΠ»ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΡΠ΅Ρ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, ΠΎΠ²ΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ Π½Π΅Π²ΠΈΠ΄Π»ΠΈΠ²ΠΈ Π·Π° Π°Π²ΡΠΎΡΠΎΡ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ ΠΈ Π½Π° ΠΊΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ° Π½Π°ΠΌΠ°Π»Π°Ρ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΠΈ ΡΠ΅Π»ΠΈΡΠ΅ ΠΈ Π½ΠΈΠ²Π½Π°ΡΠ° ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡ.
ΠΠ²ΠΈΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ ΠΏΡΠ²ΠΈΡΠ½ΠΎ Π±Π΅Π° ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΠ΄ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΊΡΠ΅Π°ΡΠΎΡΠΈ ΡΠΎ ΡΠΎΠΊΡΡ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΠΈΡΠΎΠΊΠ° ΡΠΏΠΎΡΡΠ΅Π±Π° Π²ΠΎ ΠΌΡΠ΅ΠΆΠ½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
ΠΠ°Π·ΠΈΠΊΠΎΡ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ:
1) ΡΠ΅Π½ΡΡΠΈ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Ρ ΠΈΠΏΠ΅ΡΡΠΊΠ°Π»ΠΈ;
ΠΠΈΠ½Π΅ΡΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° Tencent Π΅ Π½Π°ΡΠ³ΠΎΠ»Π΅ΠΌΠ°ΡΠ° ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΡΠΊΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° Π²ΠΎ ΡΠ²Π΅ΡΠΎΡ ΠΈ Π΅Π΄Π½Π° ΠΎΠ΄ Π½Π°ΡΠ³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΠΈΡΠΌΠΈ Π·Π° ΡΠΈΠ·ΠΈΡΠ΅Π½ ΠΊΠ°ΠΏΠΈΡΠ°Π». ΠΠΎΠ΄ΡΡΠΆΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Tencent, ΠΊΠ°ΠΊΠΎ Π²ΠΎ ΠΠΈΠ½Π°, ΡΠ°ΠΊΠ° ΠΈ Π²ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π΅ΠΌΡΠΈ ΡΠΈΡΡΠΌ ΡΠ²Π΅ΡΠΎΡ, ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΡΠ΅Ρ Π½ΠΎΠ»ΠΎΡΠΊΠΈΠΎΡ Π±ΠΈΠ·Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΡΠ°Π·Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΡΡΠ»ΡΠ³ΠΈ, ΡΠ»ΡΡΡΠ²Π°ΡΠ° Π²ΠΎ ΠΎΠ±Π»Π°ΡΡΠ° Π½Π° Π²Π΅ΡΡΠ°ΡΠΊΠ°ΡΠ° ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠΈΡΠ° ΠΈ Π΅Π»Π΅ΠΊΡΡΠΎΠ½ΡΠΊΠ°ΡΠ° Π·Π°Π±Π°Π²Π°.
P4 ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½ΠΎΡΠΎ ΡΡΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄Π½ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΠΌΡΠ΅ΠΆΠ½Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°ΡΠ°.
ΠΠ°ΠΊΠΎ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠΎΡΠΈΡΠ΅, Google ΡΠΎ Π³ΠΎΡΠ΄ΠΎΡΡ Π³ΠΎ Π·Π°Π±Π΅Π»Π΅ΠΆΡΠ²Π° Π±ΡΠ·ΠΎΡΠΎ ΡΡΠ²ΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° P4 Π²ΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ°ΡΠ° Π·Π° ΠΌΡΠ΅ΠΆΠΈ ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π²ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠΈΠΎΡ Π΄ΠΈΠ·Π°ΡΠ½ Π½Π° ΡΠ΅Π½ΡΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
2) ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ°Π»Π½ΠΈ Π΄ΡΡΡΡΠ²Π°;
ΠΠΎΠ»Π΄ΠΌΠ°Π½ Π‘Π°ΠΊΡ ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΡΠΎΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° ΡΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ° ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π° Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΈ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° Π·Π° Π΄Π° ΠΈΠ½ΠΎΠ²ΠΈΡΠ° ΠΌΡΠ΅ΠΆΠ½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΈ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅.
3) ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ;
Π¦Π΅Π»Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ½Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ° Π±ΠΈ ΠΈΠΌΠ°Π»Π° ΠΊΠΎΡΠΈΡΡ ΠΎΠ΄ ΡΠ°Π·ΠΈΠΊ ΠΊΠ°ΠΊΠΎ P4 ΠΊΠΎΡ ΡΠ½ΠΈΠΊΠ°ΡΠ½ΠΎ Π³ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π·Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°ΡΠ΅. Cisco ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π²Π΅ΡΡΠ²Π° Π²ΠΎ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈ Π»ΠΈΠ½ΠΈΠΈ Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΎΠ²ΠΎΡ ΡΠ°Π·ΠΈΠΊ.
Juniper Networks Π²ΠΊΠ»ΡΡΠΈ P4 ΠΈ P4 Runtime Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Juniper ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΠΊΠΎΠ΄.
Ruijie Networks Π΅ ΡΠΈΠ»Π΅Π½ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Ρ Π½Π° P4 ΠΈ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈΡΠ΅ ΡΡΠΎ Π³ΠΈ Π½ΠΎΡΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠΈΡΠ΅. Π‘ΠΎ P4, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ° ΠΈ ΠΈΡΠΏΠΎΡΠ°ΡΡΠ²Π° Π½Π°ΡΠ΄ΠΎΠ±ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° Π²ΠΎ ΡΠ²ΠΎΡΠ°ΡΠ° ΠΊΠ»Π°ΡΠ° Π΄ΠΎ ΡΠΈΡΠΎΠΊ ΠΎΠΏΡΠ΅Π³ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ.
4) Π’Π΅Π»Π΅ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠΊΠΈ Π΄Π°Π²Π°ΡΠ΅Π»ΠΈ;
AT&T Π±Π΅ΡΠ΅ ΡΠ°Π½ ΡΡΠ²ΠΎΠ΅Π½ Π½Π° P4, Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΏΡΠ²ΠΈΡΠ΅ ΡΡΠΎ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ P4 Π·Π° Π΄Π° Π³ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈ Π²ΠΎ ΡΠ²ΠΎΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠΈ ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈ P4 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°Π±ΠΈΠ»Π½ΠΈ ΡΡΠ΅Π΄ΠΈ Π·Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°ΡΠ΅ Π½Π° ΡΠ²ΠΎΡΠ°ΡΠ° ΠΌΡΠ΅ΠΆΠ°.
ΠΠΎ ΠΠΎΡΡΠ΅ Π’Π΅Π»Π΅ΠΊΠΎΠΌ, ΡΠ°Π·ΠΈΠΊΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π° ΠΊΠ»ΡΡΠ½ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Access 4.0.
5) ΠΠΎΠ»ΡΠΏΡΠΎΠ²ΠΎΠ΄Π½ΠΈΡΠΊΠ° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ°;
ΠΠ°Π·ΠΈΠΊΠΎΡ ΠΌΡ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° Barefoot Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π½ΠΎΠ²Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° Π·Π° Π΄ΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠ½Π°ΡΠ° ΡΡΡΠΈΡΠ°ΡΠΊΠ° ΡΠ°ΠΌΠ½ΠΈΠ½Π°.
Xilinx Π±Π΅ΡΠ΅ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π°ΡΠΈΡΠ΅ Π½Π° P4.org ΠΈ Π±Π΅ΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ Π²ΠΎ ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ P4 ΠΈ Π³ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ Π²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΠ±ΠΈΠ»Π½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° FPGA Π·Π° Ρ Π°ΡΠ΄Π²Π΅Ρ SmartNIC ΠΈ NFV, ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°ΡΡΠΈ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΠΏΡΠ²ΠΈΡΠ΅ P416 ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ Π΄ΠΈΠ·Π°ΡΠ½ΠΎΡ SDNet.
6) Π‘ΠΎΡΡΠ²Π΅Ρ.
VMware Π²Π΅ΡΡΠ²Π° Π΄Π΅ΠΊΠ° P4 ΡΠΎΠ·Π΄Π°Π²Π° ΠΎΠ³ΡΠΎΠΌΠ½Π° Π΅Π½Π΅ΡΠ³ΠΈΡΠ°, ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ ΠΈ Π·Π°Π΅Π΄Π½ΠΈΡΠ° ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΡΠ²Π° Π·Π½Π°ΡΠ°ΡΠ½Π° ΠΈ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΠ° Π²ΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ°. VMware Π΅ Π΄Π΅Π» ΠΎΠ΄ ΠΎΠ²Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠΊΠΎ Π΄Π²ΠΈΠΆΠ΅ΡΠ΅ ΠΎΠ΄ ΡΠ°ΠΌΠΈΠΎΡ ΠΏΠΎΡΠ΅ΡΠΎΠΊ, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½ΠΎΠ²ΠΈΠΎΡ Π±ΡΠ°Π½ Π½Π° ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ Π΅ ΠΏΠΎΡΡΠΈΠΊΠ½Π°Ρ ΠΎΠ΄ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΡΠΎΡΡΠ²Π΅Ρ ΠΊΠΎΠΈ Π³ΠΈ ΠΏΡΠΎΡΠΈΡΡΠ²Π°Π°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ Π³ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π°Ρ Π²ΠΎ Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ.
Π’Π°ΠΊΠ°, P4 Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΎΠ΄ ΡΠ΅Π» ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΊΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ°ΡΠ° ΠΈ Π°ΠΊΠ°Π΄Π΅ΠΌΡΠΊΠ°ΡΠ° Π·Π°Π΅Π΄Π½ΠΈΡΠ° Π·Π° ΡΠ½ΠΈΠΊΠ°ΡΠ½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π·Π° ΡΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΠ° ΠΏΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅Π»ΠΈ. ΠΠ΅Π½Π΅Ρ, ΡΠ΅Π»ΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ Ρ Π°ΡΠ΄Π²Π΅ΡΡΠΊΠΈ ΠΈ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΈ, Ρ ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΡΠΊΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΈ, NPU, GPU, FPGA, SmartNIC ΠΈ ASIC.
ΠΠ»Π°Π²Π½ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π³ΠΎ ΠΏΡΠΎΡΠΈΡΡΠ²Π°Π°Ρ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π° ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°Π°Ρ Π½Π΅Π³ΠΎΠ²Π° Π±ΡΠ·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π²ΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ.
Getting Started
P4 Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠΈΡΠ΅ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°
ΠΡΡΠΊΠ° Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π³Π»Π°Π²Π½ΠΈΡΠ΅ Π°ΠΏΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ:
ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΡΠ° β ΡΠΎ Π½ΠΈΠ²Π½Π° ΠΏΠΎΠΌΠΎΡ ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°Π°Ρ Π·Π°Π³Π»Π°Π²ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠ΅.
ΠΠ΅ΡΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°:
- ΠΎΠΏΠΈΡ Π½Π° ΡΠΎΡΠΌΠ°ΡΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ ΠΈΠΌΠΈΡΠ° Π½Π° ΠΏΠΎΠ»ΠΈΡΠ° Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ
- ΡΠΈΠΊΡΠ½ΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠ°
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ
header Ethernet_h{
bit<48> dstAddr;
bit<48> srcAddr;
bit<16> etherType;
}
header IPv4_h{
bit<4> version;
bit<4> ihl;
bit<8> diffserv;
bit<16> totalLen;
bit<16> identification;
bit<3> flags;
bit<13> fragOffset;
bit<8> ttl;
bit<8> protocol;
bit<16> hdrChecksum;
bit<32> srcAddr;
bit<32> dstAddr;
varbit<320> options;
}
ΠΠ°ΡΡΠ΅ΡΠΈ β Π½ΠΈΠ²Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π°Ρ Π½Π°ΡΠ»ΠΎΠ²ΠΈΡΠ΅.
Π‘Π»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ΅ Π³ΠΎ ΠΎΠ΄ΡΠ΅Π΄ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½ΠΎΡ Π½Π° ΠΊΠΎΠ½Π΅ΡΠ½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° ΠΎΠ΄ Π΅Π΄Π½Π° ΠΏΠΎΡΠ΅ΡΠ½Π° ΡΠΎΡΡΠΎΡΠ±Π° Π²ΠΎ Π΅Π΄Π½Π° ΠΎΠ΄ Π΄Π²Π΅ΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΈ ΡΠΎΡΡΠΎΡΠ±ΠΈ:
parser MyParser(){
state start{transition parse_ethernet;}
state parse_ethernet{
packet.extract(hdr.ethernet);
transition select(hdr.ethernet.etherType){
TYPE_IPV4: parse_ipv4;
default: accept;
}
}β¦
}
Π’Π°Π±Π΅Π»ΠΈ β ΡΠΎΠ΄ΡΠΆΠΈ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΈ ΡΠΎΡΡΠΎΡΠ±ΠΈ ΠΊΠΎΠΈ Π³ΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°Π°Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΡΠΎ Π΄Π΅ΡΡΡΠ²Π°. ΠΠΊΡΠΈΠ²Π½ΠΎΡΡ β ΠΎΠΏΠΈΡ Π½Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ° ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ.
Π’Π°Π±Π΅Π»ΠΈΡΠ΅ ΡΠΎΠ΄ΡΠΆΠ°Ρ ΡΠΎΡΡΠΎΡΠ±ΠΈ (Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅) Π·Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠ° ΠΎΠΏΠΈΡΡΠ²Π°Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΡΠ° Match-Action
ΠΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΡΠΎΠ²ΠΏΠ°ΡΠ°Π°Ρ ΡΠΎ:
- Π’ΠΎΡΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°ΡΠ°ΡΠ΅
- ΠΠ°ΡΠ΄ΠΎΠ»Π³ΠΎ ΡΠΎΠ²ΠΏΠ°ΡΠ°ΡΠ΅ ΡΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡ (LPM)
- Π’ΡΠΎΡΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°ΡΠ°ΡΠ΅ (ΠΌΠ°ΡΠΊΠΈΡΠ°ΡΠ΅)
table ipv4_lpm{
reads{
ipv4.dstAddr: lpm;
} actions {
forward();
}
}
Π‘ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΈ Π΄Π΅ΡΡΡΠ²Π° ΠΌΠΎΡΠ° ΠΎΠ΄Π½Π°ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π°Ρ Π²ΠΎ ΡΠ°Π±Π΅Π»ΠΈ.
ΠΠΊΡΠΈΠΈΡΠ΅ ΡΠ΅ ΡΠΎΡΡΠΎΡΠ°Ρ ΠΎΠ΄ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ°ΡΠ°Π°Ρ ΠΎΠ΄ Π½ΠΈΠ²ΠΎ Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ (Π½Π° ΠΏΡ. IP Π°Π΄ΡΠ΅ΡΠΈ/Π±ΡΠΎΠ΅Π²ΠΈ Π½Π° ΠΏΠΎΡΡΠΈ). ΠΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π±Π΅Π· ΡΠ°ΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π²Π΅Π΄Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ Π΄Π΅ΡΡΡΠ²ΠΎΡΠΎ, Π½ΠΎ Π±ΡΠΎΡΠΎΡ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π»ΠΈΠ². ΠΠ°ΡΠΎΠ°, Π°ΠΊΡΠΈΠΈΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠΎΠ΄ΡΠΆΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΠΈΠΊΠ»ΡΡΠΈ ΠΈΠ»ΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π²ΠΈ.
action ipv4_forward(macAddr_t dstAddr, egressSpec_t port){
standard_metadata.egress_spec = port;
hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
hdr.ethernet.dstAddr = dstAddr;
hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}
Match-Action ΠΌΠΎΠ΄ΡΠ»ΠΈ β Π΄Π΅ΡΡΡΠ²Π° Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΊΠ»ΡΡ Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅, ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ Π²ΠΎ ΡΠ°Π±Π΅Π»Π°, ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π΄Π΅ΡΡΡΠ²Π°.
Π’ΠΈΠΏΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° ΠΌΠΎΠ΄ΡΠ» Π΅ ββΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ°:
ΠΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΡ β Π³ΠΎ ΠΎΠ·Π½Π°ΡΡΠ²Π° ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ΠΎΡ ΠΏΠΎ ΠΊΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Match-Action. ΠΠ²Π° Π΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΊΠΎΡΠ° ΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΈ ΡΠ΅ΠΊΠ²Π΅Π½ΡΠ°ΡΠ° Π½Π° Match-Action. ΠΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΠΎΡ ΡΠ΅ΠΊ Π³ΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π° ΡΠΈΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π°.
ΠΠ°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΡΠΎ ΡΠ°ΡΠ½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈ API ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΡΠΌΠ°, ΡΠ΅Π³ΠΈΡΡΡΠΈ, Π±ΡΠΎΡΠ°ΡΠΈ, Π±ΡΠΎΡΠ°ΡΠΈ ΠΈΡΠ½.
extern register{
register(bit<32> size);
void read(out T result, in bit<32> index);
void write(in bit<32> index, in T value);
}
extern Checksum16{
Checksum16(); //constructor
void clear(); //prepare unit for computation
void update(in T data); //add data to checksum
void remove(in T data); /remove data from existing checksum
bit<16> get(); //get the checksum for the data added since last clear
}
ΠΠ΅ΡΠ°ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ β ΡΡΡΡΠΊΡΡΡΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ ΡΠ΅ΠΊΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠΎΡΡΠΎΡΠ°Ρ 2 ΡΠΈΠΏΠ° Π½Π° ΠΌΠ΅ΡΠ°ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ:
ΠΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ΠΈ ΠΌΠ΅ΡΠ°ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (ΠΏΡΠ°Π·Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ)
ΠΠ²Π΄Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°Π²ΠΈΡΠ΅ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅
ΠΠΎΡΡΠ°ΠΏΠ½ΠΎ Π½ΠΈΠ· ΡΠ΅Π»ΠΈΠΎΡ Π³Π°ΡΠΎΠ²ΠΎΠ΄
ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π·Π° Π²Π°ΡΠΈ ΡΠ΅Π»ΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Ρ
Π°Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ
ΠΠ½Π°ΡΡΠ΅ΡΠ½ΠΈ ΠΌΠ΅ΡΠ°ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ - ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°
ΠΠ»Π΅Π·Π½Π°ΡΠ° ΠΏΠΎΡΡΠ°, ΠΈΠ·Π»Π΅Π·Π½Π°ΡΠ° ΠΏΠΎΡΡΠ° ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΎΠ²Π΄Π΅
ΠΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠ°Ρ ΠΊΠΎΠ³Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π±Π΅ΡΠ΅ Π²ΠΎ ΡΠ΅Π΄, Π΄Π»Π°Π±ΠΎΡΠΈΠ½Π° Π½Π° ΡΠ΅Π΄ΠΎΡ
ΠΌΡΠ»ΡΠΈΠΊΠ°ΡΡ Ρ
Π°Ρ / ΠΏΠΎΠ²Π΅ΡΠ΅ΠΊΡΠ°ΡΠ½Π° ΡΠ΅Π΄ΠΈΡΠ°
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ, Π²Π°ΠΆΠ½ΠΎΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΠΈΠ·Π»Π΅Π·Π½Π° ΠΏΠΎΡΡΠ° (Π½Π° ΠΏΡ., ΡΠ΅Π΄ΠΈΡΠ° Π·Π° ΠΈΠ·Π»Π΅Π·)
P4 ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ
ΠΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ P4 (P4C) Π³Π΅Π½Π΅ΡΠΈΡΠ°:
- ΠΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠ½Π° ΡΠ°ΠΌΠ½ΠΈΠ½Π°
- API Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π²ΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠ½Π°ΡΠ° ΡΠ°ΠΌΠ½ΠΈΠ½Π°
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°Ρ Π²ΠΎ ΡΠ°Π·ΠΈΠΊΠΎΡ P4
ΠΠ·Π²ΠΎΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ°Ρ ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ.
p4lang/p4c-bm: ΡΠΎΠ·Π΄Π°Π²Π° JSON ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π° bmv2
p4lang/bmv2: ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°Ρ ΡΡΠΎ Π³ΠΈ ΡΠ°Π·Π±ΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° JSON Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π½Π° bmv2
Π‘Π»ΠΈΠΊΠ°ΡΠ° Π³ΠΎ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ Π·Π° ΡΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ:
ΠΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΠΈ ΡΠΎ ΡΠ°Π±Π΅Π»ΠΈ, ΡΠ΅Π³ΠΈΡΡΡΠΈ Π·Π° ΡΠΈΡΠ°ΡΠ΅, Π±ΡΠΎΡΠ°ΡΠΈ:
- table_set_default <table name> <action name> <action parameters>
- table_add <table name> <action name> <match fields> => <action
parameters> [priority]
- table_delete <table name> <entry handle>
ΠΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° simple_switch_CLI Π·Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° API-ΡΠΎ Π½Π° ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈΠΎΡ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°Ρ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΎΠ²ΠΎΡ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ.
PS ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΠΎΠ²Π° Π»Π΅ΡΠΎ, ΠΠ½ΡΠ΅Π» ΠΏΠΎΡΠΏΠΈΡΠ° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ Π·Π° ΠΊΡΠΏΡΠ²Π°ΡΠ΅ Barefoot Networks Π²ΠΎ ΠΎΠ±ΠΈΠ΄ Π±ΡΠ·ΠΎ Π΄Π° Π³ΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Hyperscale Cloud. ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΡΠ΅ ΠΠ°Π²ΠΈΠ½ Π¨Π΅Π½ΠΎΡ (ΠΈΠ·Π²ΡΡΠ΅Π½ ΠΏΠΎΡΠΏΡΠ΅ΡΡΠ΅Π΄Π°ΡΠ΅Π» ΠΈ Π³Π΅Π½Π΅ΡΠ°Π»Π΅Π½ ΠΌΠ΅Π½Π°ΡΠ΅Ρ Π½Π° Data Center Group Π²ΠΎ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΠ½ΡΠ΅Π»), ΠΎΠ²Π° ΡΠ΅ ΠΌΡ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° ΠΠ½ΡΠ΅Π» Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π½ΡΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠΎΠ΅ Π»ΠΈΡΠ½ΠΎ ΠΌΠΈΡΠ»Π΅ΡΠ΅, Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° Π·Π°Π±ΠΎΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° Intel Π΅ Π»ΠΈΠ΄Π΅Ρ Π²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½Π° FPGA ΡΠΈΠΏΠΎΠ²ΠΈ ΠΈ ΠΈΠΌΠ° ΠΎΠ΄Π»ΠΈΡΠ½Π° Quartus ΠΎΠΊΠΎΠ»ΠΈΠ½Π°. Π’ΠΎΠ° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΎΡΠ΅ΠΊΡΠ²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠΎ Π΄ΠΎΠ°ΡΠ°ΡΠ΅ΡΠΎ Π½Π° Intel, Barefoot Π½Π΅ ΡΠ°ΠΌΠΎ ΡΡΠΎ ΡΠ΅ ΡΠ° ΠΏΡΠΎΡΠΈΡΠΈ ΡΠ²ΠΎΡΠ°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ°, ΡΡΠΊΡ ΠΈ Quartus ΠΈ P4 Studio ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΠ° ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ²Π°ΡΠ° Π½Π° Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° Toffino ΠΈ Toffino 2.
ΠΡΠΈΡΠΈΡΠ°Π»Π΅Π½ ΡΠ»Π΅Π½ Π½Π° Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ° P4 - ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°
ΠΠ·Π²ΠΎΡ: www.habr.com