P4 (nyelv)

A P4 egy programozási nyelv , amely a csomagfeldolgozási logikát fejezi ki egy számítógépes hálózati kommunikációs elemen , például kapcsolón , hálózati kártyán, útválasztón vagy eszközön, annak végrehajtása érdekében. A P4 programozási nyelvet egyes egyetemek 2014-ben vezették be a vállalkozások elé, és eredetileg egy SIGCOMM CCR dokumentumban írták le, amely a "Programozás protokolltól független csomagfeldolgozók" címet viseli. A közönséges nevet a "P4" betűszóra rövidítik.


P4 hálózati nyelv
Logó.
Fejlesztők A P4 Nyelvi Konzorcium
Utolsó verzió P4 16 , 1.2.0 verzió 2019. október 23
Engedély Apache 2
Weboldal p4.org

Eredet

Az első P4 nyelvű műhelytalálkozóra 2009 2015. június 4a Stanfordi Egyetemen Nick McKeown, a Stanford Egyetem és Jennifer Rexford, a Princetoni Egyetem elnöke volt . A P4.org konzorcium tette közzé a végleges specifikáció az új verzió a nyelv úgynevezett P4 16 , a2017. május, amely a nyelv első verzióját, P4 14-et váltja fel .

Elv

A szoftver által definiált hálózat (SDN) fejlődésének tekintve a P4 lehetővé teszi az áramlás feldolgozásának módját a hálózati csomagátviteli berendezéseken , például útválasztókon , kapcsolókon vagy tűzfalakon , akár hardveren, akár szoftveren, feldolgozni. Ahogy a „Programozási protokolltól független processzorok” neve is sugallja, a nyelv nem veszi figyelembe a csomag formátumát . A fejlesztők valóban deklarálják a csomag feldolgozását egy P4 nyelven írt programban, majd a fordító a kívánt hardvernek megfelelő formátumba helyezi. A P4 nyelvű programozást különösen a 3. szintű átviteli függvények és az INT függvények megvalósítására használják. A sávon belüli hálózati telemetriai technológia lehetővé teszi, hogy a mérőkapcsolók részletes információkat nyújtsanak a hálózati terhelésről, és felhasználják azokat torlódásszabályozó mechanizmusok biztosítására, és ezáltal a nagyon nagy sebességű hálózati stabilitás jobb kezelésére.
Ennek a nyelvnek két változata létezik: P4 14 és P4 16 . A P4 16 jelentős változásokat hajt végre, és nem kompatibilis a P4 14- gyel . Így számos funkciót eltávolítottak a P4 14 alapnyelvből, és ezeket már külső könyvtárakban tervezik vagy tervezik megvalósítani .

P4 alapdiagram


Művelet

A P4 célja a hálózati berendezések adatfeldolgozásának teljes programozása . Ez a nyelv képes programozni a hálózati berendezések viselkedését . Egy IPv4 csomag feldolgozására szolgáló algoritmus egyszerűen elkészíthető. A csomagok tényleges formátumát egyszerűen meghatározza a program. Az alábbi példa bemutatja, hogyan kell elemezni (elemezni) egy Ethernet keretet .

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; } }

Miután elvégezte a bejövő csomagok elemzését, a fejléceket kivonja és elküldi a "Match + Actions" típusú táblákba . Ezek a táblázatok tartalmazzák a megfelelő csomagok adatait, valamint az útválasztásuk során figyelembe vett protokollokat . Csak annyi marad, hogy meghatározza a megfelelő csomagok végrehajtandó műveleteit. A program létrehozása után elegendő lefordítani, hogy a kívánt hardveren fusson.

Szintaxis

A P4 típusú program a következő kulcsösszetevők attribútumait tartalmazza:

