
P4 je programski jezik namenjen programiranju pravila usmeravanja paketa. Za razliku od jezika opšte namene, kao što su C ili Python, P4 je predmetno orijentisani jezik sa nizom konstrukcija optimizovanih za mrežno usmeravanje.
P4 je jezik otvorenog koda, licenciran i podržan od strane neprofitne organizacije pod nazivom P4 Language Consortium. Takođe ga podržavaju Open Networking Foundation (ONF) i Linux Foundation (LF) — dve najveće krovne organizacije u projektima otvorenog koda u oblasti mrežnih tehnologija.
Jezik je prvi put zamišljen 2013. godine i opisan 2014. u dokumentu SIGCOMM CCR pod nazivom „Nezavistan od protokola, programiranje procesora usmeravanja paketa.“
Od svog stvaranja, P4 eksponencijalno raste i razvija se, brzo postajući standard za opisivanje prenosa paketa mrežnim uređajima, uključujući mrežne adaptore, prekidače i rutere.
„SDN je transformisao mrežnu industriju, a P4 unapređuje SDN na novi nivo, omogućavajući programabilnost u oblasti usmeravanja“, rekao je Guru Parulkar, izvršni direktor Open Networking Foundation.
Jezik P4 je prvobitno kreiran od strane grupe inženjera i istraživača iz Google-a, Intel-a, Microsoft Research-a, Barefoot-a, Princetona i Stanford-a. Cilj je bio jednostavan: stvoriti lako upotrebljiv jezik koji bi programer mogao naučiti za dan i koristiti za precizno opisivanje načina na koji se paketi preusmeravaju u mreži.
Od samog početka, P4 je razvijan kao cilj nezavistan (tj. program napisan u P4 mogao bi biti kompajliran bez izmena za izvođenje na različitim ciljevima, kao što su ASIC, FPGA, CPU, NPU i GPU).
Takođe, jezik je protokol nezavistan (tj. program P4 može opisivati postojeće standardne protokole ili se koristiti za navođenje novih prilagodljivih režima adresiranja).
U industriji, P4 se koristi za programiranje uređaja. Moguće je da će u budućnosti Internet-RFC i IEEE standardi takođe uključivati specifikaciju P4.
P4 se může používat jak pro programovatelné, tak pro zařízení s pevnou funkcí. Například se používá pro přesné zaznamenání chování přepínače v API rozhraních rozhraní pro abstrakci přepínače (SAI), které používají operační systémy přepínačů s otevřeným zdrojovým kódem SONiC. P4 se také používá v projektu ONF Stratum k popisu chování přepínání prostřednictvím několika stacionárních a programovatelných zařízení.
Popis chování přepínače a síťových adaptérů poprvé umožňuje vytvořit přesný vykonávaný model celé sítě před nasazením. Velcí poskytovatelé cloudových služeb mohou zcela testovat a ladit síť pomocí softwaru, což výrazně zkracuje čas a náklady na testování interakcí v laboratoři, aniž by vyžadovali nákladné vybavení.
Pomocí P4 mohou dodavatelé síťového vybavení počítat se společným základním chováním routování napříč všemi produkty, což umožňuje znovu používat testovací infrastrukturu, zjednodušuje vývoj softwaru pro řízení a nakonec zajišťuje kompatibilitu.
Samozřejmě, P4 lze použít k psaní programů popisujících zcela nové způsoby routování. Například P4 se široce používá pro telemetrii a měření v datových centrech, sítích podniků a poskytovatelů služeb.
Výzkumná komunita se také aktivizovala. Několik předních akademických výzkumných skupin v oblasti síťových technologií publikovalo zajímavé nové aplikace založené na programech P4, včetně vyvažování zátěže, souvisejících protokolů a ukládání hodnoty klíče do mezipaměti. Vytváří se nová paradigma programování, inovace se přesouvají z hardware do softwaru, což umožňuje vznik mnoha neočekávaných, nových a geniálních nápadů.
Skupnost razvijalcev je veliko prispevala k razvoju kode, vključno s kompilatorji, cevovodnimi programi, vedenjskimi modeli, API-ji, testnimi okolji, aplikacijami in še več. Predani razvijalci so prisotni v podjetjih, kot so Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx in ZTE; iz univerz, vključno z BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass in USI; ter projekti z odprto kodo, kot so CORD, FD.io, OpenDaylight, ONOS, OvS, SAI in Stratum, kar poudarja dejstvo, da je P4 neodvisen javni projekt.
Tipična generacija kontrolerjev za jezik P4:

