Software-defined networking
Use me when:
┌─────────────────────────────────────────────────────┐
│ Application Layer │
│ (Network Apps & Orchestration) │
└─────────────────────┬───────────────────────────────┘
│ Northbound API
┌─────────────────────▼───────────────────────────────┐
│ SDN Controller │
│ (OpenDaylight, ONOS, Ryu) │
│ - Network state │
│ - Topology discovery │
│ - Path computation │
└─────────────────────┬───────────────────────────────┘
│ Southbound API
┌─────────────────────▼───────────────────────────────┐
│ Data Plane │
│ (Switches, Routers) │
│ - Forwarding │
│ - Flow tables │
└─────────────────────────────────────────────────────┘
Standard southbound protocol for SDN:
# Ryu SDN Controller example
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, set_ev_cls
from ryu.lib.packet import packet, ethernet, ipv4
class SimpleSwitch(app_manager.RyuApp):
def __init__(self, *args, **kwargs):
super(SimpleSwitch, self).__init__(*args, **kwargs)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def packet_in_handler(self, ev):
msg = ev.msg
dp = msg.datapath
ofp = dp.ofproto_parser
# Install flow rule
actions = [ofp.OFPActionOutput(ofp.OFPP_FLOOD)]
self.add_flow(dp, 1, actions)