Fejlécek (fejlécek) Fejléc-meghatározás, amely leírja a mezők sorozatának sorrendjét és felépítését. Tartalmazza a mezõszélességek és a mezõértékekre vonatkozó korlátozások megadását; Parserek Az értelmező definíciója meghatározza, hogyan lehet azonosítani az érvényes fejléceket és fejlécsorozatokat a csomagokban; Táblázatok A Match + action táblák a csomagfeldolgozás végrehajtásának mechanizmusát jelentik. A P4 program meghatározza azokat a mezőket, amelyeken egy táblázat megfeleltethető, és azokat a műveleteket, amelyeket végre tud hajtani; Műveletek A P4 támogatja az összetett műveletek felépítését egyszerűbb, protokollfüggetlen primitívekből. Ezek a bonyolult műveletek a match + action táblákban érhetők el; Vezérlő programok Az ellenőrző program meghatározza a csomagra alkalmazott egyezés + művelet táblák sorrendjét. Egy egyszerű elengedhetetlen program leírja a vezérlés folyamatát a match + action táblák között. #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;

Fordítóprogram

Annak érdekében, hogy a cél hardveren megvalósulhasson, amely lehet hardver vagy szoftver típusú, a P4-ben írt programot össze kell fordítani, vagyis a fordító által átalakítani objektumkóddá . Két fordító van, az egyiket eredetileg a P4 14-hez használták , Pythonban írták, a másik pedig a P4 16 verzió óta , P4C néven. Ez utóbbi, amelyet a "P4 Language Consortium" P4 fejlesztői csoport biztosított, kompatibilis a nyelv mindkét változatával, és C ++ 11-ben , nyílt forráskódú Apache 2 licenc alatt valósul meg . A fordító két elemzővel rendelkezik, mindegyikhez a két nyelv. A 14 P4 programanalizátor átalakítja a programot P4 16-ra .

A P4C háromrészes kezelést végez:

  • Kezelőfelület  : A cél hardvertől függetlenül felelős a különféle programvezérlések végrehajtásáért, mint például a szintaxis, a szemantika, hogy a kód megfeleljen a nyelvi specifikációknak, majd szükség szerint leegyszerűsíti és optimalizálja a kódot;
  • Középső: Úgy hajtja végre a kód átalakítását, hogy az részben megfeleljen a célnak, de nem ad hozzá konkrét erőforrás-hozzárendeléseket;
  • Háttér  : Felelős az erőforrások kiosztásáért , az ütemezésért és a kód hardvernek megfelelő nyelvvé történő átalakításáért.


A fordító többféle háttérprogramot támogat  :

p4c-bmv2 kódot generál JSON formátumban , hogy a program kompatibilis legyen a softswitcheken való megvalósítással; p4c-ebpf kódot generál C formátumban, amelyet aztán össze lehet fordítani eBPF-be; p4c-grafikonok vizuális reprezentációkat készít egy P4 programról (magas szintű vezérlési folyamatgrafika); p4test teszteli a P4 16 programok kezelőfelületét .

Célok

A P4 nyelvet három cél elérésére tervezték:

  • Lehetőséget kínál a helyszínen történő frissítésre vagy módosításra: Miután elindította a hardvert, a program módosítható abban az esetben, ha a csomagok feldolgozásának fejlődnie kell.
  • Ezenkívül a P4 nyelv nem kapcsolódik semmilyen hálózati protokollhoz és nincs külön csomagfeldolgozás, ezért nincs előre meghatározva a csomag formátuma. Ez lehetővé teszi az új protokollok szükség szerinti definiálását, és megszünteti az egyes csomagok korrelációjára vonatkozó korlátozásokat.
  • A célpont nem élvez semmilyen hardverkötelezettséget: A P4 program megírásakor a fejlesztők meghatározzák a csomagfeldolgozás funkcionalitását anélkül, hogy aggódnának a cél hardver sajátosságai miatt, amelyen a programot végre kell hajtani.

Kísérletek

A P4 egy olyan nyelv, amelyet kevesen használnak, de ugyanaz a különböző célú kísérletek tárgya.

Támadás észlelése

