RYU Introduction

32
RYU shanyu@sdnds-tw

Transcript of RYU Introduction

Page 1: RYU Introduction

RYU shanyu@sdnds-tw

Page 2: RYU Introduction

Outline

❖ Introduction to RYU❖ Environment Setup❖ Basic RYU Operation❖ RYU Application Development❖ RYU Restful API

Page 3: RYU Introduction

Outline

❖ Introduction to RYU❖ Environment Setup❖ Basic RYU Operation❖ RYU Application Development❖ RYU Restful API

Page 4: RYU Introduction

RYU❖ Ryu is a component-based software defined networking

framework❖ Fully written in Python❖ Ryu supports various protocols for managing network

devices OpenFlow 1.0, 1.2, 1.3, 1.4, Netconf, OF-config, SNMP etc.

Official site:• http://osrg.github.io/ryu/Mailing list:• https://lists.sourceforge.net/lists/listinfo/ryu-develAPI Documentation:• http://ryu.readthedocs.org/en/latest/RyuBook Tutorial (Chinese):• http://osrg.github.io/ryu-book/zh_tw/html/

Page 5: RYU Introduction

Controller and Switch OpenFlow Message

CONFIG_DISPATCHER

HANDSHAKE_DISPATCHER

MAIN_DISPATCHER

DEAD_DISPATCHER

RYU four status

Page 6: RYU Introduction

RYU OpenFlow MessageType Message Name Ryu OpenFlow Message

Controller-to-Switch

Features OFPFeaturesRequest / OFPSwitchFeatures

Configuration OFPSetConfig

Packet-out OFPPacketOut

Modify-State OFPFlowModRead-State OFPFlowStatsRequest/OFPFlowStatsReply

OFPPortStatsRequest/OFPPortStatsReplyBarrier OFPBarrierRequest/OFPBarrierReply

Asynchronous(switch->controller)

Packet-In OFPPacketInFlow Removed OFPFlowRemoved

Port Status OFPPortStatusError OFPErrorMsg

Symmetric(switch<->controller)

Hello OFPHelloEcho Request / Reply OFPEchoRequest/OFPEchoReply

Vender OFPExperimenter

Page 7: RYU Introduction

RYU Application Programming Model

❖ Data path thread 接收所有來自 OpenFlow switch events❖ Asynchronous messages❖ Switch reply messages

❖ Data path thread 收到 event 後即分配給所有有註冊這 event 的 application❖ 每個 Application 維護自己的 Event queue❖ decorator (@) 接收事件

❖ Programmer 定義 Event Handler

(Event Dispatcher)

Page 8: RYU Introduction

Outline

❖ Introduction to RYU❖ Environment Setup❖ Basic RYU Operation❖ RYU Application Development❖ RYU Restful API

Page 9: RYU Introduction

Environment Setup❖ All-in-one tutorial VM contains:

❖ SDN Controllers: OpenDaylight, ONOS, RYU, Floodlight, Floodlight-OF1.3, POX, and Trema

❖ Open vSwitch 2.3.0 with support for Openflow 1.2, 1.3 and 1.4, and LINC switch

❖ Mininet to create and run example topologies❖ Pyretic❖ Wireshark 1.12.1 with native support for OpenFlow parsing❖ JDK 1.8, Eclipse Luna, and Maven 3.3.3

❖ Update newest RYU version$ cd ~/ryu$ git fetch$ git merge origin$ python ./setup.py install http://sdnhub.org/tutorials/sdn-tutorial-vm/

Page 10: RYU Introduction

Outline

❖ Introduction to RYU❖ Environment Setup❖ Basic RYU Operation❖ RYU Application Development❖ RYU Restful API

Page 11: RYU Introduction

Basic RYU operation - CLI❖ ryu-manager, ryu run

❖ 啟動 ryu❖ --h

❖ Show help message❖ --verbose

❖ Show debug output❖ --version

❖ Show program’s version❖ --observe-links

❖ 定期發送 LLDP 封包❖ Example:

$ cd ~/ryu/$ ./bin/ryu-manager --observe-links ryu/app/simple_switch.py

ryu.app.simple_switch

Page 12: RYU Introduction

Basic RYU operation - GUI

$ ./bin/ryu-manager --observe-links ryu.app.gui_topology.gui_topology ryu.app.simple_switch

$ sudo mn --topo=single,3 --controller=remote --mac

Page 13: RYU Introduction

Outline❖ Introduction to RYU❖ Environment Setup❖ Basic RYU Operation❖ RYU Application Development

❖ Simple Switch❖ Traffic Monitor❖ Lab

❖ RYU Restful API

Page 14: RYU Introduction

RYU application – Simple Switch

• mac_to_port 目前所學習到連接埠與 host 之 MAC 對應關係• Receive pkt_in dst_mac 存在於 mac_to_port -> 轉送該封包到相對應的連接埠 dst_mac 不存在於 mac_to_port -> Flood

