Virtlab:Protokoly/Aktivační server

Z VirtlabWiki

< Virtlab:Protokoly(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 22:28, 1. 8. 2007
Bam015 (Diskuse | příspěvky)

← Předchozí porovnání
Aktuální verze
Vav166 (Diskuse | příspěvky)

Řádka 6: Řádka 6:
* Komunikace přes TCP spojení, standardně na portu 50002. * Komunikace přes TCP spojení, standardně na portu 50002.
* Pro názvy příkazů a jména argumentů nerozlišuje velká a malá písmena (''case insensitive''). * Pro názvy příkazů a jména argumentů nerozlišuje velká a malá písmena (''case insensitive'').
-* První řádek a každý další první po prázdném řádku určuje příkaz, následující řádky jeho argumenty.+* První řádek určuje příkaz, následující řádky jeho argumenty.
* Na pořadí argumentů nezáleží a jsou case-insensitive. * Na pořadí argumentů nezáleží a jsou case-insensitive.
* Za názvem argumentu je dvojtečka, za kterou ihned nasledují jeho parametry, za dvojtečkou nesmí být mezera. * Za názvem argumentu je dvojtečka, za kterou ihned nasledují jeho parametry, za dvojtečkou nesmí být mezera.
* Bílé znaky (''whitespace''), jako tabelátory (0x09), mezery (0x20) nejsou povoleny, slouží jako oddělovače. parametrů pro argumenty. Výjimku tvoří mezery a tabelátory před názvem příkazu a argumentu. Tyto jsou odfiltrovány. * Bílé znaky (''whitespace''), jako tabelátory (0x09), mezery (0x20) nejsou povoleny, slouží jako oddělovače. parametrů pro argumenty. Výjimku tvoří mezery a tabelátory před názvem příkazu a argumentu. Tyto jsou odfiltrovány.
* Odeslání prázdného řádku (jen <LF> (0x0A)), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz. * Odeslání prázdného řádku (jen <LF> (0x0A)), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz.
-* Po odeslání prázdného řádku je možno psát další příkaz.+* Spojení ukončeno vždy na žádost klienta, mimo speciální případy, kdy server přijímaným datům nerozumí, nebo je klient připojen příliš dlouho.
-* Spojení ukončeno vždy na žádost klienta, mimo speciální případy, kdy rezervační server přijímaným datům nerozumí, nebo je klient připojen příliš dlouho.+
* Při odpovědi serveru na příkaz je na prvním řádku návratový kód, mezera a za ní popis odpovědi. * Při odpovědi serveru na příkaz je na prvním řádku návratový kód, mezera a za ní popis odpovědi.
== Popis protokolu == == Popis protokolu ==
-=== Pokyn rezervačního serveru aktivačnímu serveru ke znovunačtení databáze ===+=== Pokyn rezervačního serveru aktivačnímu serveru ke znovunačtení databáze rezervací ===
-* Příkaz: "kill\n"+* Příkaz: "reload\n"
-* Argument (povinný): "kill:10\n"+
* Odpověď: Návratový kód. * Odpověď: Návratový kód.
Příklad: Příklad:
- kill\n+ reload\n
- kill:10\n+
\n \n
-=== Pokyn rezervačního serveru aktivačnímu serveru k ukočení činnosti ===+=== Předání popisu topologie pro rezervaci od rezervačního serveru aktivačnímu serveru ===
-* Příkaz: "kill\n"+* Příkaz: "linkconf\n"
-* Argument (povinný): kill:15\n"+* Argument (povinný): resid:''ID rezervace''\n"
-* Odpověď: Návratový kód.+* Argument (povinný, opakuje se alespoň jednou): link:''popis_spojení''\n"
 +* Odpověď: Návratový kód. (objeví-li se v resid lomítko, jde o špatnou syntaxi parametrů)
Příklad: Příklad:
- kill\n+<pre>
- kill:15\n+linkconf\n
- \n+resid:1@koleje\n
 +link:rp@koleje:fastethernet1, rm@koleje:fastethernet1;\n
 +link:ro@koleje:fastethernet1, rp@koleje:fastethernet0;\n
 +link:rn@koleje:fastethernet1, ro@koleje:fastethernet0;\n
 +link:rm@koleje:fastethernet0, rn@koleje:fastethernet0;\n
 +\n
 +</pre>
 +=== Pokyn rezervačního serveru aktivačnímu serveru ke zrušení popisu topologie rezervace ===
 +* Příkaz: "dellinkconf\n"
 +* Argument (povinný): delresid:''ID rezervace''\n"
 +* Odpověď: Návratový kód. (objeví-li se v delresid lomítko, jde o špatnou syntaxi parametrů)
 + 
 +Příklad:
 +<pre>
 +dellinkconf\n
 +delresid:1@koleje\n
 +\n
 +</pre>
-=== Poznámky ===+[[Kategorie:Protokol]]
-# Volba příkazu <code>kill</code> a číselných kódů přímo vyplývá ze způsobu realizace oddělení serverů původně komunikujících skrze funkci OS [http://en.wikipedia.org/wiki/Kill_(Unix) kill].+[[Kategorie:Aktivační server]]
-# Kód aktivačního serveru '''zatím''' není ošetřen proti [http://en.wikipedia.org/wiki/Denial-of-service_attack DoS] útoku, který lze úspěšně realizovat odesláním signálu pro ukončení programu (9, 15)! V původní implementaci byl SIGTERM skutečně využíván pro ukončení aktivačního serveru (child process) rezervačním (parent). Situaci lze ošetřit buď pomocí iptables nebo kontrolou argumentů předávaných příkazem <code>kill</code> a navržením jiného mechanismu pro ukončení aktivačního serveru (je-li nějaký mechanismus pro ukončování vůbec nutný - postačilo by například, aby jej obsluha prostě killnula ručně).+

Aktuální verze

Tento článek popisuje komunikační prokokol mezi rezervačním a aktivačním serverem distribuovaného Virtlabu.

Obsah

Vlastnosti

  • Textově orientovaný protokol.
  • Textové příkazy, oddělené <LF> (0x0A), (symbol <CR> (0x0D) je ignorován)
  • Komunikace přes TCP spojení, standardně na portu 50002.
  • Pro názvy příkazů a jména argumentů nerozlišuje velká a malá písmena (case insensitive).
  • První řádek určuje příkaz, následující řádky jeho argumenty.
  • Na pořadí argumentů nezáleží a jsou case-insensitive.
  • Za názvem argumentu je dvojtečka, za kterou ihned nasledují jeho parametry, za dvojtečkou nesmí být mezera.
  • Bílé znaky (whitespace), jako tabelátory (0x09), mezery (0x20) nejsou povoleny, slouží jako oddělovače. parametrů pro argumenty. Výjimku tvoří mezery a tabelátory před názvem příkazu a argumentu. Tyto jsou odfiltrovány.
  • Odeslání prázdného řádku (jen <LF> (0x0A)), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz.
  • Spojení ukončeno vždy na žádost klienta, mimo speciální případy, kdy server přijímaným datům nerozumí, nebo je klient připojen příliš dlouho.
  • Při odpovědi serveru na příkaz je na prvním řádku návratový kód, mezera a za ní popis odpovědi.

Popis protokolu

Pokyn rezervačního serveru aktivačnímu serveru ke znovunačtení databáze rezervací

  • Příkaz: "reload\n"
  • Odpověď: Návratový kód.

Příklad:

 reload\n
 \n

Předání popisu topologie pro rezervaci od rezervačního serveru aktivačnímu serveru

  • Příkaz: "linkconf\n"
  • Argument (povinný): resid:ID rezervace\n"
  • Argument (povinný, opakuje se alespoň jednou): link:popis_spojení\n"
  • Odpověď: Návratový kód. (objeví-li se v resid lomítko, jde o špatnou syntaxi parametrů)

Příklad:

linkconf\n
resid:1@koleje\n
link:rp@koleje:fastethernet1, rm@koleje:fastethernet1;\n
link:ro@koleje:fastethernet1, rp@koleje:fastethernet0;\n
link:rn@koleje:fastethernet1, ro@koleje:fastethernet0;\n
link:rm@koleje:fastethernet0, rn@koleje:fastethernet0;\n
\n

Pokyn rezervačního serveru aktivačnímu serveru ke zrušení popisu topologie rezervace

  • Příkaz: "dellinkconf\n"
  • Argument (povinný): delresid:ID rezervace\n"
  • Odpověď: Návratový kód. (objeví-li se v delresid lomítko, jde o špatnou syntaxi parametrů)

Příklad:

dellinkconf\n
delresid:1@koleje\n
\n
Osobní nástroje