A P4 implementációja egy szoftver típusú kapcsolón azt mutatja, hogy a nyelv használható a támadások, például a SYN támadások felderítésére . A P4 rugalmasságot biztosít az eszköz számára lefoglalt memóriában , ellentétben a szokásos hálózati hardverrel, amelynek memóriája fix méretű lehet. A P4-mel megvalósított hardvereken lehetőség van a memória méretének szükség szerinti megváltoztatására, és ezáltal a hálózati forgalom rögzítésére. Így a P4 segíthet a hálózat biztonságában a hálózaton belüli adatforgalom teljes ismeretében. A támadás körülményeitől függően azonban a kísérletek azt mutatják, hogy a támadás észlelése nehezebb.

Hálózatfigyelés

A P4 lehetővé teszi a hálózat állapotára vonatkozó információk alacsony költség mellett történő nyomon követését és vizualizálását. Valójában az SDN-től eltérően, amely magas költségekkel jár a hálózatfelügyeletnél, a P4 további detektáló csomagok hozzáadása nélkül kap információt a hálózat állapotáról (kapcsolóazonosítás, csomagvesztés és várakozási sor foglaltság stb.). Miután ezeket az információkat összegyűjtötték, a forgalmat valós időben figyelik a hálózat állapotának megfelelően, ami különösen lehetővé teszi a torlódások jelenségének kiküszöbölését .

Szoftver tűzfal

A nyelv segítségével szoftveres tűzfal állítható be alacsony költséggel. Egy kísérlet során azonban kimutatták, hogy a tűzfal hatékonysága az átadott csomagok számától függ. Így ha ez 1000-nél kevesebb csomag esetén gyorsabb lehet, mint néhány virtualizált tűzfal, amint ez a küszöbérték túllépésre kerül, hatékonysága csökken.

Előnyök

A megvalósult kísérletek részeként bebizonyosodott, hogy a P4 nyelvnek számos előnye van.
Ezáltal fejlécek és a folyamatok feldolgozására vonatkozó szabályok révén javítja a hálózat biztonságát, amelyek lehetővé teszik a torlódások elkerülését.
Ezenkívül a nyelv bizonyos rugalmasságot biztosít a hálózati hardver szempontjából. Valójában lehetővé teszi a csomagok feldolgozásának programozását csak a táblák kéréseinek és konzultációinak felhasználásával, függetlenül attól, hogy milyen hardveren van megvalósítva, ellentétben a hagyományos hálózati hardverekkel, amelyek saját nyelvűek.
A nyelv emellett lehetőséget kínál a keretek elemzésére, és a fordító segítségével alacsony szintű részletek kezelésére, például az erőforrás- allokációra , mivel lehetővé teszi a tárolási erőforrások lebontását és ütemezését.
A nyelv P416 verziójával a nyelv készítői elérhetővé tették a könyvtárakat, ami előnyt jelent a hardverre jellemző egyes funkciók fejlesztése szempontjából.

Hátrányok

2020-ban a P4 nyelvet nagyon kevés hardver támogatja, ami korlátozza annak használatát. Ez azzal magyarázható, hogy a P4 nyelv aktív fejlesztés alatt áll, a hardver beszállítók megvárják a nyelv stabilizálódását és demokratizálódását, mielőtt megfelelő hardvert kínálnának. A P4 sok részletet szintén meg nem határozott.
A P4 emellett növeli a futásidejű hibák előfordulásának kockázatát a P4 programok telepítése után, vagy például protokoll-végrehajtási hibákat. A futási idő hiánya , a számítógépes programok futtatásáért felelős szoftver megnehezíti a hibák elhárítását.
Ezenkívül a hálózati architektúrától függően néha nehéz a sajátosságokat P4-be lefordítani. A P4 nyelv nem határozza meg az interfészt az adatsík és a vezérlősík között, ez egy sajátosság, amely a cél hardverhez kapcsolódik. A P4 csak akkor engedélyezi a műveletek elvégzését a hálózati kereteken belül, vagy ha egy táblázat + művelet egyezést találtak; a P4 egyezési táblái nem egyezhetnek a változó hosszúságú mezőkön. Így a változók összehasonlítása bonyolult lehet, különösen akkor, ha a legkisebb értéket akarjuk megtalálni, mert a P4 csak összehasonlíthatja az értékeket a vezérlőobjektumok között, és csak akkor módosíthatja őket, ha van egyezés. . Ezenkívül a P4 levelezési táblázatok nem tudnak levelezést végrehajtani változó hosszúságú mezőkön.

