the frenetic network controller
play

The Frenetic Network Controller Arjun Guha, Nate Foster, Mark - PowerPoint PPT Presentation

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


  1. 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

  2. networks today hosts 2

  3. networks today switches hosts 2

  4. networks today switches hosts servers 2

  5. networks today switches routers hosts servers 2

  6. networks today fi rewalls switches routers hosts servers 3

  7. networks today fi rewalls switches routers load balancers hosts servers 4

  8. networks today fi rewalls switches routers load balancers hosts wireless access points servers 4

  9. networks today fi rewalls switches routers load balancers hosts wireless authentication server wireless access points servers 5

  10. 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

  11. 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

  12. software-de fi ned networking (SDN) 7

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. industry-standard SDN protocol 10

  19. industry-standard SDN protocol Java 10

  20. industry-standard SDN protocol Java Python C++ 10

  21. industry-standard SDN protocol Java Python C++ Haskell 10

  22. industry-standard SDN protocol Java Python C++ Haskell OCaml 10

  23. Example Controller Controller OpenFlow Switch Port 1 Port 2 Host 1 11 Host 2

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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