h1. Ryu h2. Sobre o código h3. Linguagem Linguagem utilizada para o desenvolvimento. h3. Licença Licença em que o código foi liberado. A preferência é por licenças livres, facilitando assim o estudo e desenvolvimento de aplicações ou até mesmo de correções de problemas. h3. Suporte a versões do OpenFLOW * Quais são as versões de OpenFlow suportadas pelo controlador / framework. * Como isso é implementado h3. Requisitos * pacotes a serem instalados * espaço de armazenamento exigido * outros recursos necessários ao funcionamento do controlador. h3. Independência de linguagem de programação Quais linguagens são suportadas na implementação de aplicações e componentes. h3. Modularidade Quanto e que tipo de modularidade o controlador oferece. h3. Repositório Onde encontrar o código. h3. Recursos básicos do controlador Recursos oferecidos pelo controlador sem a necessidade de aplicações, como por exemplo: * GRE tunneling * VLAN support h3. Aplicações Componentes disponíveis que acrescentam ferramentas ao controlador, como por exemplo: * topology discovery * MAC based segregation h3. Testes Existência de testes de unidades no codigo (scripts ou códigos), geralmente em uma pasta em separado, que validam e testam o código desenvolvido. h3. Disponibilidade nas distribuições GNU/Linux Disponibilidade e facilidade de instação nas distribuição GNU/Linux relevantes atuais. * disponível nos repositórios da distribuição? * versão dos pacotes disponíveis * ênfase nas distros Debian e Ubuntu. h2. Documentação Nível de documentação do controlador, incluindo tutoriais e exemplos (tanto de estruturas quanto de aplicações). h2. Suporte junto ao OpenStack Como o ambiente estruturado se baseia no OpenStack, é interessante saber qual é o tipo de suporte oferecido a essa ferramenta. h2. Quem usa Público do controlador h2. Quem está por trás Empresas, consórcio, comunidade, universidade, ... h2. último release / commit Uma das formas de se ter noção de quanto o desenvolvimento ainda está ativo é procurar pela data da última atualização de código no repositório. h2. Outras características Características que não se adequam a nenhuma das anteriores. h2. About * Network opearting system * OVS, openflow switch * python * www.osrg.net/ryu h2. Network management applications on top of Ryu (inside a controller node) * GRE tunneling * VLAN support * topology discovery * MAC based segregation 'Only commodity hardware' h2. Ryu <--> OpenStack * Flat networks regardless of the underlying physical network * Scalable multi-tenant isolations ** tunneling based isolations ** VLAN does not scale larger than 4096 ** do not need high-end switches * Future items: ** integration with quantum IPAM and L3 API ** firewall ** virtual network <--> physical network ** distributed controllers (redundancy) Quantum plugin for each network technology h2. Communication 'nova requests quantum-server for network configuragion' OVS <--> Ryu: openflow Ryu agent <--> Ryu: REST API Quantum server <--> Ryu: REST API Ryu agent <--> Quantum db: db access VIF driver <--> quantum: Quantum API linux_net driver <--> server: Quantum API h2. Network Creation (network-node = nova-network + linux_net driver + OVS) # to nova-network: create netork # nova network --> quantum server: create net # quantum server --> Ryu: network , # quantum server --> nova network: # nova network --> linux_net driver: plug # linux_net driver --> OVS: create gw-xxx # linux_net driver --> quantum server: tentant id, network id, dp id, port, mac # quantum server --> Ryu: network id, dp id, port, mac # ryu --> OVS: set flow entryies h2. Instance creation (compute-node = nova compute + VIF driver + OVS) # to nova compute: create instance # nova compute --> quantum server: create port # quantum server --> nova compute: uuid # nova compute --> VIF driver: plug # VIF driver --> OVS: create tap-xxx # VIF driver --> quantum server: (tenant_id, dp_id, port, mac) # quantum server --> Ryu: (network_id, dp_id, port, mac) # Ryu --> OVS: set flow entryies h2. Node boot up (compute/network-node = OVS + Ryu agent + ryu_v2.ini) # ryu_v2.ini --> Ryu agent: get ip address # Ryu agent --> quantum db: register (dp_id, ip_address) # quantum db --> Ryu agent: get list of (dp_id, ip_address, and polling) # Ryu agent --> OVS: create vport_grc to ip address # Ryu agent --> Ryu: register (dp_id, port_id, remote dp_id) h2. Component: separation unit * interface for control and states and generates events * communicate by message passing * language independency h2. OBS: two ways oto isolate tenants: GRE tunnel and VLAN