Perspektive uporabe

Ker je jezik namenjen aplikacijam usmerjanja, se seznam zahtev in možnosti oblikovanja razlikuje od jezikov splošnega namena. Glavne značilnosti jezika so:
- Neodvisnost od ciljne implementacije;
- Neodvisnost od uporabljenega protokola(-ov);
- Rekonfigurabilnost polj.
Neodvisnost od ciljne implementacije
Programi P4 so zasnovani tako, da niso odvisni od implementacije, kar pomeni, da jih je mogoče prevesti za številne različne vrste izvajalnih naprav, kot so procesorji splošnega namena, FPGA, sistemi na čipu, omrežni procesorji in ASIC. Te različne vrste naprav imenujemo cilji P4, za vsak cilj je potreben kompilator, ki pretvarja izvorno kodo P4 v model ciljnega preklopnika. Kompilator je lahko vgrajen v ciljno napravo, zunanjih programski opremi ali celo v oblačni storitvi. Ker so mnogi izvorni cilji za programe P4 služili preprostemu preklapljanju paketov, pogosto slišimo izraz 'preklopnik P4', čeprav je uporaba 'cilj P4' bolj natančna.
Neodvisnost od uporabljenega protokola(-ov)
P4 je neodvisen od protokolov. To pomeni, da je jezik brez vgrajene podpore za pogoste protokole, kot so IP, Ethernet, TCP, VxLAN ali MPLS. Namesto tega programer P4 v programu opisuje formate glav in imena polj zahtevanih protokolov, ki jih nato interpretira in obdela s kompilirano programsko opremo in ciljno napravo.
Rekonfigurabilnost polj
Neodvisnost od protokola in model abstraktnega jezika omogočata rekonstrukcijo — cilji P4 bi morali imeti možnost spreminjati obdelavo paketov po namestitvi sistema. To zmožnost tradicionalno povezujejo z usmerjanjem prek procesorjev splošne rabe ali omrežnih procesorjev, ne pa z integriranimi vezji s fiksnimi funkcijami.
Čeprav v jeziku ni ničesar, kar bi preprečilo optimizacijo delovanja določenega nabora protokolov, so te optimizacije avtorju jezika nevidne in lahko na koncu zmanjšajo fleksibilnost sistema ter ciljev in njihovo rekonstrukcijo.
Te značilnosti jezika so bile sprva zasnovane s strani njegovih ustvarjalcev z namenom, da se uporablja v omrežni infrastrukturi.
Jezik se že uporablja v mnogih podjetjih:
1) Hipermerskalni podatkovni centri;
Kitajska družba Tencent je največja investicijska družba na svetu in ena največjih podjetij za tvegan kapital. Hčerinska podjetja Tencenta, bodisi v sami Kitajski bodisi v drugih državah, se specializirajo na različnih področjih visoke tehnologije, vključno z različnimi internetnimi storitvami, razvojem umetne inteligence in elektronskimi zabavami.
P4 in programsko usmerjanje sta napredni tehnologiji, ki se uporabljata v mrežni arhitekturi podjetja.
Kot eden od ustvarjalcev Google ponosno poudarja hitro uvedbo P4 v omrežni industriji, še posebej na področju arhitekturnega oblikovanja podatkovnih centrov.
2) Komercialna podjetja;
Goldman Sachs izkorišča prednosti sodelovanja z zajednico odprtokodnih rešitev ter razvijanja skupnih standardov in rešitev, kar že prinaša inovacije v omrežno infrastrukturo in ponuja najboljše rešitve strankam.
3) Proizvodnja;
Vsa omrežna industrija bo imela koristi od takega jezika, kot je P4, ki nedvoumno določa obnašanje preusmerjanja. Tudi v Cisco menijo, da bodo svoje produktne linije prenesli na uporabo tega jezika.
Juniper Networks je vključil P4 in P4 Runtime v vrsto svojih izdelkov ter zagotavlja programski dostop do vgrajenega procesorja Juniper in njegovega programskega kode.
Ruijie Networks je aktivni pobornik P4 i prednosti koje donosi mrežama. Uz P4, kompanija može stvarati i isporučivati najbolje u svojoj klasi rješenja širokom spektru klijenata.
4) Telekomunikacijski providitelji;
AT&T je bila jedan od prvih pobornika P4, prvi koja je koristila P4 za određivanje ponašanja koje je željela vidjeti u mrežama, i koristeći P4 programabilne uređaje za preusmjeravanje u svojoj mreži.
U Deutsche Telekom, jezik se koristi za prototipizaciju ključnih mrežnih funkcija u okviru programa Access 4.0.
5) Poluprovodna industrija;
Jezik je omogućio realizaciju nove paradigme prenosa mogućnosti softvera u domeni mrežnog usmjeravanja od strane kompanije Barefoot.
Xilinx je bio jedan od osnivača P4.org i aktivno je učestvovao u razvoju P4 jezika te ga implementirao u programabilne platforme na bazi FPGA za SmartNIC i NFV opremu, objavivši jedan od prvih kompajlera P416 kao dio dizajna SDNet.
6) Softver.
U kompaniji VMware smatraju da P4 stvara ogromnu energiju, inovacije i zajednicu koja vodi ka značajnim i neophodnim transformacijama u mreži. VMware je prvobitno bila deo ovog industrijskog kretanja jer nova talas inovacija dolazi iz softverskih pristupa koji proširuju mogućnosti infrastrukture i realizuju ih u najnovijim proizvodima.
Dakle, P4 je jezik programiranja nezavistan od cilja i protokola, koji se koristi u industriji i naučnoj zajednici za jasno definisanje ponašanja usmeravanja paketa kao programa koji se može kompajlirati za više namena. Danas namene uključuju hardverske i softverske prekidače, hipervizorske prekidače, NPU, grafičke procesore, FPGA, SmartNIC i ASIC.
Glavne karakteristike jezika značajno proširuju sfere njegove primene i omogućavaju brzu implementaciju u arhitekture mreža.
Odakle početi
P4 je otvoreni projekat, sve aktuelne informacije su dostupne na sajtu
Link ka repozitorijumu , gde možete dobiti izvorne kodove primera i edukativne materijale.
za Eclipse sa podrškom za P4, ali možemo preporučiti od kompanije Barefoot.

