Presentation on theme: "Project Overview CS5229 Lecturer: Dr. Richard MA TA: Mostafa Rezazad."— Presentation transcript:
Project Overview CS5229 Lecturer: Dr. Richard MA TA: Mostafa Rezazad
Variety of SDN Controllers NOX/POX Ryu Floodlight OpenDaylight Pyretic Frenetic Procera RouteFlow Trema
POX: Overview A platform for building network control applications using Python Supports OpenFlow v. 1.0 only Advantages: o Widely used, maintained, supported o Relatively easy to read and write code Disadvantages: Performance
OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Preview Control Plane Data Plane ListenerControl Logic Messager 1 Parse packet and execute control logicFirst packet arrives at switchNo flow table match“PacketIn” event firedPacket sent to controllerCompose and send messageWrite flow table entrySecond packet arrives at switchFlow table matchAction PacketIn Msg Entry 1 2
Learn through an example Implement a switch o What is a switch? o What is a hub?
Simple hub Ethernet is a broadcast medium o Hub is a flooding device
Example: Simple Switch Switch layer 2: o A multiple port bridge o learn about the MAC addresses on each ports o passes MAC frames destined to those ports.
A A’A’ B B’B’C C’C’ 1 2 3 4 5 6 Self-learning, forwarding: example A A’ Source: A Dest: A’ MAC addr interface TTL switch table (initially empty) A 1 60 A A’ frame destination, A’, location unknown: flood A’ A destination A location known: A’ 4 60 selectively send on just one link
How it works? Step 1: Register event listeners to handle specific events (e.g. ConnectionUp, PacketIn) Step 2: Parse packet and execute control logics Step 3: Compose and send the OpenFlow message to the switch Controller Listener Event def launch (): 1- core.openflow.addListenerByName("PacketIn", _handle_PacketIn) 2- core.registerNew (Tutorial) Class Tutorial(EventMixin): //EventMixin is the class that raises events def __init__(self): self.listenTo(core.openflow) core.openflow_discovery.addListeners(self) //then implement all handlers you need….
How it works? Step 1: Register event listeners to handle specific events (e.g. ConnectionUp, PacketIn) Step 2: Parse packet and execute control logics Step 3: Compose and send the OpenFlow message to the switch Controller ListenerControl Logic Event def _handle_PacketIn (self, event): packet = event.parsed dst_port = table.get(packet.dst) def _handle_ConnectioUp (self, event) : log.debug(“Switch %s has come up.”, dpid_to_str(event.dpid)) Every switch connected to the controller has an id named dpid (data path id).
How it works? Step 1: Register event listeners to handle specific events (e.g. ConnectionUp, PacketIn) Step 2: Parse packet and execute control logics Step 3: Compose and send the OpenFlow message to the switch ListenerControl Logic Messager Event Msg msg = of.ofp_flow_mod() <- This instructs a switch to install a flow table entry msg.match.dl_src = packet.src another example is: msg.match.dl_dst = packet.dst _packet_out() msg.actions.append(of.ofp_action_output(port = dst_port)) event.connection.send(msg)
Network slicing Divide the production network into logical slices o Each slice controls its own packet forwarding Enforce strong isolation between slices o Actions in one slice do not affect another
Example1: FlowVisor FlowVisor a transparent proxy between switches and multiple controllers FlowVisor enforces isolation between each slice OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Switch FlowVisor Slice 1 Controller Slice 2 Controller Slice 3 Controller OF
OpenFlow Switch Example2: QoS-related Network Slicing Multiple queues for multiple classes Guaranteed minimum bandwidth Queue configuration is not part of the openflow Configuration defines packet treatment Openflow maps flows to queues Ref:http://archive.openflow.org/wk/index.php/Slicing Controller OF Q1Q2Q3Q4Q5DQ IF1 IF2 IF1IF3 IF4
Your project It is not FlowVisor It is not multiple queues (e.g., QoS) Special case where multiple bandwidth is provided Separate traffics into two slices and assign to different interfaces (not different controller not different queues) Try to keep it simple.