# Open vSwitch

Open vSwitch ( OVS ) è un'implementazione open source di un multilayer switch virtuale distribuito. Lo scopo principale di Open vSwitch è quello di fornire uno stack di switching per ambienti di virtualizzazione hardware, supportando al contempo più protocolli e standard utilizzati nelle reti di computer.
Il codice sorgente del progetto è distribuito secondo i termini della licenza Apache 2.0.

## Panoramica

Open vSwitch è un'implementazione software di uno switch di rete virtuale multilayer, progettato per consentire un'automazione di rete efficace tramite estensioni programmatiche, supportando al contempo interfacce di gestione e protocolli standard quali NetFlow, sFlow, SPAN, RSPAN, CLI, LACP e 802.1ag . Inoltre, Open vSwitch è progettato per supportare una distribuzione trasparente su più server fisici consentendo la creazione di switch tra server in un modo da astrarre l'architettura del server sottostante, simile allo switch distribuito VMware DVS o Cisco Nexus 1000V.
Open vSwitch può funzionare sia come uno switch di rete basato su software in esecuzione all'interno di una macchina virtuale (VM) su hypervisor, sia come stack di controllo per hardware di switching dedicato; di conseguenza, è stato riportato su più piattaforme di virtualizzazione, su chipset di switching e su acceleratori hardware della rete. Open vSwitch è lo switch di rete predefinito nella piattaforma di virtualizzazione XenServer dalla sua versione 6.0, e nella piattaforma Xen Cloud tramite il suo stack di strumenti di gestione XAPI. Supporta inoltre gli hypervisor Xen, Linux KVM, Proxmox VE e VirtualBox, mentre è disponibile anche una versione per Hyper-V . Open vSwitch è stato inoltre integrato in varie piattaforme software di cloud computing e sistemi di gestione della virtualizzazione, tra cui OpenStack, openQRM, OpenNebula e oVirt.
L'implementazione del kernel Linux di Open vSwitch è stata unita alla linea principale del kernel nella versione 3.3, rilasciata il 18 marzo 2012; i pacchetti Linux ufficiali sono disponibili per Debian, Fedora, openSUSE e Ubuntu. Dal Gennaio 2014 sono disponibili anche implementazioni FreeBSD e NetBSD, con l'implementazione di NetBSD che opera completamente nello spazio utente.
La maggior parte del codice sorgente di Open vSwitch è scritto in linguaggio C indipendente dalla piattaforma, che garantisce una facile portabilità in vari ambienti. Il codice sorgente è concesso in licenza con la licenza Apache 2.0.

## Caratteristiche

Da Settembre 2015, le caratteristiche offerte da Open vSwitch includono le seguenti:
* Comunicazione esposta tra macchine virtuali, tramite NetFlow, sFlow, IP Flow Information Export (IPFIX), Switched Port Analyzer (SPAN), Remote Switched Port Analyzer (RSPAN) e mirror di porte incapsulati tramite Generic Routing Encapsulation (GRE)
* Aggregazione di link tramite il protocollo di controllo dell'aggregazione di link (LACP, IEEE 802.1AX -2008)
* Modello LAN virtuale (VLAN) 802.1Q standard per il partizionamento di rete, con supporto per il trunking
* Supporto per lo snooping multicast utilizzando le versioni 1, 2 e 3 dell'Internet Group Management Protocol (IGMP)
* Supporto per il controllo di accesso ai media di bridging del percorso più breve (SPBM) e supporto di base associato per il protocollo LLDP (Link Layer Discovery Protocol)
* Supporto per il rilevamento dell'inoltro bidirezionale (BFD) e il monitoraggio del collegamento 802.1ag
* Supporto per il protocollo Spanning Tree (STP, IEEE 802.1D -1998) e il protocollo Rapid Spanning Tree (RSTP, IEEE 802.1D-2004)
* Controllo granulare della qualità del servizio (QoS) per diverse applicazioni, utenti o flussi di dati
* Supporto per l'ordinamento della coda della curva di servizio equo gerarchica (HFSC) (qdisc)
* Controllo del traffico a livello di interfaccia della macchina virtuale
* Bonding del controller di interfaccia di rete (NIC), con bilanciamento del carico tramite indirizzi MAC sorgente, backup attivi e hashing di livello 4
* Supporto per il protocollo OpenFlow, comprese varie estensioni relative alla virtualizzazione
* Supporto completo IPv6 (Internet Protocol version 6)
* Supporto per più protocolli di tunneling, tra cui GRE, Virtual Extensible LAN (VXLAN), Stateless Transport Tunneling (STT) e Geneve, con supporto aggiuntivo per la stratificazione su Internet Protocol Security (IPsec)
* Protocollo di configurazione remota, con associazioni esistenti per i linguaggi di programmazione C e Python
* Implementazione del motore di inoltro dei pacchetti nello spazio kernel o nello spazio utente, consentendo flessibilità aggiuntiva e fornendo miglioramenti delle prestazioni elaborando la maggior parte dei pacchetti inoltrati senza lasciare lo spazio kernel e utilizzando componenti multithread nello spazio kernel e nello spazio utente
* Pipeline di inoltro multi-tabella con un motore di caching del flusso
* Inoltro dell'astrazione del livello, semplificando il porting di Open vSwitch su nuove piattaforme software e hardware