Razmotrićemo osnovne apstrakcije jezgra:
Določanje naslovov — z njihovo pomočjo so določeni naslovi protokola.
V določanju naslovov je navedeno:
- opis formatov paketov in imena polj naslovov
- fiksna in spremenljiva dovoljena polja
Na primer
zavihek Ethernet_h{
bitdstAddr;
bitsrcAddr;
bitetherType;
}
zavihek IPv4_h{
bitverzija;
bitihl;
bitdiffserv;
bitskupnoDolžina;
bitidentifikacija;
bitzastavice;
bitfragOffset;
bitttl;
bitprotokol;
bithdrChecksum;
bitsrcAddr;
bitdstAddr;
varbitmožnosti;
}
Parserji — njihova naloga je analizirati naslove.
Naslednji primer parserja bo določil prehod končnega stanja naprave iz enega začetnega stanja v eno od dveh končnih:

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;
}
}…
}
Tabele — vsebujejo stanja naprave, ki povezujejo uporabniške ključe z dejanji. Akcije — opis tega, kako naj se manipulira s paketom.
Tabele vsebujejo stanja (določena na upravnem nivoju) za posredovanje paketov, opisujejo enoto akcije Match-Action
Sopostavljanje paketov poteka na podlagi:
- Natančnega ujemanja
- Najdaljšega ujemanja s predpono (LPM)
- Trojnim ujemanjem (maskiranjem)
tabela ipv4_lpm{
beread{
ipv4.dstAddr: lpm;
} actions {
naprej();
}
}
Vsa mogoča dejanja morajo biti v tabelah definirana vnaprej.
Dejanja sestavljajo koda in podatki. Podatki prihajajo z upravnega nivoja (na primer, IP-naslovi / številke vrat). Določeni, brez ciklični primitivni lahko bodo določeni neposredno v dejanju, vendar mora biti število ukazov predvidljivo. Zato dejanja ne morejo vsebovati nobenih ciklov ali pogojnih operatorjev.
akcija 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;
}
Moduli Match-Action — dejanja za ustvarjanje iskalnega ključa, iskanje v tabeli, izvedbo dejanj.
Tipičen primer modula je prikazan na sliki:

