ONL NP Router Plugins Shakir James, Charlie Wiseman, Ken Wong, John DeHart {scj1, cgw1, kenw, jdd}@arl.wustl.edu.

Slides:



Advertisements
Similar presentations
Engineering Patrick Crowley, John DeHart, Mart Haitjema, Fred Kuhns, Jyoti Parwatikar, Ritun Patney, Jon Turner, Charlie Wiseman, Mike Wilson, Ken Wong,
Advertisements

Supercharging PlanetLab A High Performance,Multi-Alpplication,Overlay Network Platform Reviewed by YoungSoo Lee CSL.
1 SpaceWire Update NASA GSFC November 25, GSFC SpaceWire Status New Link core with split clock domains complete (Much faster) New Router core.
Senior Project with the SPP Michael Williamson. Communicating with a Slice Slice-RMP library using a Unix Domain Socket ◦ RPC-Like ◦ Slice application.
TCP/IP Protocol Suite 1 Chapter 11 Upon completion you will be able to: User Datagram Protocol Be able to explain process-to-process communication Know.
Shyamal Pandya Implementation of Network Processor Packet Filtering and Parameterization for Higher Performance Network Processors 1 Implementation of.
Paper Review Building a Robust Software-based Router Using Network Processors.
John DeHart ONL NP Router Block Design Review: Lookup (Part of the PLC Block)
David M. Zar Applied Research Laboratory Computer Science and Engineering Department ONL Stats Block.
PA3: Router Junxian (Jim) Huang EECS 489 W11 /
Jon Turner, John DeHart, Fred Kuhns Computer Science & Engineering Washington University Wide Area OpenFlow Demonstration.
Michael Wilson Block Design Review: ONL Header Format.
Patrick Crowley and Jon Turner and John DeHart, Mart Haitjema Fred Kuhns, Jyoti Parwatikar, Ritun Patney, Charlie Wiseman, Mike Wilson, Ken Wong, Dave.
1 - Charlie Wiseman - 05/11/07 Design Review: XScale Charlie Wiseman ONL NP Router.
Michael Wilson Block Design Review: Line Card Key Extract (Ingress and Egress)
David M. Zar Applied Research Laboratory Computer Science and Engineering Department ONL Freelist Manager.
1 - Charlie Wiseman, Shakir James - 05/11/07 Design Review: Plugin Framework Charlie Wiseman and Shakir James ONL.
John DeHart An NP-Based Router for the Open Network Lab Memory Map.
David M. Zar Block Design Review: PlanetLab Line Card Header Format.
1 - John DeHart, Jing Lu - 3/8/2016 SRAM ONL NP Router Rx (2 ME) HdrFmt (1 ME) Parse, Lookup, Copy (3 MEs) TCAM SRAM Mux (1 ME) Tx (1 ME) QM (1 ME) xScale.
Mart Haitjema Block Design Review: ONL NP Router Multiplexer (MUX)
1 COMP 431 Internet Services & Protocols The IP Internet Protocol Jasleen Kaur April 21, 2016.
John DeHart Netgames Plugin Issues. 2 - JDD - 6/13/2016 SRAM ONL NP Router Rx (2 ME) HdrFmt (1 ME) Parse, Lookup, Copy (3 MEs) TCAM SRAM Mux (1 ME) Tx.
Supercharged PlanetLab Platform, Control Overview
Flow Stats Module James Moscola September 12, 2007.
ONL NP Router xScale xScale TCAM SRAM Rx (2 ME) Mux (1 ME) Parse,
Chapter 6 Delivery & Forwarding of IP Packets
Design of a Diversified Router: TCAM Usage
An NP-Based Router for the Open Network Lab Design
An NP-Based Router for the Open Network Lab
Internet Control Message Protocol (ICMP)
An NP-Based Ethernet Switch for the Open Network Lab Design
Design of a Diversified Router: Packet Formats
ONL NP Router xScale xScale TCAM SRAM Rx (2 ME) Mux (1 ME) Parse,
SPP Version 1 Router NAT John DeHart.
Design of a Diversified Router: Common Router Framework
Design of a Diversified Router: Project Management
Internet Control Message Protocol (ICMP)
Design of a Diversified Router: Dedicated CRF for IPv4 Metarouter
techX and ONL Summer 2008 Plans
Internet Control Message Protocol (ICMP)
An NP-Based Router for the Open Network Lab
Design of a Diversified Router: IPv4 MR (Dedicated NP)
Flow Stats Module James Moscola September 6, 2007.
An NP-Based Router for the Open Network Lab Overview by JST
ONL Stats Engine David M. Zar Applied Research Laboratory Computer Science and Engineering Department.
Supercharged PlanetLab Platform, Control Overview
Next steps for SPP & ONL 2/6/2007
Network Core and QoS.
IXP Based Router for ONL: Architecture
An NP-Based Router for the Open Network Lab
An NP-Based Router for the Open Network Lab
QM Performance Analysis
Design of a Diversified Router: Project Assignments and Status Updates
SDK Demo/Tutorial John DeHart.
SPP Version 1 Router Traffic Examples
Design of a Diversified Router: Dedicated CRF plus IPv4 Metarouter
Design of a Diversified Router: November 2006 Demonstration Plans
Code Review for IPv4 Metarouter Header Format
Code Review for IPv4 Metarouter Header Format
An NP-Based Router for the Open Network Lab Meeting Notes
An NP-Based Router for the Open Network Lab Project Information
An NP-Based Router for the Open Network Lab Design
SPP Router Plans and Design
IXP Based Router for ONL: Architecture
ONL Plugin Exercises (Jan 2005)
Design of a High Performance PlanetLab Node: Line Card
Design of a Diversified Router: Project Management
Network Core and QoS.
Chapter 4: outline 4.1 Overview of Network layer data plane
Presentation transcript:

