P4 ืืื ืฉืคืช ืชืื ืืช ืืืืืขืืช ืืชืื ืช ืืืื ื ืืชืื ืื ืืช. ืฉืื ืืื ืฉืคื ืืฉืืืืฉ ืืืื ืืื C ืื Python, P4 ืืื ืฉืคื ืกืคืฆืืคืืช ืืชืืื ืขื ืืกืคืจ ืขืืฆืืืื ืืืืชืืืื ืื ืืชืื ืจืฉืช.
P4 ืืื ืฉืคืช ืงืื ืคืชืื ืืจืืฉืืื ืืืชืืืืง ืขื ืืื ืืจืืื ืืื ืืืจืืช ืจืืื ืืฉื P4 Language Consortium. ืืื ื ืชืืืช ืื ืขื ืืื ืงืจื ืืจืฉืช ืืคืชืืื (ONF) ืืงืจื ืืื ืืงืก (LF), ืฉื ืืื ืืืจืืื ื ืืื ืืืืืืื ืืืืชืจ ืืคืจืืืงืื ืจืฉืช ืืงืื ืคืชืื.
ืืฉืคื ื ืืืขื ืืืงืืจ ืืฉื ืช 2013 ืืชืืืจื ืืืืืจ SIGCOMM CCR ืืฉื ืช 2014 ืฉืืืชืจืชื "ืคืจืืืืงืื ืขืฆืืื, ืชืื ืืช ืืขืื ื ืืชืื ืื ืืช".
ืืื ืืงืืชื, P4 ืืื ืืืชืคืชื ืืฆืืจื ืืงืกืคืื ื ืฆืืืืืช, ืืืคื ืืืืืจืืช ืืกืื ืืจื ืืชืืืืจ ืืขืืจืช ืื ืืช ืขื ืืื ืืชืงื ื ืจืฉืช, ืืืื ืืชืืื ืจืฉืช, ืืชืืื ืื ืชืืื.
"SDN ืฉืื ืชื ืืช ืชืขืฉืืืช ืืจืฉืชืืช, ื-P4 ืืืงื ืืช SDN ืืฉืื ืืื ืขื ืืื ืืืืช ืืืืืช ืืชืื ืืช ืื ืืชืื", ืืืจ ืืืจื ืคืืจืืืงืจ, ืื ื"ื ืงืจื ืืจืฉืชืืช ืืคืชืืื.
ืฉืคืช P4 ื ืืฆืจื ืืืงืืจ ืขื ืืื ืงืืืฆื ืฉื ืืื ืืกืื ืืืืงืจืื ืืืืื, ืืื ืื, ืืืงืจืืกืืคื ืืืงืจ, Barefoot, ืคืจืื ืกืืื ืืกืื ืคืืจื. ืืืืจื ืืืืชื ืคืฉืืื: ืืืฆืืจ ืฉืคื ืงืื ืืฉืืืืฉ ืฉืืคืชื ืชืืื ื ืืืื ืืืืื ืชืื ืืื ืืืืฉืชืืฉ ืื ืืื ืืชืืจ ืืืืืืง ืืืฆื ืื ืืช ื ืฉืืืืช ืขื ืคื ื ืจืฉืชืืช.
ืืืจ ืืืืชืืื, P4 ืชืืื ื ืืืืืช ืขืฆืืื ืืืจื (ืืืืืจ, ืชืืื ืืช ืฉื ืืชืื ื-P4 ื ืืชื ืช ืืืืืืจ ืืื ืฉืื ืื ืืื ืืคืขืื ืขื ืืืืื ืืขืืื ืืืื ASICs, FPGAs, CPUs, NPUs ื-GPUs).
ืืฉืคื ืื ืืืชื ืชืืืื ืืคืจืืืืงืื (ืืืืืจ, ืชืืื ืืช P4 ืืืืื ืืชืืจ ืคืจืืืืงืืืื ืกืื ืืจืืืื ืงืืืืื ืื ืืฉืืฉ ืืฆืืื ืืฆืื ืืชืืืช ืืืชืืืื ืืืฉืืช ืืืฉืื).
ืืชืขืฉืืื, P4 ืืฉืืฉ ืืชืื ืืช ืืืฉืืจืื. ืืืื ืืขืชืื ืชืงื ื Internet-RFC ื-IEEE ืืืืื ืื ืืช ืืคืจื P4.
ื ืืชื ืืืฉืชืืฉ ื-P4 ืขืืืจ ืืชืงื ื ืคืื ืงืฆืื ื ืืชื ืื ืืชืื ืืช ืืงืืืขืื. ืืืืืื, ืืื ืืฉืืฉ ืืชืืขืื ืืืืืง ืฉื ืืชื ืืืืช ืฆืื ืืจ ืืชื ืืืืฉืงื ื-API ืฉื Switch Abstraction Interface (SAI) ืืืฉืืฉืื ืืช ืืขืจืืช ืืืคืขืื SONiC switch OS ืืงืื ืคืชืื. P4 ืืฉืืฉ ืื ืืคืจืืืงื ONF Stratum ืืชืืืืจ ืืชื ืืืืช ืืืชืื ืขื ืคื ื ืืืืื ืืืฉืืจืื ืงืืืขืื ืื ืืชื ืื ืืชืื ืืช.
ืืคืขื ืืจืืฉืื ื, ืชืืืืจ ืืชื ืืืืช ืืืชื ืืืชืืื ืืจืฉืช ืืืคืฉืจ ืื ืืืฆืืจ ืืืื ืืคืขืื ืืืืืง ืฉื ืื ืืจืฉืช ืืคื ื ืืคืจืืกื. ืกืคืงื ืขื ื ืืืืืื ืืืืืื ืืืืืง ืืืืคืืช ืืืืื ืืจืฉืช ืืืืืื ืืืืฆืขืืช ืชืืื ื, ืืืฆืืฆื ืืฉืืขืืชืืช ืืช ืืืื ืืืขืืืช ืฉื ืืืืงืช ืืืืืช ืคืขืืื ืืืืืช ืืืขืืื ืืื ืฆืืจื ืืืืืจื ืืงืจื.
ืขื ืืื ืฉืืืืฉ ื-P4, ืกืคืงื ืฆืืื ืจืฉืช ืืืืืื ืืฆืคืืช ืืืชื ืืืืช ื ืืชืื ืืกืืกืืช ืืฉืืชืคืช ืืื ืืืืฆืจืื, ืื ืฉืืืคืฉืจ ืฉืืืืฉ ืืืืจ ืืชืฉืชืืช ืืืืงื, ืคืืฉืื ืคืืชืื ืชืืื ืช ื ืืืื ืืืกืืคื ืฉื ืืืจ ืืืืืช ืืืืืช ืคืขืืื ืืืืืช.
ืืืืื ืฉื ืืชื ืืืฉืชืืฉ ื-P4 ืืื ืืืชืื ืชืืื ืืืช ืืืชืืจืืช ืืจืืื ืืืฉืืช ืืืืืืื ืื ืืชืื. ืืืืืื, P4 ื ืืฆื ืืฉืืืืฉ ื ืจืื ืขืืืจ ืืืืืจืื ืืืืืืืช ืืืจืืื ื ืชืื ืื, ืจืฉืชืืช ืืจืืื ืืืช ืืกืคืงื ืฉืืจืืชืื.
ืื ืงืืืืช ืืืืงืจ ืขืืชื ืืืจืื. ืืกืคืจ ืงืืืฆืืช ืืืงืจ ืืืืืืืช ืืชืืื ืืจืฉืชืืช ืืืงืืืืืช ืคืจืกืื ืืืฉืืืื ืืืฉืื ืืืืืืืื ืืืืืกืกืื ืขื ืชืืื ืืืช P4, ืืืื ืืืืื ืขืืืกืื, ืคืจืืืืงืืื ืงืื ืฆื ืืืก ืืฉืืืจื ืืืืืื ืฉื ืขืจืื ืืคืชื. ื ืืฆืจืช ืคืจืืืืืช ืชืื ืืช ืืืฉื, ืืืฉื ืืช ืขืืืจืช ืืืืืจื ืืชืืื ื, ืืืืคืฉืจืช ืืืจืื ืจืขืืื ืืช ืืืชื ืฆืคืืืื, ืืืฉืื ืืืืื ืืื ืืฆืืฅ.
ืงืืืืช ืืืคืชืืื ืชืจืื ืชืจืืื ืืฉืืขืืชืืช ืืคืืชืื ืงืื, ืืจืืืช ืืืืจืื, ืฆืื ืืจืืช, ืืืืืื ืืชื ืืืืชืืื, APIs, ืืกืืจืืช ืืืืงื, ืืืฉืืืื ืืขืื. ืืืืจืืช ืืืื Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ื-ZTE ืืฉ ืืคืชืืื ืืืขืืืืื; ืืืื ืืืจืกืืืืืช ืืืื BUPT, ืงืืจื ื, ืืจืืืืจื, MIT, NCTU, ืคืจืื ืกืืื, ืกืื ืคืืจื, ืืืื ืืื, Tsinghua, UMass ื-USI; ืืคืจืืืงืื ืงืื ืคืชืื ืืืืืืื CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ืืฉืืื ืืืืืฉืื ืืช ืืขืืืื ืฉ-P4 ืืื ืคืจืืืงื ืงืืืืชื ืขืฆืืื.
ืืืจ ืืืคืืื ื ืฉื ืืงืจืื ืืฉืคืช P4:
ืกืืืืื ืืืฉืื
ืืืืืื ืฉืืฉืคื ืืืืขืืช ืื ืืชืื ืืืฉืืืื, ืจืฉืืืช ืืืจืืฉืืช ืืืคืฉืจืืืืช ืืขืืฆืื ืฉืื ื ืืืฉืืืื ืืฉืคืืช ืชืื ืืช ืืืืจืืช ืืืืืืช. ืืืืคืืื ืื ืืขืืงืจืืื ืฉื ืืฉืคื ืื:
- ืขืฆืืืืช ืืืืฉืื ืืขืืื;
- ืื ืชืืืช ืฉื ืืคืจืืืืงืื/ืื ืฉืืื ื ืขืฉื ืฉืืืืฉ;
- ืืืืืช ืชืฆืืจื ืืืืฉ ืฉื ืืฉืื.
ืขืฆืืืืช ืืืืฉืื ืืขืืื
ืชืืื ืืืช P4 ืืชืืื ื ืืช ืืืืืช ืขืฆืืืืืช ืืืืฉืื, ืืืืืจ ื ืืชื ืืืจืืื ืืืชื ืขืืืจ ืกืืืื ืจืืื ืืฉืื ืื ืฉื ืื ืืขื ืืืฆืืข, ืืืื ืืขืืืื ืืืืจืืช ืืืืืืช, FPGAs, ืืขืจืืช-ืขื-ืฉืืืื, ืืขืืื ืจืฉืช ื-ASICs. ืกืืืื ืฉืื ืื ืฉื ืืืื ืืช ืืื ืืืืขืื ืืืืจืืช P4, ืืื ืืขื ืืืจืฉ ืืืืจ ืืื ืืืืืจ ืืช ืงืื ืืืงืืจ ืฉื P4 ืืืืื ืฉื ืืชื ืืขื. ืืืืืจ ืืืื ืืืืืช ืืืื ื ืืืืฉืืจ ืืืขื, ืืชืืื ื ืืืฆืื ืืช, ืื ืืคืืื ืืฉืืจืืช ืขื ื. ืืืืืื ืฉืจืืื ืืืืขืืื ืืืงืืจืืื ืขืืืจ ืชืืื ืืืช P4 ืืื ืขืืืจ ืืืชืื ืื ืืช ืคืฉืื, ื ืคืืฅ ืืืื ืืฉืืืข ืืช ืืืื ื "ืืชื P4" ืืืจืืช ืฉ"ืืขื P4" ืืืืืง ืืืชืจ.
ืขืฆืืืืช ืฉื ืืคืจืืืืงืื/ืื ืฉืืื ื ืขืฉื ืฉืืืืฉ
P4 ืืื ื ืชืืื ืืคืจืืืืงืื. ืืืฉืืขืืช ืืื ืฉืืฉืคื ืืื ืชืืืื ืืงืืจืืช ืืคืจืืืืงืืืื ื ืคืืฆืื ืืืื IP, Ethernet, TCP, VxLAN ืื MPLS. ืืืงืื ืืืช, ืืชืื ืช ื-P4 ืืชืืจ ืืช ืคืืจืืื ืืืืชืจืืช ืืฉืืืช ืืฉืืืช ืฉื ืืคืจืืืืงืืืื ืื ืืจืฉืื ืืชืืื ืืช, ืืฉืจ ืืชืืจื ืืชืคืจืฉืื ืืืขืืืืื ืขื ืืื ืืชืืื ืืช ืืืืืืืจ ืืืชืงื ืืืขื.
ืืืืืช ืืืืจื ืืืืฉ ืฉื ืืฉืื
ืืืื ืขืฆืืืืช ืืคืจืืืืงืื ืืืืื ืืฉืคื ืืืืคืฉื ืืืคืฉืจ ืืืืจื ืืืืฉ - ืืขืื P4 ืฆืจืืืื ืืืืืช ืืกืืืืื ืืฉื ืืช ืืช ืขืืืื ืืื ืืช ืืืืจ ืคืจืืกืช ืืืขืจืืช. ืืืืืช ืื ื ืงืฉืจืช ืืืืคื ืืกืืจืชื ืื ืืชืื ืืจื ืืขืืืื ืืืืจืืช ืืืืืืช ืื ืืขืืื ืจืฉืช ืืืงืื ืืขืืืื ืืฉืืืืื ืืขืื ืคืื ืงืฆืื ืงืืืขื.
ืืืจืืช ืฉืืื ืฉืื ืืืจ ืืฉืคื ืฉืืื ืข ืืืคืืืืืืฆืื ืฉื ืืืืฆืืขืื ืฉื ืงืืืฆื ืืกืืืืช ืฉื ืคืจืืืืงืืืื, ืืืคืืืืืืฆืืืช ืืื ืืื ื ื ืจืืืช ืืืืชื ืืฉืคื ืืืืืืืช ืืกืืคื ืฉื ืืืจ ืืืคืืืช ืืช ืืืืืฉืืช ืฉื ืืืขืจืืช ืืืืขืืื ืืืช ืืืืืช ืืชืฆืืจื ืืืืฉ ืฉืืื.
ืืืคืืื ืื ืืื ืฉื ืืฉืคื ื ืงืืขื ืืชืืืื ืขื ืืื ืืืฆืจืื ืชืื ืืชืืงืืืช ืืฉืืืืฉ ืื ืจืื ืฉืื ืืชืฉืชืืช ืจืฉืช.
ืืฉืคื ืืืจ ื ืืฆืืช ืืฉืืืืฉ ืืืืจืืช ืจืืืช:
1) ืืจืืื ื ืชืื ืื ืืงื ื ืืืื ืืืื;
ืืืจืช Tencent ืืกืื ืืช ืืื ืืืจืช ืืืฉืงืขืืช ืืืืืื ืืขืืื ืืืืช ืืืืจืืช ืืืื ืกืืืื ืืืืืืืช. ืืืืจืืช ืืื ืืช ืฉื Tencent, ืื ืืกืื ืืื ืืืืื ืืช ืืืจืืช ืืขืืื, ืืชืืืืช ืืชืืืืื ืฉืื ืื ืฉื ืขืกืงื ืืืืืง, ืืจืืืช ืฉืืจืืชื ืืื ืืจื ื ืฉืื ืื, ืคืืชืืืื ืืชืืื ืืืื ื ืืืืืืืชืืช ืืืืืืืจ ืืืืงืืจืื ื.
P4 ืื ืืชืื ื ืืชื ืืชืื ืืช ืื ืืื ืืืืืืืช ืืชืงืืืืช ืืืฉืืฉืืช ืืืจืืืืงืืืจืช ืืจืฉืช ืฉื ืืืืจื.
ืืืื ืืืืฆืจืื, ืืืื ืืื ืืฆืืื ืืช ืืืืืืฅ ืืืืืจ ืฉื P4 ืืชืขืฉืืืช ืืจืฉืชืืช ืืืชืื ืื ืืจืืืืงืืื ื ืฉื ืืจืืื ื ืชืื ืื ืืคืจื.
2) ืืืจืืช ืืกืืจืืืช;
ืืืืืื ืืืงืก ืื ืฆื ืืช ืืขืืืื ืขื ืงืืืืช ืืงืื ืืคืชืื ืืคืืชืื ืกืื ืืจืืื ืืคืชืจืื ืืช ืืฉืืชืคืื ืืืืืืฉ ืชืฉืชืืช ืจืฉืช ืืืชื ืคืชืจืื ืืช ืืืืื ืืืชืจ ืืืงืืืืช.
3) ืืืฆืืจ;
ืื ืชืขืฉืืืช ืืจืฉืชืืช ืชืจืืืื ืืฉืคื ืืื P4 ืืืืืืจื ืืืืคื ืืืืืื ืืช ืืชื ืืืืช ืืืขืืจื. ืกืืกืงื ืื ืืืืื ื ืืืขืืจืช ืงืืื ืืืืฆืจืื ืฉืื ืืฉืืืืฉ ืืฉืคื ืื.
Juniper Networks ืืืื ืืช P4 ื-P4 Runtime ืืืกืคืจ ืืืฆืจืื, ืืืกืคืงืช ืืืฉื ืคืจืืืจืืืืช ืืืขืื ืืืืืืข ืฉื Juniper ืืืงืื ืืชืืื ื ืฉืื.
Ruijie Networks ืชืืื ืืืง ื-P4 ืืืืชืจืื ืืช ืฉืืื ืืืื ืืจืฉืชืืช. ืขื P4, ืืืืจื ืืืืื ืืืฆืืจ ืืืกืคืง ืคืชืจืื ืืช ืืืืืืื ืืกืืื ืืืืืื ืจืื ืฉื ืืงืืืืช.
4) ืกืคืงื ืชืงืฉืืจืช;
AT&T ืืืืชื ืืืืฆืช ืืืงืืืช ืฉื P4, ืืืจืืฉืื ืืช ืฉืืฉืชืืฉื ื-P4 ืืื ืืืืืืจ ืืช ืืืชื ืืืืช ืฉืืื ืจืืฆื ืืจืืืช ืืจืฉืชืืช ืฉืื, ืืืืฉืชืืฉ ืืืชืงื ื ืืขืืจื ื ืืชื ืื ืืชืื ืืช ืฉื P4 ืืจืฉืช ืฉืื.
ื-Deutsche Telekom, ืืฉืคื ืืฉืืฉืช ืืืืืืคืืก ืฉื ืคืื ืงืฆืืืช ืืคืชื ืืจืฉืช ืืืืง ืืชืืื ืืช Access 4.0.
5) ืชืขืฉืืืช ืืืืืืืื ืืืืฆื;
ืืฉืคื ืืคืฉืจื ื-Barfoot ืืืืฉื ืคืจืืืืื ืืืฉื ืืืกืคืงืช ืืืืืืช ืชืืื ื ืืืืฉืืจ ื ืืชืื ืืจืฉืช.
Xilinx ืืื ืืื ืืืืืกืื P4.org ืืืื ืืขืืจื ืืืืคื ืคืขืื ืืคืืชืื ืฉืคืช P4 ืืืืืืข ืืืชื ืืคืืืคืืจืืืช ื ืืชื ืืช ืืชืื ืืช ืืืืกืกืืช FPGA ืขืืืจ ืืืืจืช SmartNIC ื-NFV, ืืืืฆืืื ืืช ืืื ืืืืืจืื ืืจืืฉืื ืื ืฉื P416 ืืืืง ืืชืื ืื SDNet.
6) ืชืืื ื.
VMware ืืืืื ื ืฉ-P4 ืืืฆืจ ืื ืจืืื, ืืืฉื ืืช ืืงืืืื ืืืืจืื ืฉืื ืืขืื ืฉืื ืื ืืฉืืขืืชื ืืืืจืื ืืจืฉืช. VMware ืืืืชื ืืืง ืืชื ืืขืช ืืชืขืฉืืื ืืื ืืื ืชืืืืช ืืืจื, ืฉืื ืื ืืืฉ ืฉื ืืืฉื ืืช ืืื ืข ืขื ืืื ืืืฉืืช ืืืืกืกืืช ืชืืื ื ืืืจืืืืืช ืืช ืืืืืืช ืืชืฉืชืืช ืืืืืืขืืช ืืืชื ืืืืฆืจืื ืืขืืื ืืื ืืืืชืจ.
ืืคืืื, P4 ืืื ืฉืคืช ืชืื ืืช ืืืชื ืชืืืื ืืืจื ืืคืจืืืืงืื ืืืฉืืฉืช ืืช ืืชืขืฉืืื ืืืืงืืืื ืืืืืจื ืืืืืืืช ืฉื ืืชื ืืืืช ื ืืชืื ืื ืืช ืืชืืื ืืช, ืืฉืจ ืืชืืจื ื ืืชื ืช ืืืืืืจ ืขืืืจ ืืืจืืช ืืจืืืืช. ืืืื, ืืืขืืื ืืืืืื ืืชืื ืืืืจื ืืชืืื ื, ืืชืื hypervisor, NPUs, GPUs, FPGAs, SmartNICs ื-ASICs.
ืืืืคืืื ืื ืืขืืงืจืืื ืฉื ืืฉืคื ืืจืืืืื ืืฉืืขืืชืืช ืืช ืืืงืฃ ืืืืฉืื ืฉืื ืืืืืืืื ืืช ืืืืขืชื ืืืืืจื ืืืจืืืืงืืืจืืช ืจืฉืช.
ืชืืืืช ืืขืืืื
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. ืืจืืืช ืืืงืจื ืืงืฉืจืช ืืช ืื ืืืืืืืงืืื ืขื ืืื ืืืืจืช ืจืืช ืืืงืจื.
ืืคืฆืื ืืืฆืื ืืื ืื ืืืืืืงืืื ืกืคืฆืืคืืื ืขื ืืจืืืืงืืืจื ืืืืืจืช ืืืืจืืจ ืืืืฉืงื 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 ืกืืืื ืฉื ืืื ื ืชืื ืื:
ืืื ื ืชืื ืื ืืืชืืืื ืืืฉืืช (ืืื ื ืจืืง ืขืืืจ ืื ืืืืืืืช)
ืืชื ืืืื ืืฉืื ืืื ืื ืฉืืชื ืจืืฆื
ืืืื ืืืืจื ืื ืืฆืื ืืจ
ื ืื ืืฉืืืืฉ ืืืืจืืช ืฉืื, ืืืฉื, ืืืืกืื hash ืฉื ืืืืื
ืืื ื ืชืื ืื ืคื ืืืืื - ืืกืืคืง ืขื ืืื ืืืจืืืืงืืืจื
ืืฆืืืช ืงืื, ืืฆืืืช ืคืื ืืืืืจืื ืืื
ืืืชืืช ืืื ืืชื ืืืืืื ืืืืชื ืืชืืจ, ืขืืืง ืชืืจ
ืชืืจ ืืืืื/ืฉืืืืจ ืจื ืฉืืืืจ
ืขืืืคืืช ืืืืื, ืืฉืืืืช ืืืืื
ืืคืจื ืืฆืืืช ืคืื (ืืืฉื ืชืืจ ืคืื)
ืืืืจ 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 ืฉื ืืืืคืช ืชืืื ื.
ืืชื ืืืื ืืืืจืื ืืช ืื ืืืืืืืืช ืืืจืืช ืืืืืืจ.
ื .ื. ืืชืืืืช ืืงืืฅ, ืืื ืื ืืชืื ืขื ืืกืื ืืจืืืฉืช Barefoot Networks ืืืืืฅ ืืขื ืืช ืืืืืจืืช ืขื ืืฆืจืืื ืฉื ืืฉืชืืฉื Hyperscale Cloud. ืืคื ืฉืืืจ Navin Shenoy (ืกืื ื ืฉืื ืืืืจ ืืื ืื ืืืื ืฉื ืงืืืฆืช Data Center ื-Intel Corporation), ืืืืจ ืืืคืฉืจ ืืืื ืื ืืกืคืง ืขืืืกื ืขืืืื ืืืืืื ืืืชืจ ืืืืชืจ ืืืืื ืืืืช ืืืงืืืืช ืืจืืื ืื ืชืื ืื.
ืืืขืชื ืืืืฉืืช, ืืกืืจ ืืฉืืื ืฉืืื ืื ืืืืืื ืืืืฆืืจ ืฉืืื FPGA ืืืฉ ืื ืกืืืืช Quartus ืืฆืืื ืช. ืืืฉืืขืืช ืืื ืฉืื ื ืืืืืื ืืฆืคืืช ืฉืขื ืืืขืชื ืฉื ืืื ืื, Barefoot ืื ืจืง ืชืจืืื ืืช ืงื ืืืืฆืจืื ืฉืื, ืืื ืื Quartus ื-P4 Studio ืืงืืื ืขืืืื ืื ืืชืืกืคืืช ืจืฆืื ืืืช ืืงื Toffino ื-Toffino 2.
ืืืจ ืจืฉืื ืืงืืืืช P4 - ืืืจื
ืืงืืจ: www.habr.com