Malá učebnice OpenFlow (10) – flow pravidla

Část 10 z celkových 15 v seriálu Malá učebnice OpenFlow

V minulém díle jsme prakticky programovali prvek OpenFlow instrukcemi – dnes si doplníme teorii. Co všechno flow pravidla dokáží?

Flow pravidla v OpenFlow 1.3 jsou klíčem k programování data plane prvků. Říkají prvku, co má dělat v různých situacích a ten pak podle toho zpracovává pakety a kontroler s tím dále neobtěžuje.

Match

Každé flow pravidlo se k něčemu vztahuje, k nějakému typu provozu – a to je definováno v jeho match části. Ta může samozřejmě zůstat i prázdná a pak se aplikuje na veškerý provoz. Prvek při příjmu paketu parsuje hlavičky jako jsou MAC, IP, TCP porty a tak podobně. Kromě toho může match odkazovat na příchozí port, z kterého paket přišel a také na metadata (těmi mohou mezi sebou komunikovat jednotlivé tabulky v rámci pipeline – o tom později). Může se samozřejmě stát, že paket odpovídá vícero match pravidům a v takovém případě se rozhoduje podle priority – vyšší číslo bere.

Instrukce

Určili jsme jaký typ provozu nás zajímá a teď je na řadě dát OpenFlow prvku nějaké instrukce, co má v takovém případě dělat. Jedno z nich může být Goto-Table, tedy ukončení zpracování v existující tabulce a skok jinam (o tom se pobavíme v jiné části). Další může spočívat v přiřazení Meter, tedy QoS pravidla pro různé rychlosti (o tom taky později). Další možností je práce s akcemi a na to se zaměříme.

  • Write-Actions je nejčastěji používaná varianta, která je standardem definována jako povinná. V principu říká, že chceme tomuto datovému toku (na základě Match) přiřadit nějaké další akce. Tato instrukce přidá nové akce do tzv. Action Set, a pokud už tam akce stejného typu existuje, tak ji přepíše. To docela dobře odpovídá hardwarovému zpracování. Jednotlivé vlastnosti prvků (L2 lookup, L3 lookup, ACL, QoS) činí rozhodnutí a tato zapisují do metadat (action setů). Jejich skutečné provedení se uskuteční až později ve zpracování (pipeline). Tak například L2/L3 lookup rozhodne o odchozím portu, ale ACL tuto akci zastaví, protože paket se bude dropovat. Nebo L2/L3 engine rozhodne, ale jeho nápad je pozměněn policy based routing pravidlem. Všechny elementy zpracování tedy mohou nad paketem definovat nějaké akce (o nich dále v článku) a tyto zapisují do metadat, která paket provází.
  • Apply-Actions – tak tohle se hodně plete, nicméně rozdíl je v tom, že uvedené akce se provedou okamžitě bez změny action setu. Představte si to takhle: při přijmutí paketu provede prvek parsing hlaviček a v nějaké datové struktuře je začne posílat jednotlivým engine v pipeline. Write-Actions umožní nějakému engine poznamenat k paketu, jaké akce budeme chtít udělat (třeba modifikace MAC adresy při směrování). To ovšem nemění obsah hlaviček, které s paketem cestují, takže další engine se může rozhodovat na základě originálních dat. Apply-Actions ale na nic nečeká a změny provede okamžitě. Další člen řetězce zpracování tak vidí už modifikovaná data.
  • Clear-Actions vymaže aktuální action set paketu.
  • Write-Metadata dokáže zapsat řekněme volná metadata. Je to způsob, jakým mohou jednotlivé fáze zpracování spolu komunikovat i mimo systém úpravy hlaviček, tedy něco signalizovat (přesněji jde o komunikaci OpenFlow tabulek v rámci pipeline, ale o tom jindy).

Každý typ může být v instrukci použit jen jednou s tím, že Meter se uskuteční před Apply-Actions a Clear-Actions vždy před Write-Actions.

Akce

Jaké akce jsme tedy schopni nad paketem dělat? Tady je potřeba si uvědomit, že OpenFlow protokol umožňuje vlastně téměř cokoli, ale to nemusí odpovídat vlastnostem hardware. V Mininet a OpenvSwitch tak máte plnou implementaci, ale fyzické prvky mají obvykle mnohá omezení. Ta ovšem vychází z logiky věci, takže je snadno odhadnete. Když se zamyslíme nad tím, co dělá ASIC běžného L3 prvku, co budeme moci s paketem dělat? Určitě Match na různé hlavičky (to dělá ACL), nějaké hrátky s QoS a co manupulace s hlavičkami? L3 prvek směruje, takže musí umět měnit MAC adresy a TTL. Také podporuje QoS marking, takže umí měnit CoS a DSCP. Umí ale měnit třeba IP adresy? S největší pravděpodobností přímo v hardware ne, L3 switche neumí NAT, takže od nich nečekejme, že je to OpenFlow naučí.

Pojďme si tedy představit akce.

  • Output – odešle paket na nějaký fyzický, logický nebo reserved port. Do této kategorie teda patří odeslání na port, ale i zpracování v lokálním control plane (poslat na „port“ NORMAL), nebo poslání tunelem (VXLAN logický port) nebo na kontroler.
  • Set-Queue – zařadí paket do konkrétní fronty (QoS)
  • Drop – taková akce vlastně není, ale pokud žádnou neuvedete, bude prvek pakety zahazovat (u switchů v hardware)
  • Group – odeslání na skupinu jiných akcí – o tom jindy
  • PUSH/POP tag – odejme nebo přidá nějaký tag, například VLAN, PBB nebo MPLS label
  • Set-Field – modifikuje nějaké políčko v hlavišce, třeba MAC, IP, CoS, DSCP nebo TCP port. Tato operace zahrnuje například i změnu VLAN ID (tedy modifikaci jako se děje při routingu, na rozdíl od přidání/odebrání, což dělá PUSH/POP instrukce)
  • Change-TTL – zahrnuje operace s Time-to-live jako je snížení o jedničku, změna TTL, MPLS TTL nebo nakopírování do vnější nebo naopak vnitřní hlavičky (např. z IP do MPLS)

Tak tím bychom měli teoretickou část za sebou a příště už si zase něco zkusíme.

Series Navigation<< Malá učebnice OpenFlow (9) – blokování stanice a ACLMalá učebnice OpenFlow (11) – omezujeme propustnost >>
Similar posts
  • L3 a kontejnery bez overlay: Project ... Část 6 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 5 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • HPE Networking na GitHub – skri... Zaměstnanci HPE publikovali zajímavé skripty a celé knihovny jako open source v licenci Apache2, tedy k volnému použití včetně jakýchkoli modifikací. https://github.com/HPENetworking/scriptsonly Obsah se bude jistě dost rozšiřovat… přidejte si záložku [...]
  • L3 a kontejnery bez overlay: Project ... Část 4 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 3 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]

No Comments Yet

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *