30
Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford, Alec Story, and Dave Walker A Network Programming Language

A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Embed Size (px)

Citation preview

Page 1: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford, Alec Story, and Dave Walker

A Network Programming Language

Page 2: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Traditional Networks

2

Data Plane (hardware): Forwards, !lters, buffers, tags, rate-limits; collects stats

Control Plane (software): Tracks topology; computes routes; modi!es data plane state

Operator: Monitors traffic, Con!gures policy

Page 3: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Software-De!ned Networks

Idea: move control off of switches and onto a separate, general-purpose computer.

3

Data Plane

Controller Machine Arbitrary program implements control plane functionality: •  Monitors traffic, •  Tracks topology, •  Selects routes, •  Installs forwarding rules.

Page 4: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Momentum

Everyone has signed on Microsoft, Google, Cisco, Yahoo, Facebook, Deutch Telekom,…

New Applications   Host mobility   Virtualization   Dynamic access control   Energy-efficiency   Load balancing

4

Page 5: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

New Challenges

OpenFlow makes it possible to program the network, but it does not make it easy!

  Provides a thin veneer over switch hardware   Like programming in assembly

Our goal   Develop new abstractions for programming networks

– More convenient – More modular – More reliable – More secure

5

Page 6: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

This Talk

OpenFlow in more depth   Existing programming model and problems

Frenetic Language   New abstractions for network programming

Frenetic Run-time System

  Implementation strategy and experience

Page 7: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

OpenFlow Switches

6

Flow Table

Pattern Action Bytes Packets 01010 Drop 200 10

010* Forward(n) 100 3

011* Controller 0 0

priority

Switches

Page 8: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

OpenFlow Controllers (NOX)

7

Controller

Network Events •  Packets •  Stats •  Topology changes Control Messages •  Install rules •  Uninstall rules •  Query counters

NOX Program

Switches

Page 9: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Typical OpenFlow Application

Controller

Switches

Network Events •  Forwarding table miss

Control Messages • (Un)install rules

8

Page 10: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Problem I: Anti-Modular

9

Repeater Module

Controller Application

P: Forward 1 → 2 and 2 → 1

1 2

Monitoring Module

Q: Query web traffic

P installed

Doesn’t work because repeater rules too coarse-grained; monitoring rules don’t forward

Page 11: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Anti-Modularity: A Closer Look

def switch_join(switch): repeater(switch) def repeater(switch): pat1 = {in_port:1} pat2 = {in_port:2} install(switch,pat1,DEFAULT,None,[output(2)]) install(switch,pat2,DEFAULT,None,[output(1)])

def monitor(switch): pat = {in_port:2,tp_src:80} install(switch, pat, DEFAULT, None, []) query_stats(switch, pat) def stats_in(switch, xid, pattern, packets, bytes): print bytes sleep(30) query_stats(switch, pattern)

Repeater

Web Monitor

def switch_join(switch) repeater_monitor(switch) def repeater_monitor(switch): pat1 = {in_port:1} pat2 = {in_port:2} pat2web = {in_port:2, tp_src:80} Install(switch, pat1, DEFAULT, None, [output(2)]) install(switch, pat2web, HIGH, None, [output(1)]) install(switch, pat2, DEFAULT, None, [output(1)]) query_stats(switch, pat2web) def stats_in(switch, xid, pattern, packets, bytes): print bytes sleep(30) query_stats(switch, pattern)

Repeater/Monitor

blue = from repeater red = from web monitor green = from neither 10

Page 12: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Problem II: Two-tiered Model

Tricky problem:   Controller activity is driven

by packets   For efficiency, applications

install rules to forward packets in hardware

Constant questions:   “Will that packet come to

the controller and trigger my computation?”

  “Or is it already being handled invisibly on the switch?”

11

Controller

Page 13: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Problem III: Network Race Conditions

A challenging sequence of events:   Switch

–  sends packet to controller   Controller

–  analyzes packet –  updates its state –  initiates installation of new

packet-processing rules   Switch

–  hasn’t received new rules –  sends new packets to

controller   Controller

–  confused –  packets in the same $ow

handled inconsistently 12

Controller

Page 14: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Three problems with a common cause

Three problems   Anti-modular   Two-tiered model   Network race conditions

One cause No effective abstractions for reading network state

13

Page 15: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

The Solution

Separate network programming into two parts:   Abstractions for querying network state

– Reads have no effect on forwarding policy – Reads able to see every packet

  Abstractions for specifying a forwarding policy –  Forwarding policy must be separated from

implementation mechanism A natural decomposition that mirrors two fundamental tasks: monitoring and forwarding

14

Page 16: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

This Talk

OpenFlow & Nox in more depth   Existing programming model and problems

Frenetic Language   New abstractions for network programming

Frenetic Run-time System

  Implementation strategy and experience

Page 17: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Frenetic Language

Abstractions for querying network state   An integrated query language

– select, !lter, group, sample sets of packets or statistics – designed so that computation can occur on data plane

Abstractions for specifying a forwarding policy   A functional stream processing library (based on FRP)