Hivatkozások

  1. 1. P4 műhely
  2. P416 Nyelvi specifikáció
  3. Martins 2018 , p.  204
  4. Hill 2018 , p.  23.
  5. Geng 2018 , p.  2
  6. Budiu 2017 , p.  11.
  7. Hill 2018 , p.  24.
  8. Wernecke 2018 , p.  2
  9. Bosshart 2014 , p.  91
  10. P4C C ++
  11. Sivaraman 2015 , p.  2
  12. P4C bmv2
  13. P4C ebpf
  14. P4C grafikonok
  15. P4C teszt
  16. Bosshart 2014 , p.  89
  17. Geng 2018 , p.  3
  18. Geng 2018 , p.  5.
  19. Turkovic 2018 , p.  45
  20. Rakesh 2018 , p.  69
  21. Hill 2018 , p.  31
  22. Zhang 2017 , p.  1714
  23. Freire 2017 , p.  2495
  24. Miguel 2018 , p.  31
  25. Hill 2018 , p.  26.

Bibliográfia

  • (en) Junjie Geng , Jinyao Yan , Yangbiao Ren és Yuan Zhang , „  P4 alapú hálózati felügyeleti és ütemezési architektúra megtervezése és megvalósítása  ” , ACM (Association for Computing Machinery) - A 2. számítástechnikai és alkalmazástechnikai konferencia anyagai ,2018. október, P.  1–6 ( ISBN  9781450365123 , DOI  10.1145 / 3207677.3278059 ). A cikk megírásához használt könyv
  • (en) Belma Turkovic , Fernando Kuipers , Niels van Adrichem és Koen Langendoen , „  Gyors hálózati torlódások észlelése és elkerülése a P4 használatával  ” , ACM (Association for Computing Machinery) - A feltörekvő alkalmazások és technológiák hálózatba szervezéséről szóló 2018-as műhely munkái ,2018. augusztus, P.  1–8 ( ISBN  9781450359078 , DOI  10.1145 / 3229574.3229581 ). A cikk megírásához használt könyv
  • en) Joseph Hill , Mitchel Aloserij és Paola Grosso , „  Hálózati áramlások nyomon követése P4-vel  ” , 2018 IEEE / ACM Innovation the Network for Data-Intensive Science (INDIS) ,2018. november, P.  36–43 ( ISBN  9781728101941 , DOI  10.1109 / INDIS.2018.00006 ). A cikk megírásához használt könyv
  • en) Jehandad Khan és Peter Athanas , „  Lekérdezés nyelve a P4-es hálózat nagyméretű hibakereséséhez  ” , ACM (Association for Computing Machinery) - A hálózati és kommunikációs rendszerek architektúrájáról szóló 2018. évi szimpózium közleményei ,2018. július, P.  162–164 ( ISBN  9781450359023 , DOI  10.1145 / 3230718.3232108 )
  • (en) Christian Wernecke , Helge Parzyjegla , Gero Muhl , Peter Danielis és Dirk Timmermann , „  Tartalomalapú közzététel / előfizetés megvalósítása a P4 segítségével  ” , 2018. évi IEEE konferencia a hálózati funkciók virtualizálásáról és a szoftver által definiált hálózatokról (NFV-SDN) ,2018. november, P.  1–7 ( DOI  10.1109 / NFV-SDN.2018.8725641 ). A cikk megírásához használt könyv
  • (en) Regis FT Martins , Fabio L Verdi , Rodolfo Villaca és Luis Fernando U Garcia , „  Valószínűségi adatszerkezetek használata a több-bérlős P4 alapú hálózatok monitorozásához  ” , 2018 IEEE Computers and Communications (ISCC) szimpózium ,2018. június, P.  204-207 ( ISBN  9781538669501 , DOI  10.1109 / ISCC.2018.8538352 ). A cikk megírásához használt könyv
  • (en) Anirudh Sivaraman , Kim Changhoon , Ramkumar Krishnamoorthy , Advait Dixit és Mihai Budiu , „  DC.p4: programozás a továbbítási síkja adatközpont switch  ” , Proceedings of the 1st ACM SIGCOMM Symposium on software defined hálózati kutatások ,2015. június, P.  1–8 ( ISBN  9781450334518 , DOI  10.1145 / 2774993.2775007 ). A cikk megírásához használt könyv
  • (en) Elie F Kfoury , Jorge Crichigno , Elias Bou-Harb , David Khoury és Gautam Srivastava , „A  TCP - ütemezés engedélyezése programozható adatsík kapcsolók használatával  ” , IEEE Konferencia Kiadványok - 42. nemzetközi távközlési és jelfeldolgozási konferencia (TSP) ,2019. július, P.  273-277 ( ISBN  9781728118642 , DOI  10.1109 / TSP.2019.8768888 )
  • (en) Zijun Hang , Mei Wen , Yang Shi és Chunyuan Zhang , „  Protokolltól független csomagprocesszorok magas szintű programozása (P4HLP): Az árucikkekkel programozható kapcsolók egységes magas szintű programozása felé  ” , Nyílt hozzáférésű folyóiratok jegyzéke (DOAJ ) , vol.  8. cikk (9) bekezdés,2019 augusztus, P.  958 ( ISSN  2079-9292 , DOI  10.3390 / elektronika 8090958 )
  • (en) Mihai Budiu és Chris Dodd , „  A P416 programozási nyelv  ” , ACM Digitális Könyvtár (Association for Computing Machinery) - ACM SIGOPS Operating Systems Review , vol.  51, n o  1,2017. október-december, P.  5–14 ( ISSN  1943-586X , DOI  10.1145 / 3139645.3139648 )
  • (en) Radek Isa , Pavel Benacek és Viktor Pus , „A  P4 forráskódból létrehozott RTL ellenőrzése  ” , IEEE 26. Nemzetközi Konferencia a Hálózati Protokollokról (ICNP) ,2018. szeptember, P.  444-445 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00065 )
  • en) Rui Miguel , Salvatore Signorello és Fernando M. V Ramos , „  Programozott kapcsolókkal elnevezett adathálózat  ” , IEEE 26. nemzetközi protokoll a hálózati protokollokról (ICNP) ,2018. szeptember, P.  400–405 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00055 ). A cikk megírásához használt könyv
  • (en) Lucas Freire , Miguel Neves , Alberto Schaeffer-Filho és Marinho Barcellos , „  POSZTER: A P4 programok sebezhetőségének megállapítása állításalapú ellenőrzéssel  ” , IEEE egyidejűség ,2017. október, P.  2495-2497 ( ISBN  9781450349468 , DOI  10.1145 / 3133956.3138837 ). A cikk megírásához használt könyv
  • (en) Cheng Zhang , június Bi Yu Zhou , Jianping Wu , Bingyang Liu , Zhaogeng Li , Abdul Basit Dogar és Yangyang Wang , „  P4DB: On-the-fly hibakeresés a programozható adatsík  ” , IEEE 25. International Conference on Network Protokollok (ICNP) ,2017. október, P.  1–10 ( ISBN  9781509065011 , DOI  10.1109 / ICNP.2017.8117548 ). A cikk megírásához használt könyv
  • (en) Jeferson Santiago Da Silva , François-Raymond Boyer , Laurent-Olivier Chiquette és JM Pierre Langlois , „  Extern Objects in P4: a ROHC Header Compression Scheme Case Study  ” , 4. IEEE Konferencia a hálózati softwarization és műhelyekről (NetSoft) ,2018. június( ISBN  978-1-5386-4633-5 , DOI  10.1109 / NETSOFT.2018.8460108 )
  • (en) Radu Stoenescu , Dragos Dumitrescu , Matei Popovici , Lorina Negreanu et Costin Raiciu , „  P4 programok hibakeresése verával  ” , Az ACM Special Interest Group adatkommunikációs konferenciájának 2018. évi konferenciája ,2018. augusztus, P.  518-532 ( ISBN  9781450355674 , DOI  10.1145 / 3230543.3230548 )
  • (en) Peilong Li és Yan Luo , „  P4GPU: A P4 program csomagfeldolgozásának felgyorsítása CPU-GPU heterogén architektúrával  ” , ACM / IEEE szimpózium a hálózati és kommunikációs rendszerek architektúrájáról (ANCS) ,2016. március, P.  125–126 ( ISBN  9781450341837 , DOI  10.1145 / 2881025.2889480 )
  • (en) Pavel Benáček , Viktor Puš , Hana Kubátová és Tomáš Čejka , „  P4-To-VHDL: Nagysebességű bemeneti és kimeneti hálózati blokkok automatikus előállítása  ” , Mikroprocesszorok és Microsystems , vol.  56,2018. február, 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 és David Walker , „  P4: protokoll-független csomagprocesszorok programozása  ” , ACM SIGCOMM Computer Kommunikációs Szemle , vol.  44, n o  3,2014. július, P.  87–95 ( ISSN  1943-5819 , DOI  10.1145 / 2656877.2656890 ). A cikk megírásához használt könyv
  • (en) Ali Kheradmand és Grigore Rosu , „  P4K: A P4 és alkalmazások formális szemantikája  ” , Cornell Egyetem ,2018. április( arXiv  1804.01468 )
  • (en) F Paolucci , F Civerchia , A Sgambelluri , A Giorgetti , F Cugini és P Castoldi , „  P4 Edge csomópont, amely lehetővé teszi az államszerű forgalomtervezést és a kiberbiztonságot  ” , IEEE / OSA Journal of Optical Communications and Networking , vol.  11, n o  1,2019 január, A84-A95 ( ISSN  1943-0639 )
  • (en) Bin Niu , Jiawei Kong , Shaofei Tang , Yingcong Li és Zuqing Zhu , „  megjelenítheti az IP-over-Optical Network Realtime: a P4-alapú rugalmas, többrétegű in-band hálózat telemetrikus (ML-INT) rendszer  ” , IEEE Access , vol.  7,2019. június( ISSN  2169-3536 , DOI  10.1109 / ACCESS.2019.2924332 )
  • (en) Miguel Neves , Lucas Freire , Alberto Schaeffer-Filho és Marinho Barcellos , „  A P4 programok ellenőrzése megvalósítható időben állítások felhasználásával  ” , ACM Digital Library (Association for Computing Machinery) - A 14. Nemzetközi Konferencia előadásai a kialakulóban lévő hálózati kísérletekkel és technológiák ,2018. december, P.  73–85 ( ISBN  9781450360807 , DOI  10.1145 / 3281411.3281421 )
  • (en) Datta Rakesh , Choi Sean , Chowdhary Anurag és Park Younghee , „  P4Guard: Designing P4 Based Firewall  ” , MILCOM 2018–2018 IEEE Katonai Kommunikációs Konferencia (MILCOM), 2018. október, 1–6 .2018. október, P.  1–6 ( ISBN  9781538671856 , DOI  10.1109 / MILCOM.2018.8599726 ). A cikk megírásához használt könyv
  • (en) Jed Liu , William Hallahan , Cole Schlesinger , Milad Sharif , Jeongkeun Lee , Robert Soulé , Han Wang és Călin Cascaval , „  p4v: gyakorlati hitelesítés programozható adatok repülőgépek  ” , Proceedings of the 2018 Conference of the ACM Special Interest Group on adatkommunikáció ,2018. augusztus, P.  490-503 ( ISBN  9781538671856 , DOI  10.1145 / 3230543.3230582 )

Külső linkek

Kapcsolódó cikkek