แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4
P4 แž‚แžบโ€‹แž‡แžถโ€‹แž—แžถแžŸแžถโ€‹แžŸแžšแžŸแŸแžšโ€‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธโ€‹แžŠแŸ‚แž›โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แžถแž“โ€‹แžšแž…แž“แžถโ€‹แžกแžพแž„โ€‹แžŠแžพแž˜แŸ’แž”แžธโ€‹แž€แŸ†แžŽแžแŸ‹โ€‹แž•แŸ’แž›แžผแžœโ€‹แžšแž”แžŸแŸ‹โ€‹แž€แž‰แŸ’แž…แž”แŸ‹โ€‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแŸ” แž˜แžทแž“แžŠแžผแž…แž—แžถแžŸแžถแžŠแŸ‚แž›แž˜แžถแž“แž‚แŸ„แž›แž”แŸ†แžŽแž„แž‘แžผแž‘แŸ…แžŠแžผแž…แž‡แžถ C แžฌ Python แž‘แŸ P4 แž‚แžบแž‡แžถแž—แžถแžŸแžถแž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แž“แŸƒแžŠแŸ‚แž“แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแžšแž…แž“แžถแž˜แžฝแž™แž…แŸ†แž“แžฝแž“แžŠแŸ‚แž›แž’แŸ’แžœแžพแžฑแŸ’แž™แž”แŸ’แžšแžŸแžพแžšแžกแžพแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž•แŸ’แž›แžผแžœแž”แžŽแŸ’แžแžถแž‰แŸ”

P4 แž‚แžบแž‡แžถแž—แžถแžŸแžถแž”แŸ’แžšแž—แž–แž”แžพแž€แž…แŸ†แž แžŠแŸ‚แž›แž˜แžถแž“แžขแžถแž‡แŸ’แž‰แžถแž”แŸแžŽแŸ’แžŽ แž“แžทแž„แžแŸ‚แžšแž€แŸ’แžŸแžถแžŠแŸ„แž™แžขแž„แŸ’แž‚แž€แžถแžšแž˜แžทแž“แžšแž€แž”แŸ’แžšแžถแž€แŸ‹แž…แŸ†แžŽแŸแž‰แžŠแŸ‚แž›แž แŸ…แžแžถ P4 Language ConsortiumแŸ” แžœแžถแž€แŸแžแŸ’แžšแžผแžœแž”แžถแž“แž‚แžถแŸ†แž‘แŸ’แžšแžŠแŸ„แž™ Open Networking Foundation (ONF) แž“แžทแž„ Linux Foundation (LF) แžŠแŸ‚แž›แž‡แžถแžขแž„แŸ’แž‚แž€แžถแžšแž†แŸแžแŸ’แžšแž’แŸ†แž‡แžถแž„แž‚แŸแž…แŸ†แž“แžฝแž“แž–แžธแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แž˜แŸ’แžšแŸ„แž„แž”แžŽแŸ’แžแžถแž‰แž”แŸ’แžšแž—แž–แž”แžพแž€แž…แŸ†แž แŸ”
แž—แžถแžŸแžถแž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„แžŠแŸ†แž”แžผแž„แž€แŸ’แž“แžปแž„แž†แŸ’แž“แžถแŸ† 2013 แž แžพแž™แž”แžถแž“แž–แžทแž–แžŽแŸŒแž“แžถแž“แŸ…แž€แŸ’แž“แžปแž„แž€แŸ’แžšแžŠแžถแžŸ SIGCOMM CCR แž†แŸ’แž“แžถแŸ† 2014 แžŠแŸ‚แž›แž˜แžถแž“แž…แŸ†แžŽแž„แž‡แžพแž„แžแžถ "Protocol Independent, Packet Routing Processor Programming"แŸ”

แž…แžถแž”แŸ‹แžแžถแŸ†แž„แž–แžธแž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แžšแž”แžŸแŸ‹แžแŸ’แž›แžฝแž“ P4 แž”แžถแž“แžšแžธแž€แž…แž˜แŸ’แžšแžพแž“ แž“แžทแž„แžœแžทแžœแžŒแŸ’แžแž™แŸ‰แžถแž„แžขแž’แžทแž€แžขแž’แž˜ แž™แŸ‰แžถแž„แž†แžถแž”แŸ‹แžšแž แŸแžŸแž€แŸ’แž›แžถแž™แž‡แžถแžŸแŸ’แžแž„แŸ‹แžŠแžถแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แžŠแŸ„แž™แžงแž”แž€แžšแžŽแŸแž”แžŽแŸ’แžแžถแž‰ แžšแžฝแž˜แž‘แžถแŸ†แž„แžขแžถแžŠแžถแž”แŸ‹แž‘แŸแžšแž”แžŽแŸ’แžแžถแž‰ แž€แžปแž„แžแžถแž€แŸ‹ แž“แžทแž„แžšแŸ‰แŸ„แžแž‘แŸแžšแŸ”

แž›แŸ„แž€ Guru Parulkar แž“แžถแž™แž€แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž“แŸƒ Open Networking Foundation แž”แžถแž“แž“แžทแž™แžถแž™แžแžถ "SDN แž”แžถแž“แž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแžงแžŸแŸ’แžŸแžถแž แž€แž˜แŸ’แž˜แž”แžŽแŸ’แžแžถแž‰ แž แžพแž™ P4 แž“แžถแŸ† SDN แž‘แŸ…แž€แžถแž“แŸ‹แž€แž˜แŸ’แžšแžทแžแž”แž“แŸ’แž‘แžถแž”แŸ‹แžŠแŸ„แž™แž“แžถแŸ†แž™แž€แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‘แŸ…แž€แžถแž“แŸ‹แž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แž”แž“แŸ’แž" แŸ”

แž—แžถแžŸแžถ P4 แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„แžŠแŸ†แž”แžผแž„แžŠแŸ„แž™แž€แŸ’แžšแžปแž˜แžœแžทแžŸแŸ’แžœแž€แžš แž“แžทแž„แžขแŸ’แž“แž€แžŸแŸ’แžšแžถแžœแž‡แŸ’แžšแžถแžœแž˜แž€แž–แžธ Google, Intel, Microsoft Research, Barefoot, Princeton แž“แžทแž„ Stanford แŸ” แž‚แŸ„แž›แžŠแŸ…แž‚แžบแžŸแžถแž˜แž‰แŸ’แž‰แŸ– แž”แž„แŸ’แž€แžพแžแž—แžถแžŸแžถแž„แžถแž™แžŸแŸ’แžšแžฝแž›แž”แŸ’แžšแžพ แžŠแŸ‚แž›แžขแŸ’แž“แž€แž”แž„แŸ’แž€แžพแžแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžขแžถแž…แžšแŸ€แž“แž€แŸ’แž“แžปแž„แž˜แžฝแž™แžแŸ’แž„แŸƒ แž แžพแž™แž”แŸ’แžšแžพแžŠแžพแž˜แŸ’แž”แžธแž–แžทแž–แžŽแŸŒแž“แžถแž™แŸ‰แžถแž„แžแŸ’แžšแžนแž˜แžแŸ’แžšแžผแžœแžขแŸ†แž–แžธแžšแž”แŸ€แž”แžŠแŸ‚แž›แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แž‰แžพแžแžถแž˜แž”แžŽแŸ’แžแžถแž‰แž“แžถแž“แžถแŸ”

แžแžถแŸ†แž„แž–แžธแžŠแžพแž˜แžŠแŸ†แž”แžผแž„ P4 แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž…แž“แžถแžกแžพแž„แžŠแžพแž˜แŸ’แž”แžธแž‡แžถแž‚แŸ„แž›แžŠแŸ…แžฏแž€แžšแžถแž‡แŸ’แž™ (แžงแž‘แžถแž แžšแžŽแŸแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แžŸแžšแžŸแŸแžšแž€แŸ’แž“แžปแž„ P4 แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž…แž„แž€แŸ’แžšแž„แž˜แžทแž“แž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแžŠแžพแž˜แŸ’แž”แžธแžŠแŸ†แžŽแžพแžšแž€แžถแžšแž›แžพแž‚แŸ„แž›แžŠแŸ…แž•แŸ’แžŸแŸแž„แŸ—แž‚แŸ’แž“แžถแžŠแžผแž…แž‡แžถ ASICs FPGAs CPUs NPUs แž“แžทแž„ GPUs)แŸ”