– generate streams of network policies – transform, split, merge, !lter policies and other streams

Implementation:   A collection of Python libraries on top of NOX

15

Page 18: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Frenetic Queries

16

def  web_query():      return  (Select(sizes)  *                      Where(inport_fp(2)  &  srcport_fp(80))  *                      Every(30))  

1 2

Goal: measure total web traffic on port 2, every 30 seconds

Key Property: query semantics is independent of other program parts

Page 19: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Frenetic Forwarding Policies

17

1 2

Goal: implement a repeater switch

rules  =  [Rule(inport_fp(1),  [forward(2)]),                    Rule(inport_fp(2),  [forward(1)])]  

def  repeater():      return  (SwitchJoin()  >>  Lift(lambda  switch:  {switch:rules}))  

Key Property: Policy semantics independent of other queries/policies

Page 20: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Program Composition

18

def  main():      web_query()  >>  Print()      repeater()  >>  Register()  

Key Property: queries and policies compose

Goal: implement both web monitoring and repeater

def  host_query():      return  (Select(counts)  *                        Where(inport_fp(1)  *                      GroupBy([srcmac])  *                      Every(60))    def  secure(host_policy_stream):  ...  

def  main():      web_query()  >>  Print()   secure(Merge(host_query(),  repeater()))  >>  Register()  

Page 21: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

This Talk

OpenFlow & Nox in more depth   Existing programming model and problems

Frenetic Language   New abstractions for network programming

Frenetic Run-time System

  Implementation strategy and experience

Page 22: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Frenetic System Overview

High-level Language   Integrated query language   Effective support for

composition and reuse Run-time System   Interprets queries, policies   Installs rules   Tracks stats   Handles asynchronous events

19

Frenetic User Program

Frenetic Run-time System

NOX

query, register policy

query response, status streams

compile policies/ queries,

install rules

manage stats, !lter packets, process events

Page 23: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Run-time Activities

NOX

20

Check Rules

Install Flow

Policy Interpreter

Register

NOX

Frenetic Program

Frenetic Runtime System

Packet In

Frenetic Program NOX

Runtime Module Runtime Data Structure

Data$ow in to Runtime Data$ow out from Runtime

Check Subscribers

Query

Monitoring Loop Stats Request

Update Stats Stats In

Send Packet

Query Interpreter

Do Actions

Page 24: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Preliminary Evaluation

Core Network Applications   Learning Switch   Spanning Tree   Shortest path routing   DHCP server   Centralized ARP server   Generic load balancer

Additional Applications   Memcached query router   Network scan detector   DDOS defensive switch

Micro Benchmarks   Coded in Frenetic and NOX

21

Page 25: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

MicroBench: Lines of Code

0 20 40 60 80

100 120 140 160 180 200

HUB LSW HUB LSW HUB LSW

NOX Frenetic

23

No monitoring Heavy Hitters Web Statistics

Lines of

Code

Forwarding Policy: HUB: Floods out other ports LSW: Learning Switch

Monitoring Policy

Page 26: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

MicroBench: Controller Traffic

0

2

4

6

8

10

12

14

16

HUB LSW HUB LSW HUB LSW

NOX Frenetic

24

Traffic to

Controller (kB)

Forwarding Policy: HUB: Floods out other ports LSW: Learning Switch

Monitoring Policy

No monitoring Heavy Hitters Web Statistics

Page 27: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Ongoing and Future Work

Performance evaluation & optimization   Measure controller response time and network throughput   Wildcard rules and proactive rule installation   Support for parallelism

Program Analysis   Establish key invariants

Hosts and Services   Extend queries & controls to end hosts

More abstractions   Virtual network topologies   Network updates with improved semantics

25

Page 28: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Conclusion: An Analogy

26

Concern Assembly Languages Programming Languages x86 NOX Haskell/ML Frenetic++

Resource Allocation

Move values to/from registers

Install/ uninstall rules

on switches

Declare/use program variables

Construct/ register policy

Resource Tracking

Have I spilled that value?

Will that packet arrive

at the controller?

Program variables

always accessible

Queries can read every

packet

Coordination Unregulated calling

conventions

Unregulated rule

installation

Function calls managed

automatically

Policies managed

automatically

Portability Hardware Dependent

Hardware Dependent

Hardware Independent

Hardware Independent

Page 29: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

The Team

Mike Freedman

Chris Monsanto Jen Rexford

Rob Harrison

Dave Walker

Nate Foster

Alec Story

http://frenetic-lang.org

Page 30: A Network Programming Language - frenetic-lang.orgfrenetic-lang.org/publications/frenetic-icfp11-slides.pdf · Nate Foster, Mike Freedman, Rob Harrison, Chris Monsanto, Jen Rexford,

Implementation Options

Rule Granularity   micro$ow (exact header match)

– simpler; more rules generated   wildcard (multiple header match in single rule)

– more complex; fewer rules (may be) generated

Rule Installation   reactive (lazy)

–  !rst packet of each new $ow goes to controller   proactive (eager)

–  new rules pushed to switches

20

Frenetic 1.0

Frenetic 2.0