P4 (langage)
P4 est un langage de programmation permettant d'exprimer la logique de traitement des paquets au sein d'un élément de communication de réseau informatique tel qu'un commutateur, une carte réseau, un routeur ou une appliance afin d'y exécuter des actions.
Le langage de programmation P4 a été proposé par certaines universités aux entreprises en 2014 et est décrit à l'origine dans un document du SIGCOMM CCR intitulé "Programming Protocol-Independent Packet Processors". La dénomination commune se raccourcit à l'acronyme "P4".
P4 Network Langage | ||
Date de premiĂšre version | ||
---|---|---|
DĂ©veloppeurs | The P4 Language Consortium | |
DerniĂšre version | P416, version 1.2.0 | |
Licence | Apache 2 | |
Site web | p4.org | |
Origine
Le premier atelier sur le langage P4 a eu lieu le [1] Ă l'UniversitĂ© de Stanford, il Ă©tait prĂ©sidĂ© par Nick McKeown de cette mĂȘme universitĂ© et Jennifer Rexford, de l'UniversitĂ© de Princeton. Le consortium P4.org a publiĂ© la spĂ©cification finale de la nouvelle version du langage dĂ©nommĂ©e P416, en [2], remplaçant la premiĂšre version du langage, appelĂ©e P414.
Principe
ConsidĂ©rĂ© comme une Ă©volution du Software Defined Networking (SDN)[3], P4 permet de programmer la façon dont le flux est traitĂ© par lâacheminement de paquets sur du matĂ©riel de transmission de paquets rĂ©seaux[3] tels que des routeurs, des commutateurs ou des pare-feux[4], qu'ils soient matĂ©riels ou logiciels[3]. Comme son nom « Programmation de processeurs indĂ©pendants des protocoles » lâindique, le langage ne tient pas compte du format dâun paquet. En effet, les dĂ©veloppeurs dĂ©clarent le traitement dâun paquet dans un programme Ă©crit en langage P4, et le compilateur le met par la suite au format souhaitĂ© selon le matĂ©riel cible[5]. La programmation en langage P4 est notamment utilisĂ©e pour mettre en Ćuvre les fonctions de transfert de niveau 3 et les fonctions INT[5]. La technologie In-Band Network Telemetry permet Ă de commutateurs de mesurer de fournir des informations dĂ©taillĂ©es sur la charge du rĂ©seau et de les utiliser pour fournir des mĂ©canismes de contrĂŽle de la congestion et donc mieux gĂ©rer la stabilitĂ© du rĂ©seau Ă trĂšs haut dĂ©bit.
Il existe deux versions de ce langage : P414 et P416[6]. P416 apporte des changements importants et n'est pas rĂ©trocompatible avec P414. Ainsi, de nombreuses fonctionnalitĂ©s ont Ă©tĂ© supprimĂ©es du langage de base P414 et sont dĂ©jĂ ou sont destinĂ©es Ă ĂȘtre implĂ©mentĂ©es dans des bibliothĂšques externes[7].
Fonctionnement
P4 vise la programmation complĂšte du traitement des donnĂ©es sur un Ă©quipement rĂ©seau. Ce langage est capable de rĂ©ellement programmer le comportement dâun Ă©quipement rĂ©seau. Un algorithme de traitement dâun paquet IPv4 pourra ĂȘtre simplement construit. Le format mĂȘme des paquets est simplement dĂ©fini dans le programme. Lâexemple ci-dessous montre comment analyser (parser) une trame Ethernet.
state parse_ethernet {
packet.extract(headers.ethernet) {
transition select(headers.ethernet.ethertype) {
0x8100: parse_vlan;
0x9100: parse_vlan;
0x0800: parse_ipv4;
0x86dd: parse_ipv6;
default: reject;
}
}
Une fois l'analyse des paquets entrants effectuĂ©e, les en-tĂȘtes sont extraites et envoyĂ©es dans des tables de type "Match+Actions". Ces tables contiennent les informations des paquets correspondants ainsi que les protocoles pris en compte pour leur acheminement. Il ne reste plus qu'Ă spĂ©cifier les actions Ă exĂ©cuter pour les paquets correspondants. Une fois le programme crĂ©Ă©, il suffit de le compiler pour quâil puisse fonctionner sur le matĂ©riel dĂ©sirĂ©[8].
Syntaxe
Un programme de type P4 contient les attributs des composants clés suivants :
- Headers (en-tĂȘtes)
- Une dĂ©finition d'en-tĂȘte qui dĂ©crit la sĂ©quence et la structure d'une sĂ©rie de champs. Elle comprend la spĂ©cification des largeurs de champs et des contraintes sur les valeurs des champs[9] ;
- Parsers
- Une dĂ©finition d'analyseur spĂ©cifie comment identifier les en-tĂȘtes et les sĂ©quences d'en-tĂȘtes valides dans les paquets[9];
- Tables
- Les tables match+action sont le mécanisme permettant d'effectuer le traitement des paquets. Le programme P4 définit les champs sur lesquels une table peut correspondre et les actions qu'elle peut exécuter[9] ;
- Actions
- P4 supporte la construction d'actions complexes à partir de primitives plus simples, indépendantes du protocole. Ces actions complexes sont disponibles dans les tables match+action[9] ;
- Programmes de contrĂŽle
- Le programme de contrÎle détermine l'ordre des tables match+action qui sont appliquées à un paquet. Un programme impératif simple décrit le flux de contrÎle entre les tables match+action[9].
#include <core.p4>
#include <v1model.p4>
struct metadata {}
struct headers {}
parser MyParser(packet_in packet,
out headers hdr,
inout metadata meta,
inout standard_metadata_t standard_metadata) {
state start { transition accept; }
}
control MyVerifyChecksum(inout headers hdr, inout metadata meta) { apply { } }
control MyIngress (inout headers hdr,
inout metadata meta,
inout standard_metadata_t standard_metadata) {
apply {
if (standard_metadata.ingress_port ==1) {
standard_metadata.egress_spec =2;
} else if (standard_metadata.ingress_port ==2) {
standard_metadata.egress_spec =1;
}
}
}
control MyIngress(inout headers hdr,
inout metadata meta,
inout standard_metadata_t standard_metadata) {
apply { }
}
control MyComputeChecksum (inout headers hdr, inout metadata meta) {
apply {}
}
control MyComputeChecksum(inout headers hdr, inout metadata meta) {
apply { }
control MyDeparser(packet_out packet, in headers hdr){
apply { }
}
V1Switch(
MyParser(),
MyVerifyChecksum(),
MyIngress(),
MyEgress(),
MyComputeChecksum(),
MyDeparser(),
) main;
Compilateur
Afin d'ĂȘtre implĂ©mentĂ© sur le matĂ©riel cible, qui peut ĂȘtre de type matĂ©riel ou logiciel[3], le programme Ă©crit en P4 doit ĂȘtre compilĂ©, c'est-Ă -dire transformĂ© par le compilateur, en un code objet. Il existe deux compilateurs, un premier utilisĂ© Ă l'origine pour P414, Ă©crit en Python[6], et un autre, depuis la version P416, nommĂ© P4C. Ce dernier, fournit par le groupe de dĂ©veloppeurs P4 "P4 Language Consortium", est compatible avec les deux versions du langage et est implĂ©mentĂ© en C++11, sous licence open-source Apache 2[10]. Le compilateur dispose de deux analyseurs, pour chacun des deux langages. L'analyseur de programme P414 convertit le programme en P416[6].
P4C effectue un traitement en trois parties :
- Front-end : Indépendamment du matériel cible, il est chargé d'effectuer divers contrÎles du programme tels que la syntaxe, la sémantique, afin que le code soit conforme aux spécifications du langage[11], puis il simplifie et optimise le code au besoin ;
- Mid-end : Il effectue les transformations du code afin qu'il corresponde en partie à la cible, mais n'ajoute pas d'affectations de ressources spécifiques ;
- Backend : Il est chargé de l'allocation des ressources, l'ordonnancement et de la transformation du code en un langage conforme au matériel.
Le compilateur supporte plusieurs types de backend :
- p4c-bmv2
- gĂ©nĂšre du code en format JSON afin que le programme soit compatible pour ĂȘtre implĂ©mentĂ© sur des commutateurs logiciels[12] ;
- p4c-ebpf
- gĂ©nĂšre du code au format C qui peut ensuite ĂȘtre compilĂ© en eBPF[13] ;
- p4c-graphs
- produit des représentations visuelles d'un programme P4 (des graphiques de flux de contrÎle de haut niveau)[14] ;
- p4test
- teste le front-end des programmes en P416[15].
Objectifs
Le langage P4 a été conçu pour répondre à trois objectifs[16] :
- Il offre une possibilitĂ© de mise Ă niveau ou de modification sur site : Une fois dĂ©ployĂ© sur le matĂ©riel, le programme peut ĂȘtre modifiĂ© dans le cas oĂč le traitement des paquets doit Ă©voluer[16].
- De plus le langage: P4 n'est liĂ© Ă aucun protocole rĂ©seau et aucun traitement de packet spĂ©cifique, il n'a donc pas de notion prĂ©dĂ©terminĂ©e du format d'un paquet. Cela permet de dĂ©finir de nouveaux protocoles si nĂ©cessaire et Ă©limine les contraintes sur la façon dont les paquets individuels peuvent ĂȘtre corrĂ©lĂ©s[4].
- La cible ne bĂ©nĂ©ficie d'aucune obligation sur le plan matĂ©riel: Lors de l'Ă©criture du programme P4, les dĂ©veloppeurs dĂ©finissent les fonctionnalitĂ©s du traitement des paquets sans se prĂ©occuper des spĂ©cificitĂ©s du matĂ©riel cible sur lequel le programme doit ĂȘtre implĂ©mentĂ©[16].
Expérimentations
P4 est un langage qui est peu utilisĂ© mais qui fait tout de mĂȘme l'objet d'expĂ©rimentations ayant divers objectifs.
DĂ©tection d'attaques
L'implĂ©mentation de P4 sur un commutateur de type logiciel montre que le langage peut ĂȘtre utilisĂ© pour de la dĂ©tection d'attaques, comme les attaques SYN[4]. P4 permet une flexibilitĂ© de la mĂ©moire allouĂ©e Ă un dispositif, Ă la diffĂ©rence d'un matĂ©riel rĂ©seau standard qui peut avoir une mĂ©moire d'une taille fixe. Sur un matĂ©riel implĂ©mentĂ© avec P4, il est possible de modifier la taille de la mĂ©moire au besoin, et donc d'enregistrer le trafic rĂ©seau. Ainsi, P4 peut aider Ă la sĂ©curisation de rĂ©seau via une connaissance complĂšte du trafic de donnĂ©es au sein du rĂ©seau[4]. Cependant, selon les circonstances de l'attaque, l'expĂ©rimentation montre que la dĂ©tection d'attaque est plus difficile.
Surveillance du réseau
P4 permet de surveiller et visualiser les informations sur l'état du réseau à moindre coût. En effet, à la différence de SDN qui apporte des coûts élevés pour la surveillance du réseau, P4 récupÚre des informations sur l'état du réseau (identification du commutateur, perte de paquets et occupation de la file d'attente, etc.) sans ajouter de paquets de détection supplémentaires[17]. Une fois ces informations récoltées, le trafic est contrÎlé en temps réel en fonction de l'état du réseau[18], ce qui permet notamment d'éliminer le phénomÚne de congestion[19].
Pare-feu logiciel
Le langage peut ĂȘtre utilisĂ© afin de mettre en place un pare-feu logiciel Ă moindre coĂ»t. Cependant dans une expĂ©rimentation, il est dĂ©montrĂ© que l'efficacitĂ© du pare-feu dĂ©pend du nombre de paquets qui transitent. Ainsi, s'il peut ĂȘtre plus rapide que certains pare-feux virtualisĂ©s quand il y a moins de 1000 paquets, dĂšs que ce seuil est dĂ©passĂ© son efficacitĂ© baisse[20].
Avantages
Dans le cadre des expĂ©rimentations dâimplĂ©mentation qui ont eu lieu, il a Ă©tĂ© dĂ©montrĂ© que le langage P4 dispose de plusieurs avantages.
Ainsi, il amĂ©liore la sĂ©curitĂ© du rĂ©seau[4] grĂące Ă la mise en place des en-tĂȘtes et des rĂšgles de traitement des flux qui permettent dâĂ©viter la congestion.
De plus, le langage apporte une certaine flexibilitĂ© au niveau des matĂ©riels rĂ©seaux. En effet, il permet de programmer le traitement des paquets en utilisant uniquement des requĂȘtes et des consultations de tables, indĂ©pendamment du matĂ©riel sur lequel il est implĂ©mentĂ©, contrairement aux matĂ©riels rĂ©seaux traditionnels qui disposent dâun langage propriĂ©taire.
Le langage offre Ă©galement la possibilitĂ© dâanalyser des trames et, Ă lâaide du compilateur, gĂšrent les dĂ©tails de bas niveau tels que lâallocation de ressources, car il permet de dĂ©composer les ressources de stockage, et lâordonnancement.
Avec la version P416 du langage, les créateurs du langage ont mis à disposition des librairies, ce qui est un avantage pour le développement de certaines fonctions spécifiques au matériel.
Inconvénients
En 2020, le langage P4 est supportĂ© par trĂšs peu de matĂ©riel ce qui limite son utilisation. Ceci peut ĂȘtre expliquĂ© par le fait que le langage P4 est en dĂ©veloppement actif, les fournisseurs de matĂ©riels attendent que le langage se stabilise et se dĂ©mocratise avant de proposer du matĂ©riel adaptĂ©. P4 laisse aussi beaucoup de dĂ©tails non spĂ©cifiĂ©s[21].
P4 augmente également les risques d'encourir des bugs d'exécution aprÚs le déploiement des programmes P4[22], ou bien des erreurs d'implémentation de protocoles par exemple[23]. L'absence de runtime, logiciel responsable de l'exécution des programmes informatiques, rendent difficile le dépannage de ces bugs[22].
De plus, selon l'architecture du réseau, il est parfois difficile de traduire les spécificités en P4[24]. Le langage P4 ne définit pas l'interface entre le plan de données et le plan de contrÎle, il s'agit d'une spécificité liée au matériel cible[7].
P4 ne permet dâexĂ©cuter des actions qu'Ă l'intĂ©rieur des trames rĂ©seaux ou lorsqu'une correspondance table+action a Ă©tĂ© trouvĂ©e les tables de correspondance de P4 ne peuvent pas effectuer de correspondance sur des champs de longueur variable[25]. Ainsi, la comparaison entre plusieurs variables peut ĂȘtre compliquĂ©e, notamment lorsque l'on souhaite trouver la plus petite valeur, car P4 ne peut comparer que des valeurs entre elles dans les objets de contrĂŽle et peut les modifier uniquement s'il y a une correspondance dans une table. De plus les tables de correspondance de P4 ne peuvent pas effectuer de correspondance sur des champs de longueur variable[25].
Références
- 1st P4 Workshop
- P416 Language Specification
- Martins 2018, p. 204
- Hill 2018, p. 23
- Geng 2018, p. 2
- Budiu 2017, p. 11
- Hill 2018, p. 24
- Wernecke 2018, p. 2
- Bosshart 2014, p. 91
- P4C C++
- Sivaraman 2015, p. 2
- P4C bmv2
- P4C ebpf
- P4C graphs
- P4C test
- Bosshart 2014, p. 89
- Geng 2018, p. 3
- Geng 2018, p. 5
- Turkovic 2018, p. 45
- Rakesh 2018, p. 69
- Hill 2018, p. 31
- Zhang 2017, p. 1714
- Freire 2017, p. 2495
- Miguel 2018, p. 31
- Hill 2018, p. 26
Bibliographie
- (en) Junjie Geng, Jinyao Yan, Yangbiao Ren et Yuan Zhang, « Design and Implementation of Network Monitoring and Scheduling Architecture Based on P4 », ACM (Association for Computing Machinery) - Proceedings of the 2nd International Conference on computer science and application engineering,â , p. 1-6 (ISBN 9781450365123, DOI 10.1145/3207677.3278059).
- (en) Belma Turkovic, Fernando Kuipers, Niels van Adrichem et Koen Langendoen, « Fast network congestion detection and avoidance using P4 », ACM (Association for Computing Machinery) - Proceedings of the 2018 Workshop on networking for emerging applications and technologies,â , p. 1-8 (ISBN 9781450359078, DOI 10.1145/3229574.3229581).
- (en) Joseph Hill, Mitchel Aloserij et Paola Grosso, « Tracking Network Flows with P4 », 2018 IEEE/ACM Innovating the Network for Data-Intensive Science (INDIS),â , p. 36-43 (ISBN 9781728101941, DOI 10.1109/INDIS.2018.00006).
- (en) Jehandad Khan et Peter Athanas, « Query language for large-scale P4 network debugging », ACM (Association for Computing Machinery) - Proceedings of the 2018 Symposium on architectures for networking and communications systems,â , p. 162-164 (ISBN 9781450359023, DOI 10.1145/3230718.3232108)
- (en) Christian Wernecke, Helge Parzyjegla, Gero Muhl, Peter Danielis et Dirk Timmermann, « Realizing Content-Based Publish/Subscribe with P4 », 2018 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN),â , p. 1-7 (DOI 10.1109/NFV-SDN.2018.8725641).
- (en) Regis F.T Martins, Fabio L Verdi, Rodolfo Villaca et Luis Fernando U Garcia, « Using Probabilistic Data Structures for Monitoring of Multi-tenant P4-based Networks », 2018 IEEE Symposium on Computers and Communications (ISCC),â , p. 204-207 (ISBN 9781538669501, DOI 10.1109/ISCC.2018.8538352).
- (en) Anirudh Sivaraman, Kim Changhoon, Ramkumar Krishnamoorthy, Advait Dixit et Mihai Budiu, « DC.p4: programming the forwarding plane of a data-center switch », Proceedings of the 1st ACM SIGCOMM Symposium on software defined networking research,â , p. 1-8 (ISBN 9781450334518, DOI 10.1145/2774993.2775007).
- (en) Elie F Kfoury, Jorge Crichigno, Elias Bou-Harb, David Khoury et Gautam Srivastava, « Enabling TCP Pacing using Programmable Data Plane Switches », IEEE Conference Publications - 42nd International Conference on Telecommunications and Signal Processing (TSP),â , p. 273-277 (ISBN 9781728118642, DOI 10.1109/TSP.2019.8768888)
- (en) Zijun Hang, Mei Wen, Yang Shi et Chunyuan Zhang, « Programming Protocol-Independent Packet Processors High-Level Programming (P4HLP): Towards Unified High-Level Programming for a Commodity Programmable Switch », Directory of Open Access Journals (DOAJ), vol. 8(9),â , p. 958 (ISSN 2079-9292, DOI 10.3390/electronics8090958)
- (en) Mihai Budiu et Chris Dodd, « The P416 Programming Language », ACM Digital Library (Association for Computing Machinery) - ACM SIGOPS Operating Systems Review, vol. 51, no 1,â , p. 5-14 (ISSN 1943-586X, DOI 10.1145/3139645.3139648)
- (en) Radek Isa, Pavel Benacek et Viktor Pus, « Verification of Generated RTL from P4 Source Code », IEEE 26th International Conference on Network Protocols (ICNP),â , p. 444-445 (ISBN 9781538660430, DOI 10.1109/ICNP.2018.00065)
- (en) Rui Miguel, Salvatore Signorello et Fernando M. V Ramos, « Named Data Networking with Programmable Switches », IEEE 26th International Conference on Network Protocols (ICNP),â , p. 400-405 (ISBN 9781538660430, DOI 10.1109/ICNP.2018.00055).
- (en) Lucas Freire, Miguel Neves, Alberto Schaeffer-Filho et Marinho Barcellos, « POSTER: Finding Vulnerabilities in P4 Programs with Assertion-based Verification », IEEE Concurrency,â , p. 2495-2497 (ISBN 9781450349468, DOI 10.1145/3133956.3138837).
- (en) Cheng Zhang, Jun Bi, Yu Zhou, Jianping Wu, Bingyang Liu, Zhaogeng Li, Abdul Basit Dogar et Yangyang Wang, « P4DB: On-the-fly debugging of the programmable data plane », IEEE 25th International Conference on Network Protocols (ICNP),,â , p. 1-10 (ISBN 9781509065011, DOI 10.1109/ICNP.2017.8117548).
- (en) Jeferson Santiago Da Silva, François-Raymond Boyer, Laurent-Olivier Chiquette et J. M. Pierre Langlois, « Extern Objects in P4: an ROHC Header Compression Scheme Case Study », 4th IEEE Conference on Network Softwarization and Workshops (NetSoft),â (ISBN 978-1-5386-4633-5, DOI 10.1109/NETSOFT.2018.8460108)
- (en) Radu Stoenescu, Dragos Dumitrescu, Matei Popovici, Lorina Negreanu et Costin Raiciu, « Debugging P4 programs with vera », Proceedings of the 2018 Conference of the ACM Special Interest Group on data communication,â , p. 518-532 (ISBN 9781450355674, DOI 10.1145/3230543.3230548)
- (en) Peilong Li et Yan Luo, « P4GPU: Accelerate packet processing of a P4 program with a CPU-GPU heterogeneous architecture », ACM/IEEE Symposium on Architectures for Networking and Communications Systems (ANCS),â , p. 125-126 (ISBN 9781450341837, DOI 10.1145/2881025.2889480)
- (en) Pavel BenĂĄÄek, Viktor PuĆĄ, Hana KubĂĄtovĂĄ et TomĂĄĆĄ Äejka, « P4-To-VHDL: Automatic generation of high-speed input and output network blocks », Microprocessors and Microsystems, vol. 56,â , p. 22-33 (ISBN 978-1-7281-0194-1, DOI 10.1016/j.micpro.2017.10.012)
- (en) Pat Bosshart, Dan Daly, Glen Gibb, Martin Izzard, Nick Mckeown, Jennifer Rexford, Cole Schlesinger, Dan Talayco, Amin Vahdat, George Varghese et David Walker, « P4: programming protocol-independent packet processors », ACM SIGCOMM Computer Communication Review, vol. 44, no 3,â , p. 87-95 (ISSN 1943-5819, DOI 10.1145/2656877.2656890).
- (en) Ali Kheradmand et Grigore Rosu, « P4K: A Formal Semantics of P4 and Applications », Cornell University,â (arXiv 1804.01468)
- (en) F Paolucci, F Civerchia, A Sgambelluri, A Giorgetti, F Cugini et P Castoldi, « P4 Edge node enabling stateful traffic engineering and cyber security », IEEE/OSA Journal of Optical Communications and Networking, vol. 11, no 1,â , A84-A95 (ISSN 1943-0639)
- (en) Bin Niu, Jiawei Kong, Shaofei Tang, Yingcong Li et Zuqing Zhu, « Visualize Your IP-over-Optical Network in Realtime: a P4-based Flexible Multilayer In-band Network Telemetry (ML-INT) System », IEEE Access, vol. 7,â (ISSN 2169-3536, DOI 10.1109/ACCESS.2019.2924332)
- (en) Miguel Neves, Lucas Freire, Alberto Schaeffer-Filho et Marinho Barcellos, « Verification of P4 programs in feasible time using assertions », ACM Digital Library (Association for Computing Machinery) - Proceedings of the 14th International Conference on emerging networking experiments and technologies,â , p. 73-85 (ISBN 9781450360807, DOI 10.1145/3281411.3281421)
- (en) Datta Rakesh, Choi Sean, Chowdhary Anurag et Park Younghee, « P4Guard: Designing P4 Based Firewall », MILCOM 2018 - 2018 IEEE Military Communications Conference (MILCOM), October 2018, pp.1-6,â , p. 1-6 (ISBN 9781538671856, DOI 10.1109/MILCOM.2018.8599726).
- (en) Jed Liu, William Hallahan, Cole Schlesinger, Milad Sharif, Jeongkeun Lee, Robert SoulĂ©, Han Wang et CÄlin CaĆcaval, « p4v: practical verification for programmable data planes », Proceedings of the 2018 Conference of the ACM Special Interest Group on data communication,â , p. 490-503 (ISBN 9781538671856, DOI 10.1145/3230543.3230582)
Liens externes
- (en) « GitHub P4 »
- (en) « 1st P4 Workshop ».
- (en) « P4 Code ».
- (en) « P4C C++ ».
- (en) « P4C bmv2 ».
- (en) « P4C ebpf ».
- (en) « P4C graphs ».
- (en) « P4C test ».