Software Defined Networking COMS 6998-10, Fall 2014 Instructor: Li Erran Li (lierranli@cs.columbia.edu) http://www.cs.columbia.edu/~lierranli/coms 6998-10SDNFall2014/ 9/29/2014: SDN Programming Language Outline • Announcements – Homework 2 will be posted on Thursday, due in 18 days • Review of previous lecture • Project ideas on scalable controller for cellular WAN • SDN programming language – Maple: generic programming language syntax such as Java, Python – NetKAT: domain specific programming language 9/29/14 Software Defined Networking (COMS 6998-10) 2 Review of Previous Lecture • How do we design scalable software defined networks? – Design scalable controllers – Offload control plane processing to switches • How do we design scalable controllers? – Flat structure multiple controllers – Recursive controller design – Hierarchical controller design 9/29/14 Software Defined Networking (COMS 6998-10) 3 Review of Previous Lecture (Cont’d) • How to offload control plane processing to switches? – Offload to switch control plane • Controller proactively generates the rules and distributes them to authority switches • Authority switches keep packets always in the data plane and ingress switches reactively cache rules – Offload to switch data plane • Try to stay in data-plane, by default • Provide enough visibility: for significant flows & sec-sensitive flows; Otherwise, aggregate or approximate statistics 9/29/14 Software Defined Networking (COMS 6998-10) 4 Review of Previous Lecture (Cont’d) How do we divide tasks among controller instances? • Partition – Controller instances with different computations tasks – Controller instances have only subsets of the NIB – Switches connect to a subset of controller instances • Aggregation – Reduce fidelity of information 9/29/14 Software Defined Networking (COMS 6998-10) 5 Review of Previous Lecture (Cont’d) • How to maintain network information base (NIB)? – Replicated transactions (SQL) storage for strong consistency (more static information) – One-hop memory-based DHT for weak consistency (more dynamic information) 9/29/14 Software Defined Networking (COMS 6998-10) 6 Review of Previous Lecture (Cont’d) Authority Switch Ingress Switch Egress Switch First packet Following packets Hit cached rules and forward Offload to switch control plane 9/29/14 Software Defined Networking (COMS 6998-10) Source: Minlan Yu 7 Review of Previous Lecture (Cont’d) • Rule cloning – ASIC clones a wildcard rule as an exact match rule for new microflows – Timeout or output port by probability 9/29/14 Software Defined Networking (COMS 6998-10) 8 Review of Previous Lecture (Cont’d) • Rule cloning – ASIC clones a wildcard rule as an exact match rule for new microflows – Timeout or output port by probability 9/29/14 Software Defined Networking (COMS 6998-10) 9 Review of Previous Lecture (Cont’d) • Rule cloning – ASIC clones a wildcard rule as an exact match rule for new microflows – Timeout or output port by probability 9/29/14 Software Defined Networking (COMS 6998-10) 10 Review of Previous Lecture (Cont’d) • Local actions – Rapid re-routing: fallback paths predefined Recover almost immediately – Multipath support: based on probability dist. Adjusted by link capacity or loads 9/29/14 Software Defined Networking (COMS 6998-10) 11 Outline • Announcements – Homework 2 will be posted on Thursday, due in 18 days • Review of previous lecture • Project ideas on scalable controller for cellular WAN • SDN programming language – Maple: generic programming language syntax such as Java, Python – Frenetic: domain specific programming language 9/29/14 Software Defined Networking (COMS 6998-10) 12 LTE Cellular Network Architecture Base Station (BS) Serving Gateway Packet Data Network Gateway Serving Gateway Internet User Equipment (UE) 9/29/14 access core Software Defined Networking (COMS 6998-10) 13 Current Mobile WANs • Organized into rigid and very large regions • Minimal interactions among regions • Centralized policy enforcement at PGWs Two Regions 9/29/14 Software Defined Networking (COMS 6998-10) 14 Mobile WANs Problems • Suboptimal routing in large carriers – Lack of sufficiently close PGW is a major cause of path inflation • Scalability and reliability – The sheer amount of traffic and centralized policy enforcement • Ill-suited to adapt to the rise of new applications – E.g., machine-to-machine – All users’ outgoing traffic traverses a PGW to the Internet, even for reaching a user served by a close base station in a neighbor region 9/29/14 Software Defined Networking (COMS 6998-10) 15 SoftMoW Motivation Question: How to make the packet core scalable, simple, and flexible for hundreds of thousands of base stations and hundreds of millions of mobile users? • Mobile networks should have fully connected core topology, small logical regions, and more egress points • Operators should leverage SDN to manage the whole network with a logically-centralized controller: – Directs traffic through efficient network paths that might cross region boundaries – Handles high amount of intra-region signaling load from mobile users – Supports seamless inter-region mobility and optimizes its performance – Performs network-wide application-based such as region optimization 9/29/14 Software Defined Networking (COMS 6998-10) 16 SoftMoW Solution • Hierarchically builds up a network-wide control plane – Lies in the family of recursive SDN designs (e.g. XBAR, ONS’13) • In each level, abstracts both control and data planes and exposes a set of “dynamically-defined” logical components to the control plane of the level above. – Virtual Base stations (VBS), Gigantic Switches (GS), and Virtual Middleboxes (VMB) Latency Matrix Union of Coverage Sum of capacities VBS GS VMB Core Net 9/29/14 RadioAccess Network Software Defined Networking (COMS 6998-10) Policy 17 SoftMoW Solution • New Dynamic Feature: In each level, the control logic can modify its logical components for optimization purposes – E.g., merge/spilt and move operations GSW2 GSW1 VBS1 GSW1 VBS1 VBS2 GSW1 GSW3 Merge/Split 9/29/14 GSW2 VBS2 VBS3 GSW2 Move and Split Software Defined Networking (COMS 6998-10) VBS3 18 First Level-SoftMoW Architecture • Replace inflexible and expensive hardware devices (i.e., PGW, SGW) with SDN switches • Perform distributed policy enforcement using middle-box instances • Partition the network into independent and dynamic logical regions • A child controller manages the data plane of each regions Events GS Rules & Actions Bootstrapping phase: based on location and processing capabilities of child controllers Agent A Child A NIB E2 E3 Boundary M 1 Region A E1 M M 9/29/14 Local Apps M 2 4 BS1 M BS 3 5 M 6 Region B I1 7 9 BS4 E4 M M 8 M 10 BS5 2 BSNetworking Software Defined (COMS 6998-10) 3 M BS6 19 Second Level-SoftMoW Architecture • A parent runs a global link discovery protocol – Inter-region links are not detected by BDDP and LLDP • A parent participates in the inter-domain routing protocol • A parent builds virtual middlebox chains and egresspoint policies, and dictates to GSs Events GS Rules & Actions Agent A I-Mobility Manager Local Apps Middlebox Egress Optimizer Selection Child A NIB E2 E3 Boundary M 1 Region A E1 M 3 M 2 M 4 BS19/29/14 6 Region B I1 7 M E4 8 M GS Protocol E1 M 9 5 BS2 BS3 10 M E2 E3 E4 ----- M M M M M BGP sessions Parent NIB M Region Optimizer 2M M BS4 BS5 BS6 Internal Software Defined Networking (COMS 6998-10) VBS1 GSA Border VBS 1 I1 GSB 2M M Border Internal VBS 2 VBS2 20 Hierarchical Traffic Engineering • A parent pushes a global label into each traffic group • Child controllers perform label swapping o Ingress point: pop the global label and push some local labels for intraregion paths Events GS Rules & o Egress point: pop the local labels and push back the global label Actions Push W I-Mobility Manager Middlebox Optimizer Agent A Egress Selection Region Optimizer Parent NIB GS Protocol E1 E2 E3 2M M Latency (P1,E2)=300 Latency (P1,E4)=100 GSA Internal VBS1 Push W 9/29/14 Border VBS 1 I1 E2 GSB E3 Boundary M 1 Region A E1 E4 M M M M Child A NIB Pop W2 Push W ----- Web Voice BGP sessions Local Apps Pop W1 M 2 Region B I1 M 3 M 6 7 E4 M 8 M 2M M GS Rules Border Internal VBS VBS2 2 M 4 BS1 Pop W Push W1 Software Defined Networking (COMS 6998-10) M 5 BS2 Pop W 9 BS3 BS4 M M 10 BS5 BS6 Push W2 21 Time-of-day Handover Optimization Q: How can an operator reduce inter-region handovers in peak E A M GSA M M VBS1 VBS1 VBS2 Border VBS2 Abstraction update coordination Child A E2 Parent E3 E4 Child B E3 Boundary M M 1 Region A E1 E2 Internal VBS2 VBS2 Handover graph E1 3M M GSB Border VBS 1 Min Cut 300 Border 1000 Border 2000 Internal Internal E4 M 2M E3 E2 1 hours? GS M 2 Region B I1 M 3 6 7 M 8 M M M M M 2M M GSA I1 GSB 2M M GS Rule: Move Border VBS1 M 4 M BS1 Internal VBS1 Border Border Internal 9/29/14 VBS1 VBS2 VBS 2 New Software Defined Networking (COMS 6998-10) Border 9 5 BS2 BS3 Old Border BS4 M M 10 BS5 BS6 22 Project Ideas • Implement a G-switch driver/agent: acts as a shim to allow a G-switch to act like an actual OF switch. – This driver helps to connect any OF controller as a Gswitch to its parent OF controller. In this way, installing rule-actions into G-switches and setting up paths on abstract topology becomes like the physical topology. – Driver should translate the messages or states received from the parent OF controller to the underlying topology and periodically pulls states from the local NIB to expose to the parent. • Implement HazelCast on a single controller – Show performance improvement on various applications such as traffic engineering, routing, and 9/29/14 Defined Networking (COMS 6998-10) in-memory data failure recoverySoftware over the standard 23 Project Ideas (Cont’d) • Implement recursive link discovery protocol and the necessary translations in the shim. • Implement RamCloud on a single controller – Show performance improvement on various applications such as traffic engineering, routing, and failure recovery compared with the standard NIB. • Implement an orchestration layer to provide global network view – Use ZooKeeper to dynamically assign controllers to data plane switches as the network becomes larger on top of a single/flat controller. • Implement the hierarchical control plane 9/29/14 Software Defined Networking (COMS 6998-10) 24 Outline • Announcements – Homework 2 will be posted on Thursday, due in 18 days • Review of previous lecture • Project ideas on scalable controller for cellular WAN • SDN programming language – Maple: generic programming language syntax such as Java, Python – Frenetic: domain specific programming language 9/29/14 Software Defined Networking (COMS 6998-10) 25 A Key Source of Complexity in Openflow Controllers • onPacketIn(p): Step 1 examine p and decide what to do with p. Step 2 construct and install OF rules so that similar packets are processed at switches with same action. 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 26 Simple, generic solution using exact matches • onPacketIn(p): Step 1 Every flow incurs flow setup delay. examine p and decide what to do with p. Step 2 insert rule with “exact match” for p, i.e. match on ALL attributes, with action determined above. 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 27 Step 1 yes Step 2 match:{TcpDst=22} action:drop drop priority:HIGH p.TcpDst=22 ? tcpDst!=22 no 9/29/14 send to next hop for p.EthDst match:{EthDst=p.EthDst} action:nextHop(p) Software Defined Networking (COMS 6998-10) priority:LOW Source: Andreas Voellmy, Yale 28 Switch Low EthDst:A EthDst:A , TcpDst:8 0 Port 1 EthDst:A , TcpDst:2 2 Controller If p.TcpDst=22: insert rule {prio:HIGH, match:{TcpDst=22}, action:drop } Else: insert rule {prio:LOW, match:{EthDst=p.EthDst},action:nextHop(p.EthDst) 9/29/14 Software Defined Networking (COMS 6998-10) 29 Step 1. Make Decisions User Level Step 2. Generate Rules OF Controller Library Under the hood OF Switches 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 30 User Level Algorithmic Policy Step 1. Make Decisions Step 2. Generate Rules Under the hood OF Controller Library OF Switches 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 31 Algorithmic Policies • Function in a general purpose language that describes how a packet should be routed, not how flow tables are configured. • Conceptually invoked on every packet entering the network; may also access network environment state; hence it has the form: • Written in a familiar language such as Java, Python, or Haskell 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 32 Example Algorithmic Policy in Java Does not specify flow table configutation Route f(Packet p, Env e) { if (p.tcpDstIs(22)) return null(); else { Location sloc = e.location(p.ethSrc()); Location dloc = e.location(p.ethDst()); Path path = shortestPath(e.links(), sloc,dloc); if (p.ethDstIs(2) return null(); else return unicast(sloc,dloc,path); } } 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 33 How to implement algorithmic policies? • Naive solutions -- process every packet at controller or use only exact match rules -- perform poorly • Static analysis to determine layout of flow tables is possible, but has drawbacks: – Static analysis of program in general-purpose language is hard and is typically conservative – System becomes source-language dependent 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 34 Maple’s approach: runtime tracing 1. Maple observes the dependency of f on packet data. 3. Compile flow tables (FTs) from a trace tree. Match Action 1 tcpDst:22 ToControlle r Prio 0 1 0 0 9/29/14 Prio Match Action ethDst:2 discard Prio Match ToControlle 0 ethDst:4, ethSrc:6 port 30 tcpDst:22 r 1 tcpDst:22 ethDst:2 discard 0 ethDst:2 ethDst:4, ethSrc:6 port 30 0 ethDst:4, ethSrc:6 2. Build a trace tree (TT), a partial decision tree for f. Action ToControlle r discard port 30 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 35 Policy Route f(Packet p, Env e) { if (p.tcpDstIs(22)) Assert(TcpDst, 22) EthDest:1, TcpDst:80 return null(); false else { Location dloc = e.location(p.ethDst()); Read(EthD st) Location sloc = e.location(p.ethSrc()); Path path = shortestPath( e.links(),sloc,dloc); if (p.ethDstIs(2) return null(); else return unicast(sloc,dloc,path); 4 Read(EthSr c) 6 path1 } } 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 36 Trace Tree Policy Route f(Packet p, Env e) { Assert(TcpDst ,22) if (p.tcpDstIs(22)) return null(); EthDst:1, TcpDst:2 2 Assert(TcpDst, 22) true null true else { Location dloc = e.location(p.ethDst()); Location sloc = e.location(p.ethSrc()); ? false Read(EthD st) Path path = shortestPath( e.links(),sloc,dloc); 4 Read(EthSr c) if (p.ethDstIs(2) return null(); else return unicast(sloc,dloc,path); 6 } path1 } 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 37 Compile recorded executions into flow table tcpDst==2 2 3 True 1 False 2 drop ethDst 4 2 drop ethSrc 6 port 30 barrier rule: match:{ethDst:4,ethSrc:6} match:{tcpDst==22} action:[port 30] action:ToController Priority 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 38 Basic compilation: in-order traversal & barrier rules tcpDst==2 2 Priority := 0 1 2 3 accumulated match: {} False True {tcpDst:22} ethDst null 2 {ethDst:2} null (prio:3,{tcpDst:22},action:drop) {} 4 ethSrc {ethDst:4} 6 barrier rule: (prio:2,{tcpDst:22},action:ToController) port 30 {ethDst:4, ethSrc:6} (prio:1,{ethDst:2},action:drop) (prio:0,{ethDst:4, ethSrc:6},action:[port 30]) 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 39 Basic compilation example result (prio:3,{tcpDst:22},action:drop) (prio:2,{tcpDst:22},action:ToController) Can use priority 0 No effect (prio:1,{ethDst:2},action:drop) (prio:0,{ethDst:4, ethSrc:6},action:[port 30]) • Trace tree method converts arbitrary algorithmic policies into correct forwarding tables that effectively use wildcard rules. • Deficiencies: – More priorities levels than necessary – More rules than necessary • Annotate TT nodes with extra information to improve compilation 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 40 Optimization 1: Annotate TT nodes with completeness tcpDst==2 2 {} False True no barrier {tcpDst:22} drop ethDst complete complete {ethDst:2} 2 drop (prio:2,{tcpDst:22},action:drop) {} 4 ethSrc {ethDst:4} 6 complete port 30 (prio:1,{ethDst:2},action:drop) {ethDst:4, ethSrc:6} (prio:0,{ethDst:4, ethSrc:6},action:[port 30]) 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 41 Optimization 2: Annotate nodes with priority dependencies tcpDst==2 2 True {tcpDst:22} {} False 1 ethDst drop 2 {ethDst:2} drop (prio:1,{tcpDst:22},action:drop) {} 4 ethSrc {ethDst:4} 6 port 30 (prio:0,{ethDst:2},action:drop) {ethDst:4, ethSrc:6} (prio:0,{ethDst:4, ethSrc:6},action:[port 30]) 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 42 Improved compilation result (prio:1,{tcpDst:22},action:drop) (prio:0,{ethDst:2},action:drop) (prio:0,{ethDst:4, ethSrc:6},action:[port 30]) 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 43 Maple Status • Maple has been implemented in Haskell using the McNettle Openflow controller, which implements Openflow 1.0. • The implementation includes several other features: – Incremental TT compilation, to avoid full recompilation on every update. – Trace reduction, to ensure traces and trace trees do not contain redundant nodes. – Automatic and user-specified invalidation, to support removing and updating TT and FT when network state changes. 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 44 Summary: Contributions • Algorithmic policies provide a simple, expressive programming model for SDN, eliminating a key source of errors and performance problems. • Maple provides a scalable implementation of algorithmic policies through several novel techniques, including: – runtime tracing of algorithmic policies, – maintaining a trace tree and compiling TT to flow tables to distribute processing to switches; – using TT annotations to implement compiler optimizations such as rule and priority reductions. 9/29/14 Software Defined Networking (COMS 6998-10) Source: Andreas Voellmy, Yale 45 Outline • Announcements – Homework 2 posted due in 18 days – Next lecture: first half by Josh Reich from Princeton on Pyretic • Review of previous lecture • SDN programming language – Maple: generic programming language syntax such as Java, Python – Frenetic: domain specific programming language 9/29/14 Software Defined Networking (COMS 6998-10) 46 Key questions: •What are the right abstractions for programming software-defined networks? •How can we engineer trustworthy implementations that provide assurance? 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 47 Modular Abstractions 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 48 Combining Functionality One monolithic application Monitor + Route + Load Balance + Firewall Controller Platform Challenges: •Writing, testing, and debugging programs •Reusing code across applications •Porting applications to new platforms 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 49 Pattern Route + Monitor Actions dstip=10.0.0.1 Fwd 1 dstip=10.0.0.2 Fwd 2 Pattern Actions srcip=1.2.3.4 Count Pattern Route + Monitor 9/29/14 Actions srcip=1.2.3.4, dstip=10.0.0.1 Fwd 1, Count srcip=1.2.3.4, dstip=10.0.0.2 Fwd 2, Count srcip=1.2.3.4 Count dstip=10.0.0.1 Fwd 1 dstip=10.0.0.2 Fwd 2 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 50 Pattern Route + Monitor Actions srcip=1.2.3.4, dstip=10.0.0.1 Fwd 1, Count srcip=1.2.3.4, dstip=10.0.0.2 Fwd 2, Count srcip=1.2.3.4 Count dstip=10.0.0.1 Fwd 1 dstip=10.0.0.2 Fwd 2 Pattern + Firewall Actions tcpdst = 22 Drop * Fwd ? Pattern Route + Monitor + Firewall 9/29/14 Actions srcip=1.2.3.4, tcpdst = 22 Count, Drop srcip=1.2.3.4, dstip=10.0.0.1 Fwd 1, Count srcip=1.2.3.4, dstip=10.0.0.2 Fwd 2, Count srcip=1.2.3.4 Count tcpdst = 22 Drop dstip=10.0.0.1 Fwd 1 dstip=10.0.0.2 Fwd 2 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 51 Modular Applications One module for each task Monitor Route Load Balance Firewall Controller Platform Benefits: •Easier to write, test, and debug programs •Can reuse modules across applications •Possible to port applications to new platforms 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 52 Beyond Multi-Tenancy Each module controls a different portion of the traffic Slice 1 Slice 2 Slice 3 ... Slice N Controller Platform Relatively straightforward to split rule, bandwidth, and network events across these modules 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 53 Modules Affect the Same Traffic Each module partially specifies handling of all traffic Monitor Route Load Balance Firewall Controller Platform How should we combine a collection of such modules into a single application? 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 54 Language-Based Approach Monitor Route Load Balance Firewall Compiler + Run-Time System Controller Platform Design languages based on modular programming abstractions, and engineer efficient implementations using a compiler and run-time system 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 55 Language Constructs [POPL ’12, NSDI ’13] 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 56 Parallel Composition Pattern srcip=1.2.3.4 Pattern Actions Count Monitor + Actions dstip=3.4.5.6 Fwd 1 dstip=6.7.8.9 Fwd 2 Route Controller Platform Pattern srcip=1.2.3.4, dstip=3.4.5.6 Fwd 1, Count srcip=1.2.3.4, dstip=6.7.8.9 Fwd 2, Count srcip=1.2.3.4 Count dstip=3.4.5.6 Fwd 1 dstip=6.7.8.9 9/29/14 Actions Fwd 2 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 57 Sequential Composition Pattern Pattern Actions Actions srcip=*0 dstip:=10.0.0.1 dstip=10.0.0.1 Fwd 1 srcip=*1 dstip:=10.0.0.2 dstip=10.0.0.2 Fwd 2 Load Balance ; Route Controller Platform Pattern 9/29/14 Actions srcip=*0 dstip:=10.0.0.1, Fwd 1 srcip=*1 dstip:=10.0.0.2, Fwd 2 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 58 Dividing Traffic Over Modules Predicates specify which packets traverse which modules, using ingress port and packet-header fields if dstport=80 Load Balance then ; else if dstport=22 Monitor + Route then Route else Drop 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 59 The NetKAT Language field ::= switch | inport | srcmac | dstmac | ... val ::= 0 | 1 | 2 | 3 | ... a,b,c ::= true (* true constant *) | false (* false constant *) | field = val (* test value *) | a 1 | a2 (* disjunction *) | a1 & a2 (* conjunction *) |!a (* negation *) p,q,r ::= filter a (* filter by predicate *) | field := val (* modify value *) | p1 + p2 (* parallel composition *) | p 1 ; p2 (* sequential composition *) | p* (* iteration *) Syntactic sugar: if a then p1 else p2 = filter a; p1 + filter !a; Software Defined Networking (COMS 6998-10) 9/29/14 60 Source: Nate Foster, Cornell p2 Example NetKAT Program open NetKAT.Std (* a simple repeater *) let repeater : policy = <:netkat< if port = 1 then port := 2 + port := 3 + port := 4 else if port = 2 then port := 1 + port := 3 + port := 4 else if port = 3 then port := 1 + port := 2 + port := 4 else if port = 4 then port := 1 + port := 2 + port := 3 else drop >> let _ = run_static repeater 9/29/14 Software Defined Networking (COMS 6998-10) 61 Example NetKAT Program (Cont’d) open NetKAT.Std let forwarding : policy = <:netkat< if ip4Dst = 10.0.0.1 then port := 1 else if (* destination is 10.0.0.2, forward out port 2, etc. *) ... else drop >> 9/29/14 Software Defined Networking (COMS 6998-10) 62 Example NetKAT Program (Cont’d) open NetKAT.Std open Forwarding let firewall : policy = <:netkat< if (ip4Src = 10.0.0.1 && ip4Dst = 10.0.0.2 && tcpSrcPort = 80 || ip4Src = 10.0.0.2 && ip4Dst = 10.0.0.1 && tcpDstPort = 80) then $forwarding else drop 9/29/14 Software Defined Networking (COMS 6998-10) 63 Example: Topology Abstraction It is often useful to write programs in terms of a simplified abstract network topology Example: load balancer Abstract topology Physical topology Benefits: •Information hiding: limit what each module sees •Protection: limit what each module does •Reuse: write code for appropriate interface 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 64 Example: “One Big Switch” Abstract Network Physical Network • Simplest example of topology abstraction • Can be used in many applications, including access control, load balancing, distributed middleboxes, etc. Implementation: (ingress; raise; application; lower; fabric; egress) 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 65 Formal Reasoning 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 66 Program Equivalence Given a program and a topology: A B Want to be able to answer questions like: “Will my network behave the same if I put the firewall rules on A, or on switch B (or both)?” Formally, does the following equivalence hold? (filter switch = A ; firewall; routing + filter switch = B; routing) ~ (filter switch = A ; routing + filter switch = B; firewall; routing) 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 67 NetKAT Equational Theory Boolean Algebra Packet Algebra a | (b & c) ~ (a | b) & (a | c) f := n; f’ := n’ ~ f’ := n’ ; f := n if f ≠ f’ a | true ~ true f := n; f’ = n’ ~ f’ = n’; f := n if f ≠ f’ a | ! a ~ true f := n; f = n ~ f := n a&b~b&a f = n; f := n ~ f = n a & !a ~ false f := n; f’ = n’ ~ f := n’ a&a~a f = n; f = n’ ~ filter drop if n ≠ n’ Kleene Algebra p + (q + r) ~ (p + q) + r p+q~q+p p + filter false ~ p p+p~p p ; (q ; r) ~ (p ; q) ; r p; (q + r) ~ p ; q + p ; r (p + q) ; r ~ p ; r + q ; r 9/29/14 filter true ; p ~ p ~ p ; filter true filter false ; p ~ filter false p ; filter false ~ filter false filter true + p ; p* ~ p* filter true + p* ; p ~ p* p + q ; r + r ~ r ⟹ p* ; q + r ~ r p + q ; r + q ~ q ⟹ p ; r* + q ~q Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 68 NetKAT and Kleene Algebras The design of NetKAT is not an accident! Its foundations rest upon canonical mathematical structure: • Regular operators (+, ;, and *) encode paths through topology • Boolean operators (&, |, and !) encode switch tables This is called a Kleene Algebra with Tests [Kozen ’96] Theorems • Soundness: programs related by the axioms are equivalent • Completeness: equivalent programs are related by the axioms • Decidabilty: program equivalence is decidable (PSPACE) 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 69 NetKAT Verification • Model programs and topologies in the Z3 SMT solver • Encode network-wide function as the transitive closure of the sequential composition of the program and topology • Verify reachability properties automatically 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 70 Machine-Verified Controllers 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 71 Certified Software Systems Recent Successes •seL4 [SOSP ’09] •CompCert [CACM ’09] •F* [ICFP ’11, POPL ’12, ’13] Tools Inductive pred : Type := | OnSwitch : Switch -> pred | InPort : Port -> pred | DlSrc : EthernetAddress -> pred | DlDst : EthernetAddress -> pred | DlVlan : option VLAN -> pred Lemma inter_wildcard_other : forall x, | ... Wildcard_inter WildcardAll x = x. | And : Proof. pred -> pred -> pred | Or : pred -> pred -> predx; auto. intros; destruct | Not : Qed. pred -> pred | All : pred | None :Lemma pred inter_wildcard_other1 : forall x, Wildcard_inter x WildcardAll = x. (** := val handle_event : Inductive Proof. act : Type event ->x; unit Monad.m | ForwardMod : Moddestruct -> PseudoPort -> act **) intros; auto. let handle_event = function | | ... Qed. SwitchConnected swId -> Inductive Lemma pol : inter_exact_same Typehandle_switch_connected := : forall x,swId | SwitchDisconnected swId ->x) | Policy :Wildcard_inter pred -> list act -> pol (WildcardExact handle_switch_disconnected swId | | Union : pol -> pol -> =pol (WildcardExact x) WildcardExact x. SwitchMessage (swId, xid0, msg) -> (match | Restrict : pol -> pred -> pol Proof. msg with | PacketInMsg pktIn -> | ... intros. handle_packet_in swId pktIn | _ -> unfold Wildcard_inter. Monad.ret ()) (** val main : unit destruct (eqdec x x); intuition. Monad.m **) let main = Monad.forever Qed. (Monad.bind Monad.recv (fun evt -> handle_event evt)) Write code Prove correct Extract code Textbooks Certified binary Certified Programming with Dependent Types 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 72 Certified NetKAT Controller • Each level of abstraction formalized in Coq • Machine-checked proofs that the transformations between levels preserve semantics • Code extracted to OCaml and deployed with real switch hardware 9/29/14 NetKAT Compiler Optimizer Flow tables Run-time system OpenFlow messages Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 73 NetKAT Compiler Overview •Compiler: maps NetKAT programs to flow tables •Optimizer: eliminates “empty” and “shadowed” rules Correctness Theorem Theorem compile_correct : forall opt pol sw pt pk bufId, SemanticsPreserving opt -> netcore_eval pol sw pt pk bufId = flowtable_eval (compile pol sw) sw pt pk bufId. Formalization Highlights •Library of algebraic properties of flow tables •New tactic for proving equalities on bags •Key invariant: all packet patterns “natural” 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 74 OpenFlow 1.0 Specification 42 pages... ...of informal prose ...diagrams and flow charts ...and C struct definitions 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 75 Featherweight OpenFlow Semantics Syntax Key Features: •Models all features related to packet forwarding and all essential asynchrony •Supports arbitrary controllers 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 76 Forwarding /* Fields to match against flows */ struct ofp_match { uint32_t wildcards; /* Wildcard fields. */ uint16_t in_port; /* Input switch port. */ uint8_t dl_src[OFP_ETH_ALEN]; /* Ethernet source address. */ uint8_t dl_dst[OFP_ETH_ALEN]; /* Ethernet destination address. */ uint16_t dl_vlan; /* Input VLAN. */ uint8_t dl_vlan_pcp; /* Input VLAN priority. */ uint8_t pad1[1]; /* Align to 64-bits. */ uint16_5 dl_type; /* Ethernet frame type. */ uint8_t nw_tos; /* IP ToS (DSCP field, 6 bits). */ uint8_t nw_proto; /* IP protocol or lower 8 bits of ARP opcode. */ uint8_t pad2[2]; /* Align to 64-bits. */ uint32_t nw_src; /* IP source address. */ uint32_t nw_dst; /* IP destination address. */ uint16_t tp_src; /* TCP/UDP source port. */ uint16_t tp_dst; /* TCP/UDP destination port. */ }; OFP_ASSERT(sizeof(struct ofp_match) == 40); Record Pattern : Type := MkPattern { dlSrc : Wildcard EthernetAddress; dlDst : Wildcard EthernetAddress; dlType : Wildcard EthernetType; dlVlan : Wildcard VLAN; dlVlanPcp : Wildcard VLANPriority; nwSrc : Wildcard IPAddress; nwDst : Wildcard IPAddress; nwProto : Wildcard IPProtocol; nwTos : Wildcard IPTypeOfService; tpSrc : Wildcard TransportPort; tpDst : Wildcard TransportPort; inPort : Wildcard Port }. Detailed model of matching, forwarding, and flow table update 9/29/14 Definition Pattern_inter (p p':Pattern) := let dlSrc := Wildcard_inter EthernetAddress.eqdec (ptrnDlSrc p) (ptrnDlSrc p') in let dlDst := Wildcard_inter EthernetAddress.eqdec (ptrnDlDst p) (ptrnDlDst p') in let dlType := Wildcard_inter Word16.eqdec (ptrnDlType p) (ptrnDlType p') in let dlVlan := Wildcard_inter Word16.eqdec (ptrnDlVlan p) (ptrnDlVlan p') in let dlVlanPcp := Wildcard_inter Word8.eqdec (ptrnDlVlanPcp p) (ptrnDlVlanPcp p') in let nwSrc := Wildcard_inter Word32.eqdec (ptrnNwSrc p) (ptrnNwSrc p') in let nwDst := Wildcard_inter Word32.eqdec (ptrnNwDst p) (ptrnNwDst p') in let nwProto := Wildcard_inter Word8.eqdec (ptrnNwProto p) (ptrnNwProto p') in let nwTos := Wildcard_inter Word8.eqdec (ptrnNwTos p) (ptrnNwTos p') in let tpSrc := Wildcard_inter Word16.eqdec (ptrnTpSrc p) (ptrnTpSrc p') in let tpDst := Wildcard_inter Word16.eqdec (ptrnTpDst p) (ptrnTpDst p') in let inPort := Wildcard_inter Word16.eqdec (ptrnInPort p) (ptrnInPort p') in MkPattern dlSrc dlDst dlType dlVlan dlVlanPcp nwSrc nwDst nwProto nwTos tpSrc tpDst inPort. Definition exact_pattern (pk : Packet) (pt : Word16.T) : Pattern := MkPattern (WildcardExact (pktDlSrc pk)) (WildcardExact (pktDlDst pk)) (WildcardExact (pktDlTyp pk)) (WildcardExact (pktDlVlan pk)) (WildcardExact (pktDlVlanPcp pk)) (WildcardExact (pktNwSrc pk)) (WildcardExact (pktNwDst pk)) (WildcardExact (pktNwProto pk)) (WildcardExact (pktNwTos pk)) (Wildcard_of_option (pktTpSrc pk)) (Wildcard_of_option (pktTpDst pk)) (WildcardExact pt). Definition match_packet (pt : Word16.T) (pk : Packet) (pat : Pattern) : bool := negb (Pattern_is_empty (Pattern_inter (exact_pattern pk pt) pat)). Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 77 Asynchrony “In the absence of barrier messages, switches may arbitrarily reorder messages to maximize performance.” “There is no packet output ordering guaranteed within a port.” Essential asynchrony: packet buffers, message reordering, and barriers Definition Definition Definition Definition 9/29/14 InBuf := Bag Packet. OutBuf := Bag Packet. OFInBuf := Bag SwitchMsg. OFOutBuf := Bag CtrlMsg. Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 78 Distributed Programming: non-atomic table updates Priority Predicate Asynchrony (Cont’d) Action ⊆ Priority Predicate Action 10 SSH Drop ⊆ Priority Predicate Action 5 dst_ip = H1 Fwd 1 Priority Predicate Action 10 SSH Drop 5 dst_ip = H1 Fwd 1 update re-ordering Priority Predicate Action 5 dst_ip = H1 Fwd 1 5 dst_ip = H2 Fwd 2 9/29/14 ⊆ Priority Predicate Action 10 SSH Drop 5 dst_ip = H1 Fwd 1 5 dst_ip = H2 Fwd 2 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 79 Controllers Ultimately we want to prove theorems about controllers that implement the NetKAT run-time system... ...but we didn’t want to bake specific controllers into Featherweight OpenFlow! Controller model: fully abstract Controller Parameters : abstract type of controller state fin : fout : 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 80 Weak Bisimulation (H1, ) (S1,pt1, ) (S2,pt1, ) (H2, ) ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ Theorem fwof_abst_weak_bisim : weak_bisimulation concreteStep abstractStep bisim_relation. 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 81 The System predicates predicates predicates policies policies policies queries queries queries Frenetic implemented using OX Ox stream of snapshots over time OCaml embedding • predicates and policies • queries OCaml OpenFlow Platform • similar to Nox, Pox, Floodlight, etc. 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 82 The System Domain-specific language Frenetic DSL • predicates and policies • monitoring • mac learning • network address translation implemented using Frenetic implemented using OX Ox OCaml embedding • predicates and policies • queries OCaml OpenFlow Platform • similar to Nox, Pox, Floodlight, etc. 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 83 Conclusion Modularity is a key concern in the design of any language NetKAT provides rich abstractions for building modular network programs, including parallel and sequential composition operators By leveraging recent advances in formal methods, can build trustworthy compilers, run-time systems, and verification tools Implementation status: • Stand-alone controller platform implemented in OCaml • Sophisticated, proactive compiler for OpenFlow rules • Large parts of the system formally verified in Coq • Experimental support for OpenFlow 1.3 9/29/14 Software Defined Networking (COMS 6998-10) Source: Nate Foster, Cornell 84 Questions? 9/29/14 Software Defined Networking (COMS 6998-10) 85