แž—แžถแžŸแžถแž€แŸแž‡แžถแž–แžทแž’แžธแž€แžถแžšแžฏแž€แžšแžถแž‡แŸ’แž™แž•แž„แžŠแŸ‚แžš (แžง. แž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4 แžขแžถแž…แž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแž–แžทแž’แžธแž€แžถแžšแžŸแŸ’แžแž„แŸ‹แžŠแžถแžšแžŠแŸ‚แž›แž˜แžถแž“แžŸแŸ’แžšแžถแž”แŸ‹ แžฌแžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŠแžพแž˜แŸ’แž”แžธแž”แž‰แŸ’แž‡แžถแž€แŸ‹แžšแž”แŸ€แž”แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“แž•แŸ’แž‘แžถแž›แŸ‹แžแŸ’แž›แžฝแž“แžแŸ’แž˜แžธ)แŸ”

แž“แŸ…แž€แŸ’แž“แžปแž„แžงแžŸแŸ’แžŸแžถแž แž€แž˜แŸ’แž˜ P4 แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžงแž”แž€แžšแžŽแŸแŸ” แž”แŸ’แžšแž แŸ‚แž›แž‡แžถแž“แžถแž–แŸแž›แžขแž“แžถแž‚แž Internet-RFC แž“แžทแž„แžŸแŸ’แžแž„แŸ‹แžŠแžถแžš IEEE แž€แŸแž“แžนแž„แžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž›แž€แžถแžšแž”แž‰แŸ’แž‡แžถแž€แŸ‹ P4 แž•แž„แžŠแŸ‚แžšแŸ”

P4 แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‘แžถแŸ†แž„แžงแž”แž€แžšแžŽแŸแžŠแŸ‚แž›แžขแžถแž…แžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž”แžถแž“ แž“แžทแž„แžงแž”แž€แžšแžŽแŸแž˜แžปแžแž„แžถแžšแžแŸแžšแŸ” แžงแž‘แžถแž แžšแžŽแŸ แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŠแžพแž˜แŸ’แž”แžธแž€แžแŸ‹แžแŸ’แžšแžถแž™แŸ‰แžถแž„แžแŸ’แžšแžนแž˜แžแŸ’แžšแžผแžœแž“แžผแžœแžฅแžšแžทแž™แžถแž”แžแž“แŸƒแž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž”แŸ†แž–แž„แŸ‹แž“แŸ…แž€แŸ’แž“แžปแž„ Switch Abstraction Interface (SAI) APIs แžŠแŸ‚แž›แž”แŸ’แžšแžพแžŠแŸ„แž™แž”แŸ’แžšแž—แž–แž”แžพแž€แž…แŸ†แž แžš SONiC switch OS แŸ” P4 แž€แŸแžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแž“แŸ…แž€แŸ’แž“แžปแž„แž‚แž˜แŸ’แžšแŸ„แž„ ONF Stratum แžŠแžพแž˜แŸ’แž”แžธแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแžฅแžšแžทแž™แžถแž”แž‘แž†แŸ’แž›แž„แž€แžถแžแŸ‹แžงแž”แž€แžšแžŽแŸแžแŸแžš แž“แžทแž„แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‡แžถแž…แŸ’แžšแžพแž“แž”แŸ’แžšแž—แŸแž‘แŸ”

แž‡แžถแž›แžพแž€แžŠแŸ†แž”แžผแž„ แž€แžถแžšแž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแžฅแžšแžทแž™แžถแž”แžแžšแž”แžŸแŸ‹แž€แžปแž„แžแžถแž€แŸ‹ แž“แžทแž„แžขแžถแžŠแžถแž”แŸ‹แž‘แŸแžšแž”แžŽแŸ’แžแžถแž‰แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แžขแŸ’แž“แž€แž”แž„แŸ’แž€แžพแžแž‚แŸ†แžšแžผแžŠแŸ‚แž›แžขแžถแž…แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž”แžถแž“แžแŸ’แžšแžนแž˜แžแŸ’แžšแžผแžœแž“แŸƒแž”แžŽแŸ’แžแžถแž‰แž‘แžถแŸ†แž„แž˜แžผแž›แž˜แžปแž“แž–แŸแž›แžŠแžถแž€แŸ‹แžฑแŸ’แž™แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แŸ” แžขแŸ’แž“แž€แž•แŸ’แžแž›แŸ‹แžŸแŸแžœแžถแž–แž–แž€แž’แŸ†แžขแžถแž…แžŸแžถแž€แž›แŸ’แž”แž„ แž“แžทแž„แž”แŸ†แž”แžถแžแŸ‹แž€แŸ†แž แžปแžŸแž”แžŽแŸ’แžแžถแž‰แž‘แžถแŸ†แž„แžŸแŸ’แžšแžปแž„แžŠแŸ„แž™แž”แŸ’แžšแžพแž€แž˜แŸ’แž˜แžœแžทแž’แžธ แžŠแŸ„แž™แž€แžถแžแŸ‹แž”แž“แŸ’แžแž™แž–แŸแž›แžœแŸแž›แžถ แž“แžทแž„แžแž˜แŸ’แž›แŸƒแž“แŸƒแž€แžถแžšแž’แŸ’แžœแžพแžแŸแžŸแŸ’แžแžขแž“แŸ’แžแžšแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž˜แž“แŸ’แž‘แžธแžšแž–แžทแžŸแŸ„แž’แž“แŸ แžŠแŸ„แž™แž˜แžทแž“แž…แžถแŸ†แž”แžถแž…แŸ‹แž‘แžถแž˜แž‘แžถแžšแž•แŸ’แž“แŸ‚แž€แžšแžนแž„แž˜แžถแž“แžแž˜แŸ’แž›แŸƒแžแŸ’แž›แŸƒแŸ”

แžŠแŸ„แž™แž”แŸ’แžšแžพ P4 แžขแŸ’แž“แž€แž›แž€แŸ‹แžงแž”แž€แžšแžŽแŸแž”แžŽแŸ’แžแžถแž‰แžขแžถแž…แžšแŸ†แž–แžนแž„แžแžถแž“แžนแž„แž˜แžถแž“แžฅแžšแžทแž™แžถแž”แžแž€แŸ†แžŽแžแŸ‹แž•แŸ’แž›แžผแžœแž‘แžผแž‘แŸ…แž“แŸ…แž‘แžผแž‘แžถแŸ†แž„แž•แž›แžทแžแž•แž›แž‘แžถแŸ†แž„แžขแžŸแŸ‹ แžŠแŸ‚แž›แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แž”แŸ’แžšแžพแžกแžพแž„แžœแžทแž‰แž“แžผแžœแž แŸแžŠแŸ’แž‹แžถแžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžŸแžถแž€แž›แŸ’แž”แž„ แž’แŸ’แžœแžพแžฑแŸ’แž™แž€แžถแžšแžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แž„แžถแž™แžŸแŸ’แžšแžฝแž› แž“แžทแž„แž…แžปแž„แž€แŸ’แžšแŸ„แž™แž’แžถแž“แžถแžฑแŸ’แž™แž˜แžถแž“แžขแž“แŸ’แžแžšแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแŸ”

แž‡แžถโ€‹แž€แžถแžšโ€‹แž–แžทแžโ€‹แžŽแžถแžŸแŸ‹ P4 แžขแžถแž…โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แžถแž“โ€‹แž”แŸ’แžšแžพโ€‹แžŠแžพแž˜แŸ’แž”แžธโ€‹แžŸแžšแžŸแŸแžšโ€‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธโ€‹แžŠแŸ‚แž›โ€‹แž–แžทแž–แžŽแŸŒแž“แžถโ€‹แž–แžธโ€‹แžœแžทแž’แžธโ€‹แžแŸ’แž˜แžธโ€‹แž‘แžถแŸ†แž„โ€‹แžŸแŸ’แžšแžปแž„โ€‹แž“แŸƒโ€‹แž€แžถแžšโ€‹แž€แŸ†แžŽแžแŸ‹โ€‹แž•แŸ’แž›แžผแžœแŸ” แžงแž‘แžถแž แžšแžŽแŸ P4 แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แŸแž”แŸ’แžšแžพแž™แŸ‰แžถแž„แž‘แžผแž›แŸ†แž‘แžผแž›แžถแž™แžŸแž˜แŸ’แžšแžถแž”แŸ‹ telemetry แž“แžทแž„แž€แžถแžšแžœแžถแžŸแŸ‹แžœแŸ‚แž„แž“แŸ…แž€แŸ’แž“แžปแž„แž˜แž‡แŸ’แžˆแž˜แžŽแŸ’แžŒแž›แž‘แžทแž“แŸ’แž“แž“แŸแž™ แž”แžŽแŸ’แžแžถแž‰แžŸแž แž‚แŸ’แžšแžถแžŸ แž“แžทแž„แžขแŸ’แž“แž€แž•แŸ’แžแž›แŸ‹แžŸแŸแžœแžถแŸ”

