The Frenetic Network Controller Arjun Guha, Nate Foster, Mark Reitblatt, Cole Schlesinger, and others: www.github.com/frenetic-‑lang/frenetic/contributors UMass Amherst Cornell Princeton 1
networks today hosts 2
networks today switches hosts 2
networks today switches hosts servers 2
networks today switches routers hosts servers 2
networks today fi rewalls switches routers hosts servers 3
networks today fi rewalls switches routers load balancers hosts servers 4
networks today fi rewalls switches routers load balancers hosts wireless access points servers 4
networks today fi rewalls switches routers load balancers hosts wireless authentication server wireless access points servers 5
Each box: networks today • Runs specialized, vendor- de fi ned software • Con fi gured independently via a command-line interface fi rewalls Di ffi cult to con fi gure, di ffi cult to switches reason about routers load balancers hosts wireless authentication server wireless access points servers 5
Recent Network Outages We discovered a miscon fi guration on this pair of switches that caused what's called a “bridge loop” in the network. A network change was […] executed incorrectly […] more “stuck” volumes and added more requests to the re-mirroring storm Service outage was due to a series of internal network events that corrupted router data tables Experienced a network connectivity issue […] interrupted the airline's fl ight departures , airport processing and reservations systems
software-de fi ned networking (SDN) 7
software-de fi ned OpenFlow Switch networking (SDN) OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Switch OpenFlow Switch standardized, programmable network devices (“switches”) 7
O p e n F l o w S w i t c h O p e n F O l o p w e n S F w l o i t w c h S w i t c h 8
O p e n F l o w S w i t c h Key Features and Advantages of SDN O p e n F O l o p w e n • Standardized, programmable network devices S F w l o i t w c h S w i t c h easy to deploy new in-network features 8
Controller O p e n F l o w S w i t c h Key Features and Advantages of SDN O p e n F O l o p w e n • Standardized, programmable network devices S F w l o i t w c h S w i t c h easy to deploy new in-network features • Logically centralized controller (beefy server) enables reasoning about whole-network behavior f : switch ⨉ port ⨉ packet ➞ { ( port 1 , packet 1 ), ..., ( port n , packet n ) } 8
Lots of SDN Interest • By startups and established players can buy commercial hardware and software • 200+ attendees at HotSDN ’13 • Six (out of 40) papers at SIGCOMM’13 on SDN 9
industry-standard SDN protocol 10
industry-standard SDN protocol Java 10
industry-standard SDN protocol Java Python C++ 10
industry-standard SDN protocol Java Python C++ Haskell 10
industry-standard SDN protocol Java Python C++ Haskell OCaml 10
Example Controller Controller OpenFlow Switch Port 1 Port 2 Host 1 11 Host 2
Example let ¡packet_in ¡(sw ¡: ¡switchId) ¡(xid ¡: ¡xid) ¡(pktIn ¡: ¡packetIn) ¡: ¡unit ¡= ¡ ¡let ¡actions ¡= ¡ ¡ ¡ ¡ ¡if ¡pktIn.port ¡= ¡1 ¡then ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡2)] ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡1)] ¡in ¡ ¡send_packet_out ¡sw ¡0l ¡ ¡ ¡ ¡{ ¡output_payload ¡= ¡pktIn.input_payload; ¡ ¡ ¡ ¡ ¡ ¡port_id ¡= ¡None; ¡ ¡ ¡ ¡ ¡ ¡apply_actions ¡= ¡actions ¡} Controller Controller OpenFlow Switch Port 1 Port 2 Host 1 11 Host 2
Example let ¡packet_in ¡(sw ¡: ¡switchId) ¡(xid ¡: ¡xid) ¡(pktIn ¡: ¡packetIn) ¡: ¡unit ¡= ¡ ¡let ¡pk ¡= ¡parse_payload ¡pktIn.input_payload ¡in ¡ ¡let ¡actions ¡= ¡ ¡ ¡ ¡ ¡if ¡Packet.dlTyp ¡pk ¡= ¡0x800 ¡&& ¡Packet.nwProto ¡= ¡6 ¡&& ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡(Packet.tpDst ¡= ¡22 ¡|| ¡Packet.tpSrc ¡= ¡22) ¡then ¡ ¡ ¡ ¡ ¡ ¡[] ¡(* ¡no ¡action ¡(i.e., ¡drop) ¡SSH ¡packets ¡*) ¡ ¡ ¡ ¡else ¡if ¡pktIn.port ¡= ¡1 ¡then ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡2)] ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡1)] ¡in ¡ ¡send_packet_out ¡sw ¡0l ¡ ¡ ¡ ¡{ ¡output_payload ¡= ¡pktIn.input_payload; ¡ ¡ ¡ ¡ ¡ ¡ ¡port_id ¡= ¡None; ¡ ¡ ¡ ¡ ¡ ¡apply_actions ¡= ¡actions ¡} Controller Controller OpenFlow Switch Port 1 Port 2 Host 1 12 Host 2
Example let ¡packet_in ¡(sw ¡: ¡switchId) ¡(xid ¡: ¡xid) ¡(pktIn ¡: ¡packetIn) ¡: ¡unit ¡= ¡ ¡let ¡pk ¡= ¡parse_payload ¡pktIn.input_payload ¡in ¡ ¡let ¡actions ¡= ¡ ¡ ¡ ¡ ¡if ¡Packet.dlTyp ¡pk ¡= ¡0x800 ¡&& ¡Packet.nwProto ¡= ¡6 ¡&& ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡(Packet.tpDst ¡= ¡22 ¡|| ¡Packet.tpSrc ¡= ¡22) ¡then ¡ ¡ ¡ ¡ ¡ ¡[] ¡(* ¡no ¡action ¡(i.e., ¡drop) ¡SSH ¡packets ¡*) ¡ ¡ ¡ ¡else ¡if ¡pktIn.port ¡= ¡1 ¡then ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡2)] ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡1)] ¡in ¡ ¡send_packet_out ¡sw ¡0l ¡ ¡ ¡ ¡{ ¡output_payload ¡= ¡pktIn.input_payload; ¡ ¡ ¡ ¡ ¡ ¡ ¡port_id ¡= ¡None; ¡ ¡ ¡ ¡ ¡ ¡apply_actions ¡= ¡actions ¡} Controller Controller OpenFlow Switch Port 1 Port 2 Host 1 12 Host 2
Example let ¡packet_in ¡(sw ¡: ¡switchId) ¡(xid ¡: ¡xid) ¡(pktIn ¡: ¡packetIn) ¡: ¡unit ¡= ¡ ¡let ¡pk ¡= ¡parse_payload ¡pktIn.input_payload ¡in ¡ ¡let ¡actions ¡= ¡ ¡ ¡ ¡ ¡if ¡Packet.dlTyp ¡pk ¡= ¡0x800 ¡&& ¡Packet.nwProto ¡= ¡6 ¡&& ¡ Generic packet ¡ ¡ ¡ ¡ ¡ ¡ ¡(Packet.tpDst ¡= ¡22 ¡|| ¡Packet.tpSrc ¡= ¡22) ¡then parser ¡ ¡ ¡ ¡ ¡ ¡[] ¡(* ¡no ¡action ¡(i.e., ¡drop) ¡SSH ¡packets ¡*) ¡ ¡ ¡ ¡else ¡if ¡pktIn.port ¡= ¡1 ¡then ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡2)] ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡1)] ¡in ¡ ¡send_packet_out ¡sw ¡0l ¡ ¡ ¡ ¡{ ¡output_payload ¡= ¡pktIn.input_payload; ¡ ¡ ¡ ¡ ¡ ¡ ¡port_id ¡= ¡None; ¡ ¡ ¡ ¡ ¡ ¡apply_actions ¡= ¡actions ¡} Controller Controller OpenFlow Switch Port 1 Port 2 Host 1 12 Host 2
Example let ¡packet_in ¡(sw ¡: ¡switchId) ¡(xid ¡: ¡xid) ¡(pktIn ¡: ¡packetIn) ¡: ¡unit ¡= ¡ ¡let ¡pk ¡= ¡parse_payload ¡pktIn.input_payload ¡in ¡ ¡let ¡actions ¡= ¡ ¡ ¡ ¡ ¡if ¡Packet.dlTyp ¡pk ¡= ¡0x800 ¡&& ¡Packet.nwProto ¡= ¡6 ¡&& ¡ Generic packet ¡ ¡ ¡ ¡ ¡ ¡ ¡(Packet.tpDst ¡= ¡22 ¡|| ¡Packet.tpSrc ¡= ¡22) ¡then parser ¡ ¡ ¡ ¡ ¡ ¡[] ¡(* ¡no ¡action ¡(i.e., ¡drop) ¡SSH ¡packets ¡*) ¡ ¡ ¡ ¡else ¡if ¡pktIn.port ¡= ¡1 ¡then ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡2)] ¡ ¡ ¡ ¡else ¡ ¡ ¡ ¡ ¡ ¡[Output ¡(PhysicalPort ¡1)] ¡in ¡ ¡send_packet_out ¡sw ¡0l ¡ ¡ ¡ ¡{ ¡output_payload ¡= ¡pktIn.input_payload; ¡ ¡ ¡ ¡ ¡ ¡ ¡port_id ¡= ¡None; ¡ ¡ ¡ ¡ ¡ ¡apply_actions ¡= ¡actions ¡} Controller OpenFlow Controller protocol parser OpenFlow Switch Port 1 Port 2 Host 1 12 Host 2
Recommend
More recommend