• Non ci sono risultati.

3.2 Standard: OpenFlow 1.0.0

3.2.1 Flow-table

La flow-table determina il trattamento riservato a ciascun pacchetto proces- sato dallo switch. Essa contiene un insieme di “regole” (flow entries), il cui inserimento e la cui rimozione sono prerogative del controller.

Ciascuna regola (tabella 3.1) `e provvista di:

Campi Contatori Azioni

Tabella 3.1: Struttura generale di una regola presente all’interno della tabella di uno switch OpenFlow

Campo Lunghezza (bit)

Ingress port variabile

Ethernet source address 48

Ethernet destination address 48

Ethernet type 16 VLAN id 12 VLAN priority 3 IP source address 32 IP destination address 32 IP protocol 8 IP ToS bits 6

Transport source port / ICMP type 16

Transport destination port / ICMP code 16

Tabella 3.2: Campi utilizzabili in una regola OpenFlow per specificare un flusso

• campi, presenti nelle intestazioni di trame, pacchetti e segmenti, da far combaciare con i pacchetti in transito;

• contatori (o statistiche) da aggiornare ad ogni corrispondenza; • zero o pi`u azioni da applicare ai pacchetti corrispondenti.

Campi

La versione in esame del protocollo OpenFlow specifica dodici campi, elencati in tabella 3.2, tramite i quali `e possibile discriminare tra flussi differenti. Il primo campo fa riferimento ad un numero di porta dello switch OpenFlow, mentre gli undici rimanenti sono individuabili all’interno delle intestazioni di trame, pacchetti e segmenti.

Un flusso TCP, ad esempio, pu`o essere specificato tramite tutti e dodici i campi consentiti. Un flusso IP, invece, potrebbe non necessitare dei campi corrispondenti ai numeri di porta utilizzati dal livello di trasporto.

Ogni regola presente in tabella contiene, per ciascun campo, un valore spe- cifico oppure any, se questi non `e rilevante. In quest’ultimo caso si parla di campo “jolly” (wildcard ).

Se lo switch supporta l’impiego di “maschere di rete” (subnet masks) per gli indirizzi IP, esse possono essere sfruttate per introdurre un ulteriore livello di granularit`a nell’elaborazione dei pacchetti.

OpenFlow 19

Contatori

Ciascuno switch OpenFlow mantiene dei contatori a livello di tabella, di flusso, di porta e di coda.

La tabella 3.3 riporta i contatori da implementare obbligatoriamente. Le voci “Duration” si riferiscono al tempo trascorso dall’installazione del flusso all’in- terno della flow-table, mentre il campo “Receive Errors” include una qualunque tipologia di errore esplicitamente notificata.

Elaborazione dei pacchetti

Ciascun pacchetto ricevuto da uno switch OpenFlow viene confrontato con le regole presenti in tabella4(figura 3.2).

Nel caso in cui venga individuata una regola valida, ovvero una regola che combaci con il pacchetto in transito, ogni azione ad essa associata verr`a eseguita. L’assenza di azioni per tale regola causa lo scarto del pacchetto. Se una regola di questo tipo non `e presente, il pacchetto sar`a inviato, tramite il canale di comunicazione sicuro, al controller. Esso `e infatti responsabile della gestione di quei pacchetti che lo switch non saprebbe altrimenti come trattare.

Un pacchetto “combacia” con una regola (matches a flow-table entry) se tutti i valori contenuti negli undici possibili campi delle relative intestazioni (trama contenente, pacchetto stesso e segmento contenuto), pi`u il numero di porta dalla quale `e stato ricevuto, corrispondono con quelli definiti in tabella. Il confronto con un campo jolly dar`a sempre esito positivo.

La scansione delle regole installate nella flow-table avviene per priorit`a. Il livello pi`u alto di priorit`a `e riservato a quelle regole che specificano una corri- spondenza esatta, che non possiedono cio`e alcun campo avente come valore any. Per tutte le altre, invece, la priorit`a pu`o essere indicata utilizzando il campo ap- positamente studiato. Regole con priorit`a pi`u elevata5vengono consultate prima di quelle a priorit`a inferiore. Se esistono pi`u regole valide caratterizzate dalla stessa priorit`a, lo switch `e libero di scegliere quale prendere in considerazione.