แžŸแž แž‚แž˜แž“แŸแžŸแŸ’แžšแžถแžœแž‡แŸ’แžšแžถแžœแž€แŸแž”แžถแž“แž”แž„แŸ’แž€แžพแž“แž•แž„แžŠแŸ‚แžšแŸ” แž€แŸ’แžšแžปแž˜แžŸแŸ’แžšแžถแžœแž‡แŸ’แžšแžถแžœแž”แžŽแŸ’แžแžถแž‰แžŸแžทแž€แŸ’แžŸแžถแžˆแžถแž“แž˜แžปแžแž‚แŸแž‡แžถแž…แŸ’แžšแžพแž“แž”แžถแž“แž”แŸ„แŸ‡แž–แžปแž˜แŸ’แž–แž•แŸ’แžŸแžถแž™แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžแŸ’แž˜แžธแž‚แžฝแžšแžฑแŸ’แž™แžšแŸ†แž—แžพแž”แžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4 แžšแžฝแž˜แž‘แžถแŸ†แž„แž€แžถแžšแž•แŸ’แž‘แžปแž€แžแžปแž›แŸ’แž™แž—แžถแž– แž–แžทแž’แžธแž€แžถแžšแžฏแž€แž—แžถแž– แž“แžทแž„แž€แžถแžšแžšแž€แŸ’แžŸแžถแž‘แžปแž€แžแž˜แŸ’แž›แŸƒแž‚แž“แŸ’แž›แžนแŸ‡แŸ” แž‚แŸ†แžšแžผแž“แŸƒแž€แžถแžšแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžแŸ’แž˜แžธแž˜แžฝแž™แž€แŸ†แž–แžปแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„ แž€แžถแžšแž…แŸ’แž“แŸƒแž”แŸ’แžšแžŒแžทแžแž€แŸ†แž–แžปแž„แž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž–แžธแž•แŸ’แž“แŸ‚แž€แžšแžนแž„แž‘แŸ…แž•แŸ’แž“แŸ‚แž€แž‘แž“แŸ‹ แžŠแŸ‚แž›แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แž˜แžถแž“แž‚แŸ†แž“แžทแžแžŠแŸ‚แž›แž˜แžทแž“แž“แžนแž€แžŸแŸ’แž˜แžถแž“แžŠแž›แŸ‹ แžแŸ’แž˜แžธ แž“แžทแž„แž†แŸ’แž›แžถแžแžœแŸƒแž‡แžถแž…แŸ’แžšแžพแž“แž›แŸแž…แžกแžพแž„แŸ”

แžŸแž แž‚แž˜แž“แŸแžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž”แžถแž“แž…แžผแž›แžšแžฝแž˜แž…แŸ†แžŽแŸ‚แž€แž™แŸ‰แžถแž„แžŸแŸ†แžแžถแž“แŸ‹แž…แŸ†แž–แŸ„แŸ‡แž€แžถแžšแžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž€แžผแžŠ แžšแžฝแž˜แž‘แžถแŸ†แž„แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แž„แž€แŸ’แžšแž„ แž”แŸ†แž–แž„แŸ‹แž”แž„แŸ’แž แžผแžš แž‚แŸ†แžšแžผแžขแžถแž€แž”แŸ’แž”แž€แžทแžšแžทแž™แžถ APIs แž€แŸ’แžšแž”แžแŸแžŽแŸ’แžŒแžŸแžถแž€แž›แŸ’แž”แž„ แž€แž˜แŸ’แž˜แžœแžทแž’แžธ แž“แžทแž„แž…แŸ’แžšแžพแž“แž‘แŸ€แžแŸ” แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แžŠแžผแž…แž‡แžถ 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

แž›แž‘แŸ’แž’แž—แžถแž–แž“แŸƒแž€แžถแžšแžŠแžถแž€แŸ‹แž–แžถแž€แŸ’แž™

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4
แžŠแŸ„แž™แžŸแžถแžšแž—แžถแžŸแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž”แž˜แŸ’แžšแžปแž„แž‘แžปแž€แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž€แŸ†แžŽแžแŸ‹แž•แŸ’แž›แžผแžœ แž”แž‰แŸ’แž‡แžธแž“แŸƒแžแž˜แŸ’แžšแžผแžœแž€แžถแžš แž“แžทแž„แž‡แž˜แŸ’แžšแžพแžŸแž“แŸƒแž€แžถแžšแžšแž…แž“แžถแž‚แžบแžแžปแžŸแž‚แŸ’แž“แžถแž”แžพแž”แŸ’แžšแŸ€แž”แž’แŸ€แž”แž‘แŸ…แž“แžนแž„แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แž˜แžถแž“แž‚แŸ„แž›แž”แŸ†แžŽแž„แž‘แžผแž‘แŸ…แŸ” แž›แž€แŸ’แžแžŽแŸˆแžŸแŸ†แžแžถแž“แŸ‹แŸ—แž“แŸƒแž—แžถแžŸแžถแž‚แžบแŸ–

  1. แžฏแž€แžšแžถแž‡แŸ’แž™แž—แžถแž–แž–แžธแž€แžถแžšแžขแž“แžปแžœแžแŸ’แžแž‚แŸ„แž›แžŠแŸ…;
  2. แžฏแž€แžšแžถแž‡แŸ’แž™แž—แžถแž–แž“แŸƒแž–แžทแž’แžธแž€แžถแžš (s) แž”แžถแž“แž”แŸ’แžšแžพ;
  3. แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžœแžถแž›แžกแžพแž„แžœแžทแž‰แŸ”

แžฏแž€แžšแžถแž‡แŸ’แž™แž–แžธแž€แžถแžšแžขแž“แžปแžœแžแŸ’แžแž‚แŸ„แž›แžŠแŸ…

แž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4 แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž…แž“แžถแžกแžพแž„แžŠแžพแž˜แŸ’แž”แžธแžฑแŸ’แž™แž˜แžถแž“แž€แžถแžšแžขแž“แžปแžœแžแŸ’แžแžŠแŸ„แž™แžฏแž€แžšแžถแž‡แŸ’แž™ แž˜แžถแž“แž“แŸแž™แžแžถแž–แžฝแž€แžœแžถแžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž…แž„แž€แŸ’แžšแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แŸ’แžšแž—แŸแž‘แž•แŸ’แžŸแŸแž„แŸ—แž“แŸƒแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžท แžŠแžผแž…แž‡แžถแž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‘แžผแž‘แŸ… FPGAs แž”แŸ’แžšแž–แŸแž“แŸ’แž’แž“แŸ…แž›แžพแž”แž“แŸ’แž‘แŸ‡แžˆแžธแž” แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž”แžŽแŸ’แžแžถแž‰ แž“แžทแž„ ASICs แŸ” แž”แŸ’แžšแž—แŸแž‘แž•แŸ’แžŸแŸแž„แž‚แŸ’แž“แžถแž“แŸƒแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž‘แžถแŸ†แž„แž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แŸแžŸแŸ’แž‚แžถแž›แŸ‹แžแžถแž‡แžถแž‚แŸ„แž›แžŠแŸ… P4 แž แžพแž™แž‚แŸ„แž›แžŠแŸ…แž“แžธแž˜แžฝแž™แŸ—แžแž˜แŸ’แžšแžผแžœแžฑแŸ’แž™แžขแŸ’แž“แž€แž…แž„แž€แŸ’แžšแž„แžŠแžพแž˜แŸ’แž”แžธแž”แŸ†แž”แŸ’แž›แŸ‚แž„แž€แžผแžŠแž”แŸ’แžšแž—แž– P4 แž‘แŸ…แž‡แžถแž‚แŸ†แžšแžผแž”แŸ’แžŠแžผแžšแž‚แŸ„แž›แžŠแŸ…แŸ” แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แž„แž€แŸ’แžšแž„แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„แž“แŸ…แž€แŸ’แž“แžปแž„แžงแž”แž€แžšแžŽแŸแž‚แŸ„แž›แžŠแŸ… แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžแžถแž„แž€แŸ’แžšแŸ… แžฌแžŸแžผแž˜แŸ’แž”แžธแžแŸ‚แžŸแŸแžœแžถแž€แž˜แŸ’แž˜แž–แž–แž€แŸ” แžŠแŸ„แž™แžŸแžถแžšแžแŸ‚แž‚แŸ„แž›แžŠแŸ…แžŠแžพแž˜แž‡แžถแž…แŸ’แžšแžพแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4 แž‚แžบแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž”แŸ’แžแžผแžšแž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แžŸแžถแž˜แž‰แŸ’แž‰ แžœแžถแž‡แžถแžšแžฟแž„แž’แž˜แŸ’แž˜แžแžถแžŽแžถแžŸแŸ‹แž€แŸ’แž“แžปแž„แž€แžถแžšแžฎแž–แžถแž€แŸ’แž™ "P4 switch" แž‘แŸ„แŸ‡แž”แžธแž‡แžถ "P4 target" แž˜แžถแž“แž—แžถแž–แžแŸ’แžšแžนแž˜แžแŸ’แžšแžผแžœแž‡แžถแž„แž€แŸแžŠแŸ„แž™แŸ”