ONL NP Router Plugins Shakir James, Charlie Wiseman, Ken Wong, John DeHart {scj1, cgw1, kenw, jdd}@arl.wustl.edu

ONL NP Router xScale xScale SRAM TCAM SRAM Rx (2 ME) Mux (1 ME) Parse, Assoc. Data ZBT-SRAM xScale Small SRAM Ring Large SRAM Ring Scratch Ring SRAM TCAM LD Except Errors SRAM NN NN Ring 64KW Rx (2 ME) Mux (1 ME) Parse, Lookup, Copy (3 MEs) QM (1 ME) HdrFmt (1 ME) Tx (1 ME) NN 64KW xScale 64KW 64KW 64KW 64KW 64KW Plugin to XScale Ctrl,Update & RLI Msgs (1 Ring Per Plugin) 512W 512W 512W 512W 512W NN NN NN NN Plugin0 Plugin1 Plugin2 Plugin3 Plugin4 SRAM 512W 512W 512W 512W 512W Stats (1 ME) FreeList Mgr (1 ME) SRAM

Design Review: Plugins SRAM Ring XScale p0 p1 p2 p3 p4 Scratch Control path XScale  Plugins Data path Plugins  {Mux, QM} PLC Mux p0 p1 p2 p3 p4 QM Annother possiblity is plugins writing to the NN rings to each other. Possible to share data? This is generic pic / (std path) -> in reality on plugin can read/write to any SRAM ring

Outline Overview My first plugin My second plugin Framework internals Core plugins Conclusion

Overview Plugin Framework Base Plugin API handle_init_user() handle_pkt_user() handle_msg_user() handle_callback_user() constants macros functions API - Application Program Interface. A set of function for building plugins - the interface (calling conventions) define how a plugin accesses services provides by the framework + services such as: system initialization, packet handling, sending ctr messages to xscale, handling periodic events - user provides a level of abstraction for the plugin and the framework. The Standard Plugin Library is a collection of functions, constants, and macors that extends the uC language providing basic functionality to perform several tasks [wikipedia]: - packet operations: + forward, copy, drop, etc - common task: + get IP header, read/write stats, update stat counters Goal: Provide a simple API that “lowers the barrier” to entry for new IXP programmer.

My First Plugin Counter Increment a pkt counter and forward packet Plugin API include “plugin_api.h” plugin_init_user() {} // plugin initialization handle_pkt_user() {} // process packet handle_msg_user() {} // control msgs handle_callback_user() {} // periodic events Base Plugin

My First Plugin Counter Increment a pkt counter and forward packet include “plugin_api.h” … handle_pkt_user() // process packet { pcount_inc(0); // increment local counter }

My Second Plugin Stats Increment ICMP, UDP, and TCP counters } handle_pkt_user() // process packet { buf_handle = onl_api_get_buf_handle(); //get buf handle ipv4_hdr = onl_api_get_ipv4_hdr(buf_handle); // read IP Hdr from DRAM switch(ipv4_hdr.protocol) { case PROTO_ICMP: pcount_inc(0); break; }

Framework Internals Framework components Base Plugin Base Plugin Plugin API Base Plugin Dispatch loop: main() Plugin initialization: plugin_init() Packet processing: handle_pkt() Control messages: handle_msg() Callbacks: callback() Basic plugin structures 1 thread: only handling data 8 threads: all handling data 8 threads: 7 handling data, 1 handling control 8 threads: 6 handling data, 1 handling control, 1 handling time-outs

Framework Base Plugin: main() Dispatch loop: main() plugin_init() while (1) switch(_ctx()) case 0, 1, 2, 3, 4, 5: handle_packet(); case 6: callback(); case 7: handle_msg(); Preprocessor directives: FIRST_PACKET_THREAD=0 LAST_PACKET_THREAD=5 MESSAGE_THREAD=6 CALLBACK_THREAD=7 DL_ORDERED DL_ORDER ensures packet ordering (for writes… esp) - by defualt DL_ORDER should be defined else user will be confused if he sees out of order packets

Framework Base Plugin: plugin_init() Plugin initialization: plugin_init() … ONL plugin initialization … plugin_init_user(); // user hook ONL plugin initialization Local ME state (data/ctrl ring) PACKET_IN_RING_0, MESSAGE_IN_RING_0 User hook: plugin_init_user() default is stub E.g.: init vars, set timer, change (default) nextBlock

Framework Base Plugin: handle_pkt Packet processing: handle_packet() dl_source_packet(); default_format_out_data(); handle_pkt_user(); // user hook dl_sink_packet(); SRAM Ring Scratch PLC Mux p0 p1 p2 p3 p4 QM dl_source_packet(), dl_sink_packet() uses ME state (plugin_init) User hook: handle_pkt_user()

Framework Base Plugin: handle_msg() Control messages: handle_msg() SRAM Ring XScale p0 p1 p2 p3 p4 dl_source_message(); hande_msg_user(); //user hook dl_sink_message(); dl_source_message(), dl_sink_message() uses ME state (plugin_init) mutex_lock: multiple SRAM reads per msg possible Msg from Xscale or RLI -> configuration , control, and debug msgs User hook: handle_msg_user() Handle control msg from RLI Send configuration updates to XScale

Framework Base Plugin: callback() Callbacks: callback() sleep(timeout); handle_callback(); // user hook sleep() timeout in cycles (ME’s operate at 1.4 GHz) Override default timeout (1000) in plugin_init_user() User hook: handle_callback_user() Non-packet arrival driven processing: delay plugin

Framework Plugin API Framework components Plugin API: Base Plugin Constants Macros Functions Explain…

Plugin API functions -Current Stats - read/write stats counters ONL_API_PCOUNT_INC(int), plugin_cntr_inc(int, int) , … ONL_API_PCOUNT_ADD(int, int), plugin_cntr_add(int, int, int) Packet forwarding and dropping, onl_api_set_out_to_MUX() // set dlNextBlock onl_api_set_out_to_QM() // set dlNextBlock onl_api_drop() // drop packet Packet access/modification onl_api_get_buf_handle() // get next buffer handle onl_api_get_ipv4_hdr() // read pkt data from DRAM

Plugin API functions –Coming Soon Packet access/modification onl_api_get_udp_hdr() // read udp hdr from DRAM onl_api_get_tcp_hdr() // read tcp hdr from DRAM onl_api_get_icmp_hdr() // read icmp hdr from DRAM Allocate a new pkt Copy pkts Read Queue Length

Plugin API functions –Coming Later These will be added eventually (possibly as needed): Configuration reads get_queue_threshold get_queue_quantum Configuration updates add_filter add_route update_queue_threshold update_queue_quantum Queues of packets with-in the plugin Wrap intrinsic functions (Clock, CRC, local CAM access)

Core Plugins null count nstats Forward packets Increment pkt counter and forward pkt nstats Increment ICMP, UPD and TCP pkt counter Drop pkt

Conclusion Did we achieve our goal? What’s next? Provide a simple API that “lowers the barrier” to entry for new IXP programmer What’s next? Add Core Plugins dumphdr, multicast, stringSub, pdelay, dropdelay Expand Plugin API More functions based on course assignments Hardware Testing Inter-plugin communication?

TODO for cgw1,kenw,scj1 Control path Core Plugins multicast stringSub forward pkt copies to ports indicated by destination vector stringSub Replace all occurrence of the string “HELLO” with “adieu” pdelay delay pkt dropdelay delay pkt with probability m/n, and drop with probability (n-m)/n dumphdr Save IP header fields and transport header fields Return header fields through control msg