Per ogni pacchetto che combacia con una certa regola, i relativi contatori vengono aggiornati di conseguenza.

Azioni

Ad ogni regola presente in tabella vengono associate zero o pi`u azioni, le quali determinano come lo switch debba trattare i pacchetti per i quali si verifichi una corrispondenza. Come `e gi`a stato detto, l’assenza di azioni causa lo scarto del pacchetto. Qualora invece vengano specificate pi`u azioni, queste andranno applicate nell’ordine di apparizione.

Le azioni contemplate dalla versione del protocollo OpenFlow esaminata ven- gono suddivise in due categorie: “obbligatorie” (Required Actions) e “opzionali” (Optional Actions). Visto che uno switch `e tenuto a supportare solamente quelle

4Esiste la possibilit`a che uno stesso switch OpenFlow possieda pi`u di una flow-table. 5Valori pi`u elevati corrispondono a priorit`a pi`u elevate.

Contatore Lunghezza (bit) Tabella Active Entries 32 Packet Lookups 64 Packet Matches 64 Flusso Received Packets 64 Received Bytes 64 Duration (secondi) 32 Duration (nanosecondi) 32 Porta Received Packets 64 Transmitted Packets 64 Received Bytes 64 Transmitted Bytes 64 Receive Drops 64 Transmit Drops 64 Receive Errors 64 Transmit Errors 64

Receive Frame Alignment Errors 64

Receive Overrun Errors 64

Receive CRC Errors 64

Collisions 64

Coda

Transmit Packets 64

Transmit Bytes 64

Transmit Overruns Errors 64

Tabella 3.3: Tipologie di contatore obbligatoriamente implementate da uno switch OpenFlow

OpenFlow 21

Figura 3.2: Elaborazione dei pacchetti da parte di uno switch OpenFlow

obbligatorie, al momento della connessione con un controller sar`a suo compito indicare quali azioni opzionali `e in grado di comprendere (e quindi di eseguire). Azioni obbligatorie

1. Forward.

• ALL – Uno switch OpenFlow deve essere in grado d’inoltrare un pacchetto da tutte le sue interfacce, esclusa quella dalla quale `e stato ricevuto.

• CONTROLLER – Uno switch OpenFlow deve essere in grado d’in- capsulare un pacchetto ed inviarlo al controller.

• LOCAL – Uno switch OpenFlow deve essere in grado di recapitare un pacchetto alla propria pila protocollare.

• TABLE – Uno switch OpenFlow deve essere in grado di applicare ad un pacchetto le azioni specificate all’interno della propria tabella6. • IN PORT – Uno switch OpenFlow deve essere in grado d’inoltrare

un pacchetto attraverso la porta dalla quale `e stato ricevuto. 2. Drop. Uno switch OpenFlow deve essere in grado di scartare un pacchetto

che combaci con una regola per la quale non vengano specificate azioni da eseguire.

Azioni opzionali 1. Forward.

• NORMAL – Uno switch OpenFlow pu`o essere in grado d’inol- trare un pacchetto in accordo al suo processing tradizionale (non OpenFlow).

• FLOOD – Uno switch OpenFlow pu`o essere in grado d’inoltrare un pacchetto sul minimo spanning tree per la rete, esclusa l’interfaccia dalla quale `e stato ricevuto.

2. Enqueue. Uno switch OpenFlow pu`o essere in grado d’inoltrare un pac- chetto tramite una coda collegata ad una porta. La particolare configura- zione della coda determina la tipologia d’inoltro ed `e pensata per attuare funzionalit`a di QoS.

3. Modify-Field. Uno switch OpenFlow pu`o essere in grado di modificare alcuni campi presenti nelle intestazioni di trame, pacchetti e segmenti. Tra gli altri, `e possibile riscrivere gli indirizzi MAC sorgente e destinatario, cos`ı come gli indirizzi IP ed i numeri di porta TCP o UDP.