แžฏแž€แžšแžถแž‡แŸ’แž™แž—แžถแž–แž“แŸƒแž–แžทแž’แžธแž€แžถแžš (s) แž”แžถแž“แž”แŸ’แžšแžพ

P4 แž‚แžบแž‡แžถแž–แžทแž’แžธแž€แžถแžšแžฏแž€แžšแžถแž‡แŸ’แž™แŸ” แž“แŸแŸ‡แž˜แžถแž“แž“แŸแž™แžแžถแž—แžถแžŸแžถแž˜แžทแž“แž˜แžถแž“แž€แžถแžšแž‚แžถแŸ†แž‘แŸ’แžšแžŠแžพแž˜แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž–แžทแž’แžธแž€แžถแžšแž‘แžผแž‘แŸ…แžŠแžผแž…แž‡แžถ IP, Ethernet, TCP, VxLAN แžฌ MPLS แž‘แŸแŸ” แž•แŸ’แž‘แžปแž™แž‘แŸ…แžœแžทแž‰ แžขแŸ’แž“แž€แžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4 แž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแž‘แž˜แŸ’แžšแž„แŸ‹แž”แž‹แž˜แž€แžแžถ แž“แžทแž„แžˆแŸ’แž˜แŸ„แŸ‡แžœแžถแž›แž“แŸƒแž–แžทแž’แžธแž€แžถแžšแžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž€แžถแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แž˜แŸ’แž˜แžœแžทแž’แžธ แžŠแŸ‚แž›แž“แŸ…แž€แŸ’แž“แžปแž„แžœแŸแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž€แžŸแŸ’แžšแžถแž™ แž“แžทแž„แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŠแŸ„แž™แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แž„แž€แŸ’แžšแž„ แž“แžทแž„แžงแž”แž€แžšแžŽแŸแž‚แŸ„แž›แžŠแŸ…แŸ”

แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžœแžถแž›แžกแžพแž„แžœแžทแž‰

แžฏแž€แžšแžถแž‡แž—แžถแž–แž“แŸƒแž–แžทแž’แžธแžŸแžถแžš แž“แžทแž„แž‚แŸ†แžšแžผแž—แžถแžŸแžถแžขแžšแžผแž”แžธแžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžกแžพแž„แžœแžทแž‰ แž‚แŸ„แž›แžŠแŸ… P4 แž‚แžฝแžšแžแŸ‚แžขแžถแž…แž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž”แŸ’แžšแž–แŸแž“แŸ’แž’แžแŸ’แžšแžผแžœแž”แžถแž“แžŠแžถแž€แŸ‹แžฑแŸ’แž™แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แŸ” แžŸแž˜แžแŸ’แžแž—แžถแž–แž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž—แŸ’แž‡แžถแž”แŸ‹แž‡แžถแž”แŸ’แžšแž–แŸƒแžŽแžธแž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แžแžถแž˜แžšแž™แŸˆแž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‘แžผแž‘แŸ… แžฌแž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž”แžŽแŸ’แžแžถแž‰ แž‡แžถแž‡แžถแž„แžŸแŸ€แž‚แŸ’แžœแžธแžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž›แž‚แŸ’แž“แžถแžŠแŸ‚แž›แž˜แžถแž“แž˜แžปแžแž„แžถแžšแžแŸแžšแŸ”

แž‘แŸ„แŸ‡แž”แžธแž‡แžถแž˜แžทแž“แž˜แžถแž“แžขแŸ’แžœแžธแž“แŸ…แž€แŸ’แž“แžปแž„แž—แžถแžŸแžถแžŠแŸ‚แž›แž“แžนแž„แžšแžถแžšแžถแŸ†แž„แž€แžถแžšแž”แž„แŸ’แž€แžพแž“แž”แŸ’แžšแžŸแžทแž‘แŸ’แž’แž—แžถแž–แž“แŸƒแžŠแŸ†แžŽแžพแžšแž€แžถแžšแž“แŸƒแžŸแŸ†แžŽแžปแŸ†แž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แž“แŸƒแž–แžทแž’แžธแž€แžถแžšแž€แŸแžŠแŸ„แž™ แž€แžถแžšแž”แž„แŸ’แž€แžพแž“แž”แŸ’แžšแžŸแžทแž‘แŸ’แž’แž—แžถแž–แž‘แžถแŸ†แž„แž“แŸแŸ‡แž‚แžบแž˜แžทแž“แžขแžถแž…แž˜แžพแž›แžƒแžพแž‰แžŠแŸ„แž™แžขแŸ’แž“แž€แž“แžทแž–แž“แŸ’แž’แž—แžถแžŸแžถ แž แžพแž™แž‘แžธแž”แŸ†แž•แžปแžแžขแžถแž…แž€แžถแžแŸ‹แž”แž“แŸ’แžแž™แž—แžถแž–แž”แžแŸ‹แž”แŸ‚แž“แž“แŸƒแž”แŸ’แžšแž–แŸแž“แŸ’แž’ แž“แžทแž„แž‚แŸ„แž›แžŠแŸ… แž“แžทแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžกแžพแž„แžœแžทแž‰แžšแž”แžŸแŸ‹แž–แžฝแž€แž‚แŸแŸ”

แž›แž€แŸ’แžแžŽแŸˆแž“แŸƒแž—แžถแžŸแžถแž‘แžถแŸ†แž„แž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แžŠแžถแž€แŸ‹แž…แŸแž‰แžŠแŸ†แž”แžผแž„แžŠแŸ„แž™แžขแŸ’แž“แž€แž”แž„แŸ’แž€แžพแžแžšแž”แžŸแŸ‹แžœแžถ แžŠแŸ„แž™แž•แŸ’แžแŸ„แžแž›แžพแž€แžถแžšแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž™แŸ‰แžถแž„แž‘แžผแž›แŸ†แž‘แžผแž›แžถแž™แž“แŸ…แž€แŸ’แž“แžปแž„แž แŸแžŠแŸ’แž‹แžถแžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž”แžŽแŸ’แžแžถแž‰แŸ”

แž—แžถแžŸแžถแž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แžšแžฝแž…แž แžพแž™แž“แŸ…แž€แŸ’แž“แžปแž„แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แž‡แžถแž…แŸ’แžšแžพแž“แŸ–

1) แž˜แž‡แŸ’แžˆแž˜แžŽแŸ’แžŒแž›แž‘แžทแž“แŸ’แž“แž“แŸแž™ Hyperscale;

แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แž…แžทแž“ Tencent แž‚แžบแž‡แžถแž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แžœแžทแž“แžทแž™แŸ„แž‚แž’แŸ†แž‡แžถแž„แž‚แŸแž“แŸ…แž›แžพแž–แžทแž—แž–แž›แŸ„แž€ แž“แžทแž„แž‡แžถแž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แž”แžŽแŸ’แžแžถแž€แŸ‹แž‘แžปแž“แž’แŸ†แž‡แžถแž„แž‚แŸแž˜แžฝแž™แŸ” แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แž”แžปแžแŸ’แžšแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžšแž”แžŸแŸ‹ Tencent แž‘แžถแŸ†แž„แž“แŸ…แž€แŸ’แž“แžปแž„แž”แŸ’แžšแž‘แŸแžŸแž…แžทแž“ แž“แžทแž„แž€แŸ’แž“แžปแž„แž”แŸ’แžšแž‘แŸแžŸแž•แŸ’แžŸแŸแž„แž‘แŸ€แžแž‡แžปแŸ†แžœแžทแž‰แž–แžทแž—แž–แž›แŸ„แž€ แž˜แžถแž“แž‡แŸ†แž“แžถแž‰แž€แŸ’แž“แžปแž„แžœแžทแžŸแŸแž™แž•แŸ’แžŸแŸแž„แŸ—แž“แŸƒแžขแžถแž‡แžธแžœแž€แž˜แŸ’แž˜แž”แž…แŸ’แž…แŸแž€แžœแžทแž‘แŸ’แž™แžถแžแŸ’แž–แžŸแŸ‹ แžšแžฝแž˜แž‘แžถแŸ†แž„แžŸแŸแžœแžถแžขแŸŠแžธแž“แž’แžบแžŽแžทแžแž•แŸ’แžŸแŸแž„แŸ— แž€แžถแžšแžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž€แŸ’แž“แžปแž„แžœแžทแžŸแŸแž™แž”แž‰แŸ’แž‰แžถแžŸแžทแž”แŸ’แž”แž“แžทแž˜แžทแžแŸ’แž แž“แžทแž„แž€แžถแžšแž€แž˜แŸ’แžŸแžถแž“แŸ’แžแžขแŸแžกแžทแž…แžแŸ’แžšแžผแž“แžทแž€แŸ”

P4 แž“แžทแž„โ€‹แž€แžถแžšโ€‹แž€แŸ†แžŽแžแŸ‹โ€‹แž•แŸ’แž›แžผแžœโ€‹แžŠแŸ‚แž›โ€‹แžขแžถแž…โ€‹แžŸแžšแžŸแŸแžšโ€‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธโ€‹แž”แžถแž“โ€‹แž‚แžบโ€‹แž‡แžถโ€‹แž”แž…แŸ’แž…แŸแž€แžœแžทแž‘แŸ’แž™แžถโ€‹แž‘แŸ†แž“แžพแž”โ€‹แžŠแŸ‚แž›โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แžถแž“โ€‹แž”แŸ’แžšแžพโ€‹แž€แŸ’แž“แžปแž„โ€‹แžŸแŸ’แžแžถแž”แžแŸ’แž™แž€แž˜แŸ’แž˜โ€‹แž”แžŽแŸ’แžแžถแž‰โ€‹แžšแž”แžŸแŸ‹โ€‹แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แŸ”

แž€แŸ’แž“แžปแž„แž“แžถแž˜แž‡แžถแžขแŸ’แž“แž€แž”แž„แŸ’แž€แžพแžแž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“ Google แž˜แžถแž“แž˜แŸ„แž‘แž“แž—แžถแž–แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แžแŸ‹แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž€แžถแžšแž‘แž‘แžฝแž›แž™แž€ P4 แž™แŸ‰แžถแž„แž†แžถแž”แŸ‹แžšแž แŸแžŸแž“แŸ…แž€แŸ’แž“แžปแž„แžงแžŸแŸ’แžŸแžถแž แž€แž˜แŸ’แž˜แž”แžŽแŸ’แžแžถแž‰ แž“แžทแž„แž‡แžถแž–แžทแžŸแŸแžŸแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแžšแž…แž“แžถแžŸแŸ’แžแžถแž”แžแŸ’แž™แž€แž˜แŸ’แž˜แž˜แž‡แŸ’แžˆแž˜แžŽแŸ’แžŒแž›แž‘แžทแž“แŸ’แž“แž“แŸแž™แŸ”

2) แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แž–แžถแžŽแžทแž‡แŸ’แž‡แž€แž˜แŸ’แž˜;

แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“ Goldman Sachs แž‘แžถแž‰แž™แž€แžขแžแŸ’แžแž”แŸ’แžšแž™แŸ„แž‡แž“แŸแž–แžธแž€แžถแžšแž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แžŸแž แž‚แž˜แž“แŸแž”แŸ’แžšแž—แž–แž”แžพแž€แž…แŸ†แž  แž“แžทแž„แž”แž„แŸ’แž€แžพแžแžŸแŸ’แžแž„แŸ‹แžŠแžถแžšแž‘แžผแž‘แŸ… แž“แžทแž„แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž€แŸ’แž“แžปแž„แž€แžถแžšแž…แŸ’แž“แŸƒแž”แŸ’แžšแžŒแžทแžแž แŸแžŠแŸ’แž‹แžถแžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž”แžŽแŸ’แžแžถแž‰ แž“แžทแž„แž•แŸ’แžแž›แŸ‹แž“แžผแžœแžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž€แžถแž“แŸ‹แžแŸ‚แž”แŸ’แžšแžŸแžพแžšแžกแžพแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแžแžทแžแžทแž‡แž“แŸ”

3) แž•แž›แžทแžแž€แž˜แŸ’แž˜;

แžงแžŸแŸ’แžŸแžถแž แž€แž˜แŸ’แž˜แž”แžŽแŸ’แžแžถแž‰แž‘แžถแŸ†แž„แž˜แžผแž›แž“แžนแž„แž‘แž‘แžฝแž›แž”แžถแž“แžขแžแŸ’แžแž”แŸ’แžšแž™แŸ„แž‡แž“แŸแž–แžธแž—แžถแžŸแžถแžŠแžผแž…แž‡แžถ P4 แžŠแŸ‚แž›แž€แŸ†แžŽแžแŸ‹แž›แž€แŸ’แžแžŽแŸˆแž“แŸƒแž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แž”แž“แŸ’แžแŸ” Cisco แž€แŸแž‡แžฟแž‡แžถแž€แŸ‹แž›แžพแž€แžถแžšแž•แŸ’แž‘แŸแžšแžแŸ’แžŸแŸ‚แž•แž›แžทแžแž•แž›แžšแž”แžŸแŸ‹แžแŸ’แž›แžฝแž“แžŠแžพแž˜แŸ’แž”แžธแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž—แžถแžŸแžถแž“แŸแŸ‡แŸ”

Juniper Networks แž”แžถแž“แžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž› P4 แž“แžทแž„ P4 Runtime แž“แŸ…แž€แŸ’แž“แžปแž„แž•แž›แžทแžแž•แž›แž˜แžฝแž™แž…แŸ†แž“แžฝแž“ แž แžพแž™แž•แŸ’แžแž›แŸ‹แž“แžผแžœแž€แžถแžšแž…แžผแž›แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‘แŸ…แž€แžถแž“แŸ‹แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŠแŸ‚แž›แž”แžถแž“แž”แž„แŸ’แž€แž”แŸ‹ Juniper แž“แžทแž„แž€แžผแžŠแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžšแž”แžŸแŸ‹แžœแžถแŸ”

Ruijie Networks แž‚แžบแž‡แžถแžขแŸ’แž“แž€แž‚แžถแŸ†แž‘แŸ’แžšแžŠแŸแžšแžนแž„แž˜แžถแŸ†แžšแž”แžŸแŸ‹ P4 แž“แžทแž„แžขแžแŸ’แžแž”แŸ’แžšแž™แŸ„แž‡แž“แŸแžŠแŸ‚แž›แžœแžถแž“แžถแŸ†แž˜แž€แž“แžผแžœแž”แžŽแŸ’แžแžถแž‰แŸ” แž‡แžถแž˜แžฝแž™แž“แžนแž„ P4 แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แžขแžถแž…แž”แž„แŸ’แž€แžพแž แž“แžทแž„แž•แŸ’แžแž›แŸ‹แž“แžผแžœแžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž›แŸ’แžขแž”แŸ†แž•แžปแžแž€แŸ’แž“แžปแž„แžแŸ’แž“แžถแž€แŸ‹แžŠแž›แŸ‹แžขแžแžทแžแžทแž‡แž“แž‡แžถแž…แŸ’แžšแžพแž“แž”แŸ’แžšแž—แŸแž‘แŸ”

4) แžขแŸ’แž“แž€แž•แŸ’แžแž›แŸ‹แžŸแŸแžœแžถแž‘แžผแžšแž‚แž˜แž“แžถแž‚แž˜แž“แŸ;