Tok upravljanja — določa vrstni red uporabe modulov Match-Action. To je imperativni program, ki določa logiko visokega nivoja in zaporedje Match-Action. Tok upravljanja povezuje vse objekte, kar določa nivo upravljanja.
Zunanje objekte — so specifični objekti z jasno definirano arhitekturo in vmesniki API. Na primer, izračun kontrolne vsote, registri, števci itd.
zunanje registriraj{
registriraj(bit velikost);
nič beri(out T rezultat, in bit indeks);
nič piši(in bit indeks, in T vrednost);
}
zunanje Checksum16{
Checksum16(); //konstruktor
nič clear(); //pripravi enoto za izračun
nič update(in T data); //dodaj podatke v kontrolni znesek
nič remove(in T data); //odstrani podatke iz obstoječega kontrolnega zneska
bitget(); //pridobi kontrolni znesek za podatke, dodane od zadnjega čiščenja
}
Metapodatki — strukture podatkov, povezane z vsakim paketom.
Obstajata 2 vrste metapodatkov:
Uporabniški metapodatki (prazna struktura za vse pakete)
Tukaj lahko vstavite vse, kar želite
Na voljo v celotnem potoku
praktično za uporabo, na primer za shranjevanje hasha paketa
Notranji metapodatki — zagotavlja arhitektura
Vhodna vrata, izhodna vrata so tukaj določena
Časovna oznaka, kdaj je bil paket postavljen v čakalno vrsto, globina čakalne vrste
multicast hash / multicast queue
Prioriteta paketa, važnost paketa
Specifikacija izlaznog porta (na primer, izlazna queue)
P4 kompajler
P4 kompajler (P4C) generiše:
- Data plane runtime
- API za upravljanje stanjem mašine u data plane

Primer softverskog preklopnika na jeziku P4
Izvorni kodovi mogu se preuzeti iz repozitorijuma.
p4lang/p4c-bm: stvara JSON konfiguraciju za bmv2
p4lang/bmv2: softverski preklopnik koji razume JSON konfiguracije verzije bmv2
Na slici je prikazana šema kompajlacije projekta:

Manipulacije sa tabelama, registrima čitanja, brojačima:
- nastavi_tabelu_na_prewod <table name> <action name> <action parameters>
- dodaj_tabelo <table name> <action name> <match fields> => <dejanje
parameters> [priority] - izbriši_tabelu <table name> <entry handle>
U izvornih kodovima je navedena programa simple_switch_CLI za lakše korišćenje API-ja softverskog preklopnika.
Ovaj i drugi primeri mogu se preuzeti iz repozitorijuma.

P.S. Početkom leta kompanija Intel je potpisala sporazum o akviziciji Barefoot Networks, s ciljem da brzo zadovolji potrebe korisnika Hyperscale Cloud. Kako je izjavio Navin Shenoy (izvršni potpredsednik i generalni menadžer Data Center Group kompanije Intel Corporation) — ovo će omogućiti da Intel pruži veće radne opterećenje i više mogućnosti za klijente data centara.
Po mom ličnom mišljenju, ne treba zaboraviti da je kompanija Intel lider u proizvodnji FPGA čipova i da ima odličnu sredinu Quartus. To znači da se može očekivati da će dolaskom u Intel, kompanija Barefoot ne samo proširiti svoju proizvodnu liniju, već i da će Quartus i P4 Studio doživeti ozbiljna ažuriranja i proširenja sa linijom Toffino i Toffino 2.
Zvanični član P4 zajednice — kompanija .
Izvor: habr.com