Page 15: RYU Introduction

Simple Switch – Example (1/4)❖ Initial status

Page 16: RYU Introduction

Simple Switch – Example (2/4)❖ Host A -> Host B

❖ Host A triggers Packet-In message❖ Record Host A MAC

❖ Host B has not been found, the packets are flooded❖ Host B and host C received

Page 17: RYU Introduction

Simple Switch – Example (3/4)❖ Host B -> Host A

❖ When the packets are returned from host B to host A❖ Host B triggers Packet-In message

❖ Record Host B MAC ❖ Controller installs an entry to the flow table and also the

packets are transferred to port 1.

Page 18: RYU Introduction

Simple Switch – Example (4/4)❖ Host A -> Host B

❖ Controller installs an entry to the flow table

Page 19: RYU Introduction

RYU application – Traffic Monitor

Controller

OpenFlowSwitch

Stats_reqeust Stats_reply

https://github.com/osrg/ryu-book/blob/master/en/source/sources/simple_monitor.py

Page 20: RYU Introduction

Outline

❖ Introduction to RYU❖ Environment Setup❖ Basic RYU Operation❖ RYU Application Development❖ RYU Restful API

Page 21: RYU Introduction

RYU Restful API

OpenFlowSwitch

SDN App SDN App

RYU APP RYU APP

OpenFlowSwitch

NetworkDevice

Event Dispatcher

Libraries

RYU provided restful API:/ryu/app/rest*.py/ryu/app/ofctl_rest.py

Open Protocol(OpenFlow, OF-config, NetConf..)

Control layer

Well-defined API(REST, RPC)

Application layer

Page 22: RYU Introduction

Reference❖ SDNDS-TW

❖ http://sdnds.tw/

❖ RYU Contributor

❖ John-Lin

❖ http://linton.tw/

❖ http://www.slideshare.net/ireri339/sdndstw-ryu-developing

❖ Tseng Yi

❖ http://blog.takeshi.tw/about.html

Page 23: RYU Introduction

Thank you

Page 24: RYU Introduction

補充 – OpenFlow

Page 25: RYU Introduction

OpenFlow - Controller-to-Switch (1/6)

❖ Controller sends a Feature request message to the switch to get the capabilities of a switch

❖ Switch must reply with a Feature reply that specifies the capabilities supported by the switch max packets buffered at once capabilities supported by switch

flow statis, table statis, port statis, reassemble IP fragments,... actions supported by the switch

SET_VLAN_VID, SET_DL_SRC, SET_DL_DST, ENQUEUE,... describe all the physical ports (which support OpenFlow)

port no, hw addr, state,...

Page 26: RYU Introduction

OpenFlow - Controller-to-Switch (2/6)

❖ SET_CONFIG Controller send a SET_CONFIG message to set configuration parameters in

the switch max bytes of new flow that switch should send to the controller handling of IP fragments (normal, drop, reassemble,...)

❖ GET_CONFIG Controller send a GET_CONFIG Request message to query configuration

parameters in the switch Switch responds to a configuration request with an GET_CONFIG Reply

message

Page 27: RYU Introduction

OpenFlow - Controller-to-Switch (3/6)

❖ Controller sends Packet_out of a specified port on the switch buffer_id in_port

port = TABLE actions

Page 28: RYU Introduction

OpenFlow - Controller-to-Switch (4/6)

❖ Controller send Flow_mod message to switch to add/delete/modify flows in the flow tables ❖ match fields❖ idle/hard timeout❖ buffer_id❖ actions

Page 29: RYU Introduction

OpenFlow - Controller-to-Switch (5/6)

❖ Stats request is used by the controller to collect statistics ❖ Switches flow-tables, ports and the individual flow entries

❖ switch responds with one or more Stats reply messages

Page 30: RYU Introduction

OpenFlow - Controller-to-Switch (6/6)

❖ Controller to ensure message dependencies have been met or to receive notifications for completed operations

❖ Switch must finish processing all previously-received messages before executing any messages beyond the Barrier request

❖ switch must send an Barrier reply message when such processing is complete

Page 31: RYU Introduction

OpenFlow - Asynchronous

❖ Packet_in❖ Packet_in message (event) is sent to the controller when

❖ a packet do not have a matching flow entry❖ a packet matches an entry with a "send to controller" action

❖ Flow_removed ❖ Switch sends a Flow_removed message to controller when

❖ flow time out❖ delete flow using Flow_removed message by controller

❖ Port_status❖ As physical ports are added, modified, and removed from the switch

Page 32: RYU Introduction

OpenFlow - Symmetric

❖ Hello❖ Hello messages are exchanged between the switch and

controller upon connection startup❖ version negotiation

❖ Echo❖ indicate liveness of a controller-switch connection

❖ Vendor❖ Offer additional functionality within the OpenFlow message type space