AT&T แž‚แžบแž‡แžถแžขแŸ’แž“แž€แž‘แž‘แžฝแž›แž™แž€ P4 แžŠแŸ†แž”แžผแž„แž‚แŸแž”แž„แŸ’แžขแžŸแŸ‹แžŠแŸ‚แž›แž”แŸ’แžšแžพ P4 แžŠแžพแž˜แŸ’แž”แžธแž€แŸ†แžŽแžแŸ‹แžฅแžšแžทแž™แžถแž”แž‘แžŠแŸ‚แž›แžœแžถแž…แž„แŸ‹แžƒแžพแž‰แž“แŸ…แž€แŸ’แž“แžปแž„แž”แžŽแŸ’แžแžถแž‰แžšแž”แžŸแŸ‹แžแŸ’แž›แžฝแž“ แž“แžทแž„แžŠแžพแž˜แŸ’แž”แžธแž”แŸ’แžšแžพแžงแž”แž€แžšแžŽแŸแž”แž‰แŸ’แž‡แžผแž“แž”แž“แŸ’แžแžŠแŸ‚แž›แžขแžถแž…แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž”แžถแž“ P4 แž“แŸ…แž›แžพแž”แžŽแŸ’แžแžถแž‰แžšแž”แžŸแŸ‹แžœแžถแŸ”

แž“แŸ… Deutsche Telekom แž—แžถแžŸแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŠแžพแž˜แŸ’แž”แžธแž’แŸ’แžœแžพแž‚แŸ†แžšแžผแž˜แžปแžแž„แžถแžšแž”แžŽแŸ’แžแžถแž‰แžŸแŸ†แžแžถแž“แŸ‹แŸ—แžŠแŸ‚แž›แž‡แžถแž•แŸ’แž“แŸ‚แž€แž˜แžฝแž™แž“แŸƒแž€แž˜แŸ’แž˜แžœแžทแž’แžธ Access 4.0 แŸ”

5) แžงแžŸแŸ’แžŸแžถแž แž€แž˜แŸ’แž˜ semiconductor;

แž—แžถแžŸแžถแž“แŸแŸ‡แž”แžถแž“แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžš Barefoot แžŠแžพแž˜แŸ’แž”แžธแžขแž“แžปแžœแžแŸ’แžแž‚แŸ†แžšแžผแžแŸ’แž˜แžธแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž•แŸ’แžแž›แŸ‹แžŸแž˜แžแŸ’แžแž—แžถแž–แž•แŸ’แž“แŸ‚แž€แž‘แž“แŸ‹แž‘แŸ…แž€แžถแž“แŸ‹แž™แž“แŸ’แžแž แŸ„แŸ‡แž€แŸ†แžŽแžแŸ‹แž•แŸ’แž›แžผแžœแž”แžŽแŸ’แžแžถแž‰แŸ”

Xilinx แž‚แžบแž‡แžถแžŸแŸ’แžแžถแž”แž“แžทแž€แž˜แŸ’แž“แžถแž€แŸ‹แž“แŸƒ P4.org แž แžพแž™แž”แžถแž“แž…แžผแž›แžšแžฝแž˜แž™แŸ‰แžถแž„แžŸแž€แž˜แŸ’แž˜แž€แŸ’แž“แžปแž„แž€แžถแžšแžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž—แžถแžŸแžถ P4 แž แžพแž™แž”แžถแž“แžขแž“แžปแžœแžแŸ’แžแžœแžถแž‘แŸ…แž€แŸ’แž“แžปแž„แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แž˜แžถแž“แž˜แžผแž›แžŠแŸ’แž‹แžถแž“แž›แžพ FPGA แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธ SmartNIC แž“แžทแž„ NFV hardware แžŠแŸ„แž™แž”แž‰แŸ’แž…แŸแž‰แž“แžผแžœแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แž„แž€แŸ’แžšแž„ P416 แžŠแŸ†แž”แžผแž„แž”แž„แŸ’แžขแžŸแŸ‹แžŠแŸ‚แž›แž‡แžถแž•แŸ’แž“แŸ‚แž€แž˜แžฝแž™แž“แŸƒแž€แžถแžšแžšแž…แž“แžถ SDNet แŸ”

6) แž€แž˜แŸ’แž˜แžœแžทแž’แžธแŸ”

VMware แž‡แžฟแž‡แžถแž€แŸ‹แžแžถ P4 แž”แž„แŸ’แž€แžพแžแžแžถแž˜แž–แž› แž€แžถแžšแž…แŸ’แž“แŸƒแž”แŸ’แžšแžŒแžทแž แž“แžทแž„แžŸแž แž‚แž˜แž“แŸแžŠแŸแžขแžŸแŸ’แž…แžถแžšแŸ’แž™ แžŠแŸ‚แž›แž‡แŸ†แžšแžปแž‰แž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž”แŸ’แžšแž€แž”แžŠแŸ„แž™แžขแžแŸ’แžแž“แŸแž™ แž“แžทแž„แž…แžถแŸ†แž”แžถแž…แŸ‹แž“แŸ…แž€แŸ’แž“แžปแž„แž”แžŽแŸ’แžแžถแž‰แŸ” VMware แž‚แžบแž‡แžถแž•แŸ’แž“แŸ‚แž€แž˜แžฝแž™แž“แŸƒแž…แž›แž“แžถแžงแžŸแŸ’แžŸแžถแž แž€แž˜แŸ’แž˜แž“แŸแŸ‡แžแžถแŸ†แž„แž–แžธแžŠแžพแž˜แž˜แž€ แžŠแŸ„แž™แžŸแžถแžšแžšแž›แž€แžแŸ’แž˜แžธแž“แŸƒแž€แžถแžšแž…แŸ’แž“แŸƒแž”แŸ’แžšแžŒแžทแžแžแŸ’แžšแžผแžœแž”แžถแž“แž‡แŸ†แžšแžปแž‰แžŠแŸ„แž™แžœแžทแž’แžธแžŸแžถแžŸแŸ’แžšแŸ’แžแž•แŸ’แžขแŸ‚แž€แž›แžพแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แž–แž„แŸ’แžšแžธแž€แžŸแž˜แžแŸ’แžแž—แžถแž–แž แŸแžŠแŸ’แž‹แžถแžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ แž“แžทแž„แžขแž“แžปแžœแžแŸ’แžแžœแžถแž“แŸ…แž€แŸ’แž“แžปแž„แž•แž›แžทแžแž•แž›แž…แžปแž„แž€แŸ’แžšแŸ„แž™แž”แŸ†แž•แžปแžแŸ”

แžŠแžผแž…แŸ’แž“แŸแŸ‡ P4 แž‚แžบแž‡แžถแž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžฏแž€แžšแžถแž‡แŸ’แž™ แž“แžทแž„แž”แŸ’แžšแžผแžแžผแž€แžผแž› แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŠแŸ„แž™แžงแžŸแŸ’แžŸแžถแž แž€แž˜แŸ’แž˜ แž“แžทแž„แž”แžŽแŸ’แžŒแžทแžแŸ’แž™แžŸแž—แžถ แžŠแžพแž˜แŸ’แž”แžธแž€แŸ†แžŽแžแŸ‹แž™แŸ‰แžถแž„แž–แžทแžŸแŸแžŸแž“แžผแžœแžฅแžšแžทแž™แžถแž”แžแž€แŸ†แžŽแžแŸ‹แž•แŸ’แž›แžผแžœแž“แŸƒแž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แž‡แžถแž€แž˜แŸ’แž˜แžœแžทแž’แžธ แžŠแŸ‚แž›แž“แŸ…แž€แŸ’แž“แžปแž„แžœแŸแž“แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž…แž„แž€แŸ’แžšแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸ„แž›แžŠแŸ…แž…แŸ’แžšแžพแž“แŸ” แžŸแž–แŸ’แžœแžแŸ’แž„แŸƒแž“แŸแŸ‡ แž‚แŸ„แž›แžŠแŸ…แžšแžฝแž˜แž˜แžถแž“ Hardware แž“แžทแž„ Software Switch, Hypervisor Switch, NPUs, GPUs, FPGAs, SmartNICs แž“แžทแž„ ASICsแŸ”

แž›แž€แŸ’แžแžŽแŸˆแžŸแŸ†แžแžถแž“แŸ‹แž“แŸƒแž—แžถแžŸแžถแž–แž„แŸ’แžšแžธแž€แžœแžทแžŸแžถแž›แž—แžถแž–แž“แŸƒแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžšแž”แžŸแŸ‹แžœแžถแž™แŸ‰แžถแž„แžŸแŸ†แžแžถแž“แŸ‹ แž“แžทแž„แž’แžถแž“แžถแž”แžถแž“แž“แžผแžœแž€แžถแžšแžขแž“แžปแžœแžแŸ’แžแž™แŸ‰แžถแž„แž†แžถแž”แŸ‹แžšแž แŸแžŸแžšแž”แžŸแŸ‹แžœแžถแž“แŸ…แž€แŸ’แž“แžปแž„แžŸแŸ’แžแžถแž”แžแŸ’แž™แž€แž˜แŸ’แž˜แž”แžŽแŸ’แžแžถแž‰แŸ”

