Download presentation
Presentation is loading. Please wait.
Published byHolly Taylor Modified over 9 years ago
1
Project Overview CS5229 Lecturer: Dr. Richard MA TA: Mostafa Rezazad
2
Variety of SDN Controllers NOX/POX Ryu Floodlight OpenDaylight Pyretic Frenetic Procera RouteFlow Trema
3
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
4
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
5
Learn through an example Implement a switch o What is a switch? o What is a hub?
6
Simple hub Ethernet is a broadcast medium o Hub is a flooding device
7
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.
8
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
9
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….
10
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).
11
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)
12
Example: Simple Switch def launch (): core.openflow.addListenerByName("PacketIn", _handle_PacketIn) def _handle_PacketIn (event): packet = event.parsed dst_port = table.get(packet.dst) msg = of.ofp_flow_mod() msg.match.dl_src = packet.src msg.match.dl_dst = packet.dst msg.actions.append(of.ofp_action_output(port = dst_port)) event.connection.send(msg) Step 1: Register event listener
13
Example: Simple Switch def launch (): core.openflow.addListenerByName("PacketIn", _handle_PacketIn) def _handle_PacketIn (event): packet = event.parsed dst_port = table.get(packet.dst) msg = of.ofp_flow_mod() msg.match.dl_src = packet.src msg.match.dl_dst = packet.dst msg.actions.append(of.ofp_action_output(port = dst_port)) event.connection.send(msg) Step 2: Parse the packet and execute control logics
14
Example: Simple Switch def launch (): core.openflow.addListenerByName("PacketIn", _handle_PacketIn) def _handle_PacketIn (event): packet = event.parsed dst_port = table.get(packet.dst) msg = of.ofp_flow_mod() msg.match.dl_src = packet.src msg.match.dl_dst = packet.dst msg.actions.append(of.ofp_action_output(port = dst_port)) event.connection.send(msg) Step 3: Compose and send OpenFlow message
15
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
16
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
17
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
18
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.
19
Lets have a look at the skeleton!
20
Flow Space
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.