แž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜

P4 แž‚แžบแž‡แžถแž‚แž˜แŸ’แžšแŸ„แž„แž”แžพแž€แž…แŸ†แž  แž–แŸแžแŸŒแž˜แžถแž“แž–แžถแž€แŸ‹แž–แŸแž“แŸ’แž’แž‘แžถแŸ†แž„แžขแžŸแŸ‹แž˜แžถแž“แž“แŸ…แž›แžพแž‚แŸแž แž‘แŸ†แž–แŸแžš P4.org

แžแŸ†แžŽแž—แŸ’แž‡แžถแž”แŸ‹แžƒแŸ’แž›แžถแŸ†แž„ https://github.com/p4langแžŠแŸ‚แž›แž‡แžถแž€แž“แŸ’แž›แŸ‚แž„แžŠแŸ‚แž›แžขแŸ’แž“แž€แžขแžถแž…แž‘แž‘แžฝแž›แž”แžถแž“แžงแž‘แžถแž แžšแžŽแŸแž€แžผแžŠแž”แŸ’แžšแž—แž– แž“แžทแž„แž€แžถแžšแž”แž„แŸ’แžšแŸ€แž“แŸ”

แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‡แŸ†แž“แžฝแž™ แžŸแž˜แŸ’แžšแžถแž”แŸ‹ Eclipse แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž‚แžถแŸ†แž‘แŸ’แžš P4 แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž™แžพแž„แžขแžถแž…แžŽแŸ‚แž“แžถแŸ†แž”แžถแž“แŸ” แžŸแŸ’แž‘แžผแžŒแžธแž™แŸ„ P4 แž–แžธแž‡แžพแž„แž‘แž‘แŸแŸ”

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ 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;
}

แžขแŸ’แž“แž€แž‰แŸ‚แž€ - แž—แžถแžšแž€แžทแž…แŸ’แž…แžšแž”แžŸแŸ‹แž–แžฝแž€แž‚แŸแž‚แžบแžŠแžพแž˜แŸ’แž”แžธแž‰แŸ‚แž€แž…แŸ†แžŽแž„แž‡แžพแž„แŸ”

แžงแž‘แžถแž แžšแžŽแŸแž‰แŸ‚แž€แžแžถแž„แž€แŸ’แžšแŸ„แž˜แž“แžนแž„แž€แŸ†แžŽแžแŸ‹แž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž“แŸƒแžŸแŸ’แžแžถแž“แž—แžถแž–แž…แžปแž„แž€แŸ’แžšแŸ„แž™แžšแž”แžŸแŸ‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž–แžธแžšแžŠแŸ’แž‹แžŠแŸ†แž”แžผแž„แž˜แžฝแž™แž‘แŸ…แžšแžŠแŸ’แž‹แž…แžปแž„แž€แŸ’แžšแŸ„แž™แž˜แžฝแž™แž€แŸ’แž“แžปแž„แž…แŸ†แžŽแŸ„แž˜แžšแžŠแŸ’แž‹แž…แžปแž„แž€แŸ’แžšแŸ„แž™แž–แžธแžšแŸ–

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4

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 - แžŸแž€แž˜แŸ’แž˜แž—แžถแž–แžŠแžพแž˜แŸ’แž”แžธแž”แž„แŸ’แž€แžพแžแžŸแŸ„แžŸแŸ’แžœแŸ‚แž„แžšแž€ แžŸแŸ’แžœแŸ‚แž„แžšแž€แž€แŸ’แž“แžปแž„แžแžถแžšแžถแž„ แžขแž“แžปแžœแžแŸ’แžแžŸแž€แž˜แŸ’แž˜แž—แžถแž–แŸ”

แžงแž‘แžถแž แžšแžŽแŸแž’แž˜แŸ’แž˜แžแžถแž“แŸƒแž˜แŸ‰แžผแžŒแžปแž›แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž แžถแž‰แž€แŸ’แž“แžปแž„แžšแžผแž”แž—แžถแž–แŸ–

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4

แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แž›แŸ†แž แžผแžš โ€” แž”แž„แŸ’แž แžถแž‰แž–แžธแž›แŸ†แžŠแžถแž”แŸ‹แžŠแŸ‚แž›แž˜แŸ‰แžผแžŒแžปแž› Match-Action แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแŸ” แž“แŸแŸ‡แž‚แžบแž‡แžถแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แžถแŸ†แž”แžถแž…แŸ‹แžŠแŸ‚แž›แž€แŸ†แžŽแžแŸ‹แžแž€แŸ’แž€แžœแžทแž‡แŸ’แž‡แžถแž€แž˜แŸ’แžšแžทแžแžแŸ’แž–แžŸแŸ‹ แž“แžทแž„แž›แŸ†แžŠแžถแž”แŸ‹ Match-ActionแŸ” แž›แŸ†แž แžผแžšแžœแžแŸ’แžแžปแž”แž‰แŸ’แž‡แžถแž—แŸ’แž‡แžถแž”แŸ‹แžœแžแŸ’แžแžปแž‘แžถแŸ†แž„แžขแžŸแŸ‹แžŠแŸ„แž™แž€แŸ†แžŽแžแŸ‹แž€แž˜แŸ’แžšแžทแžแž“แŸƒแž€แžถแžšแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แŸ”

แžœแžแŸ’แžแžปแžแžถแž„แž€แŸ’แžšแŸ… แž‚แžบแž‡แžถแžœแžแŸ’แžแžปแž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แžŠแŸ‚แž›แž˜แžถแž“แžŸแŸ’แžแžถแž”แžแŸ’แž™แž€แž˜แŸ’แž˜แžŠแŸ‚แž›แž”แžถแž“แž€แŸ†แžŽแžแŸ‹แž™แŸ‰แžถแž„แž…แŸ’แž”แžถแžŸแŸ‹ แž“แžทแž„แž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹ API แŸ” แžงแž‘แžถแž แžšแžŽแŸ แž€แžถแžšแž‚แžŽแž“แžถ checksum แž€แžถแžšแž…แžปแŸ‡แžˆแŸ’แž˜แŸ„แŸ‡ แž”แž‰แŸ’แž‡แžš แž”แž‰แŸ’แž‡แžšแŸ”แž›แŸ”

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
}

แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถ - แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž‘แžทแž“แŸ’แž“แž“แŸแž™แžŠแŸ‚แž›แž—แŸ’แž‡แžถแž”แŸ‹แž‡แžถแž˜แžฝแž™แž€แž‰แŸ’แž…แž”แŸ‹แž“แžธแž˜แžฝแž™แŸ—แŸ”

แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถแž˜แžถแž“ แŸข แž”แŸ’แžšแž—แŸแž‘แŸ–

  แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถแž•แŸ’แž‘แžถแž›แŸ‹แžแŸ’แž›แžฝแž“ (แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž‘แž‘แŸแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แž‰แŸ’แž…แž”แŸ‹แž‘แžถแŸ†แž„แžขแžŸแŸ‹)
    แžขแŸ’แž“แž€แžขแžถแž…แžŠแžถแž€แŸ‹แžขแŸ’แžœแžธแžŠแŸ‚แž›แžขแŸ’แž“แž€แž…แž„แŸ‹แž”แžถแž“แž“แŸ…แž‘แžธแž“แŸแŸ‡
    แž˜แžถแž“แž“แŸ…แž‘แžผแž‘แžถแŸ†แž„แž”แŸ†แž–แž„แŸ‹
    แž„แžถแž™แžŸแŸ’แžšแžฝแž›แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แŸ’แžšแžพแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸ„แž›แž”แŸ†แžŽแž„แž•แŸ’แž‘แžถแž›แŸ‹แžแŸ’แž›แžฝแž“แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€ แžงแž‘แžถแž แžšแžŽแŸแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžšแž€แŸ’แžŸแžถแž‘แžปแž€แž€แž‰แŸ’แž…แž”แŸ‹ hash

  แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถแžแžถแž„แž€แŸ’แž“แžปแž„ - แž•แŸ’แžแž›แŸ‹แžŠแŸ„แž™แžŸแŸ’แžแžถแž”แžแŸ’แž™แž€แž˜แŸ’แž˜
    แž…แŸ’แžšแž€แž”แž‰แŸ’แž…แžผแž› แž…แŸ’แžšแž€แž…แŸแž‰แžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ†แžŽแžแŸ‹แž“แŸ…แž‘แžธแž“แŸแŸ‡
    แžแŸ’แžšแžถแž–แŸแž›แžœแŸแž›แžถแž“แŸ…แž–แŸแž›แžŠแŸ‚แž›แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แžแŸ’แžšแžผแžœแž”แžถแž“แžŠแžถแž€แŸ‹แž‡แžถแž‡แžฝแžš แž‡แž˜แŸ’แžšแŸ…แž‡แžฝแžš
    แž‡แžฝแžšแž–แž แžปแžแžถแžŸ / แž–แž แžปแžแžถแžŸ
    แžขแžถแž‘แžทแž—แžถแž–แž€แž‰แŸ’แž…แž”แŸ‹ แžŸแžถแžšแŸˆแžŸแŸ†แžแžถแž“แŸ‹แž“แŸƒแž€แž‰แŸ’แž…แž”แŸ‹
    แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž…แŸ’แžšแž€แž…แŸแž‰ (แžง. แž‡แžฝแžšแž‘แžทแž“แŸ’แž“แž•แž›)

แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แž„แž€แŸ’แžšแž„ P4

P4 compiler (P4C) แž”แž„แŸ’แž€แžพแžแŸ–

  1. แž–แŸแž›แžœแŸแž›แžถแžŠแŸ†แžŽแžพแžšแž€แžถแžšแž™แž“แŸ’แžแž แŸ„แŸ‡แž‘แžทแž“แŸ’แž“แž“แŸแž™
  2. API แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แžŸแŸ’แžแžถแž“แž—แžถแž–แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž“แŸ…แž€แŸ’แž“แžปแž„แž™แž“แŸ’แžแž แŸ„แŸ‡แž‘แžทแž“แŸ’แž“แž“แŸแž™

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4

แžงแž‘แžถแž แžšแžŽแŸแž“แŸƒแž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž“แŸ…แž€แŸ’แž“แžปแž„แž—แžถแžŸแžถ P4

แž€แžผแžŠแž”แŸ’แžšแž—แž–แžขแžถแž…แž‘แžถแž‰แž™แž€แž”แžถแž“แž–แžธแžƒแŸ’แž›แžถแŸ†แž„แŸ”

p4lang/p4c-bmแŸ– แž”แž„แŸ’แž€แžพแžแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ JSON แžŸแž˜แŸ’แžšแžถแž”แŸ‹ bmv2
p4lang/bmv2แŸ– แž€แžปแž„แžแžถแž€แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แž™แž›แŸ‹แž–แžธแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ JSON แž€แŸ†แžŽแŸ‚ bmv2

แžšแžผแž”แž”แž„แŸ’แž แžถแž‰แž–แžธแžŠแŸ’แž™แžถแž€แŸ’แžšแžถแž˜แž…แž„แž€แŸ’แžšแž„แž‚แž˜แŸ’แžšแŸ„แž„แŸ–

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4

แžงแž”แžถแž™แž€แž›แž‡แžถแž˜แžฝแž™แžแžถแžšแžถแž„, แž€แžถแžšแž…แžปแŸ‡แžˆแŸ’แž˜แŸ„แŸ‡แžขแžถแž“, แž”แž‰แŸ’แž‡แžšแŸ–

  • 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 แŸ”

แžขแŸ’แž“แž€แžขแžถแž…แž‘แžถแž‰แž™แž€แžœแžถ แž“แžทแž„แžงแž‘แžถแž แžšแžŽแŸแž•แŸ’แžŸแŸแž„แž‘แŸ€แžแž–แžธแžƒแŸ’แž›แžถแŸ†แž„แŸ”

แž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ P4

PS แž“แŸ…แžŠแžพแž˜แžšแžŠแžผแžœแž€แŸ’แžแŸ…แž“แŸแŸ‡ Intel แž”แžถแž“แž…แžปแŸ‡แž แžแŸ’แžแž›แŸแžแžถแž›แžพแž€แžทแž…แŸ’แž…แž–แŸ’แžšแž˜แž–แŸ’แžšแŸ€แž„แž˜แžฝแž™แžŠแžพแž˜แŸ’แž”แžธแž‘แžทแž‰ Barefoot Networks แž€แŸ’แž“แžปแž„แž€แžทแž…แŸ’แž…แžแžทแžแžแŸ†แž”แŸ’แžšแžนแž„แž”แŸ’แžšแŸ‚แž„แžŠแžพแž˜แŸ’แž”แžธแž”แŸ†แž–แŸแž‰แžแž˜แŸ’แžšแžผแžœแž€แžถแžšแžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ Hyperscale Cloud แž™แŸ‰แžถแž„แž†แžถแž”แŸ‹แžšแž แŸแžŸแŸ” แžŠแžผแž…แžŠแŸ‚แž› Navin Shenoy (แžขแž“แžปแž”แŸ’แžšแž’แžถแž“แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžท แž“แžทแž„แž‡แžถแžขแŸ’แž“แž€แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แž‘แžผแž‘แŸ…แž“แŸƒ Data Center Group แž“แŸ… Intel Corporation) แž”แžถแž“แž“แžทแž™แžถแž™แžแžถ แž“แŸแŸ‡แž“แžนแž„แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™ Intel แž•แŸ’แžแž›แŸ‹แž“แžผแžœแž”แž“แŸ’แž‘แžปแž€แž€แžถแžšแž„แžถแžšแž€แžถแž“แŸ‹แžแŸ‚แž’แŸ† แž“แžทแž„แžฑแž€แžถแžŸแž€แžถแž“แŸ‹แžแŸ‚แž…แŸ’แžšแžพแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแžแžทแžแžทแž‡แž“แž˜แž‡แŸ’แžˆแž˜แžŽแŸ’แžŒแž›แž‘แžทแž“แŸ’แž“แž“แŸแž™แŸ”

แžแžถแž˜แž‚แŸ†แž“แžทแžแž•แŸ’แž‘แžถแž›แŸ‹แžแŸ’แž›แžฝแž“แžšแž”แžŸแŸ‹แžแŸ’แž‰แžปแŸ† แž™แžพแž„แž˜แžทแž“แž‚แžฝแžšแž—แŸ’แž›แŸแž…แžแžถ Intel แž‚แžบแž‡แžถแžขแŸ’แž“แž€แžŠแžนแž€แž“แžถแŸ†แž€แŸ’แž“แžปแž„แž€แžถแžšแž•แž›แžทแžแž”แž“แŸ’แž‘แŸ‡แžˆแžธแž” FPGA แž แžพแž™แžœแžถแž˜แžถแž“แž”แžšแžทแž™แžถแž€แžถแžŸ Quartus แžŠแŸแž›แŸ’แžขแŸ” แž“แŸแŸ‡แž˜แžถแž“แž“แŸแž™แžแžถแž™แžพแž„แžขแžถแž…แžšแŸ†แž–แžนแž„แžแžถแž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž˜แž€แžŠแž›แŸ‹แžšแž”แžŸแŸ‹ Intel แž“แŸ„แŸ‡ Barefoot แž“แžนแž„แž˜แžทแž“แžแŸ’แžšแžนแž˜แžแŸ‚แž–แž„แŸ’แžšแžธแž€แž•แž›แžทแžแž•แž›แžšแž”แžŸแŸ‹แžแŸ’แž›แžฝแž“แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แž‘แŸ แžแŸ‚แž˜แž‘แžถแŸ†แž„ Quartus แž“แžทแž„ P4 Studio แž“แžนแž„แž‘แž‘แžฝแž›แž”แžถแž“แž€แžถแžšแžขแžถแž”แŸ‹แžŠแŸแž แž“แžทแž„แž€แžถแžšแž”แž“แŸ’แžแŸ‚แž˜แžŠแŸแž’แŸ’แž„แž“แŸ‹แž’แŸ’แž„แžšแž‘แŸ…แž›แžพแž”แž“แŸ’แž‘แžถแžแŸ‹ Toffino แž“แžทแž„ Toffino 2 แž•แž„แžŠแŸ‚แžšแŸ”

แžŸแž˜แžถแž‡แžทแž€แž•แŸ’แž›แžผแžœแž€แžถแžšแž“แŸƒแžŸแž แž‚แž˜แž“แŸ P4 - แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“ แž€แŸ’แžšแžปแž˜แž€แžแŸ’แžแžถ.

แž”แŸ’แžšแž—แž–: www.habr.com

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