Washington WASHINGTON UNIVERSITY IN ST LOUIS The New MSR Plugin Download Environment.

Slides:



Advertisements
Similar presentations
CT213 – Computing system Organization
Advertisements

Memory.
Part IV: Memory Management
R4 Dynamically loading processes. Overview R4 is closely related to R3, much of what you have written for R3 applies to R4 In R3, we executed procedures.
Module R2 CS450. Next Week R1 is due next Friday ▫Bring manuals in a binder - make sure to have a cover page with group number, module, and date. You.
File Management Systems
Contiki A Lightweight and Flexible Operating System for Tiny Networked Sensors Presented by: Jeremy Schiff.
Inter Process Communication:  It is an essential aspect of process management. By allowing processes to communicate with each other: 1.We can synchronize.
Main Memory. Background Program must be brought (from disk) into memory and placed within a process for it to be run Main memory and registers are only.
03/05/2008CSCI 315 Operating Systems Design1 Memory Management Notice: The slides for this lecture have been largely based on those accompanying the textbook.
I/O Tanenbaum, ch. 5 p. 329 – 427 Silberschatz, ch. 13 p
Hacking the Bluetooth Pairing Authentication Process Graduate Operating System Mini Project Siyuan Jiang and Haipeng Cai.
System Calls 1.
CS 346 – Chapter 8 Main memory –Addressing –Swapping –Allocation and fragmentation –Paging –Segmentation Commitment –Please finish chapter 8.
Washington WASHINGTON UNIVERSITY IN ST LOUIS January 7, MSR Tutorial John DeHart Washington University, Applied Research Lab
Washington WASHINGTON UNIVERSITY IN ST LOUIS How to Implement the WaveVideo Plugin in an MSR Router.
Computer Architecture and Operating Systems CS 3230: Operating System Section Lecture OS-7 Memory Management (1) Department of Computer Science and Software.
Silberschatz, Galvin and Gagne ©2013 Operating System Concepts – 9 th Edition Chapter 8: Main Memory.
January 9, 2001 Router Plugins (Crossbow) 1 Washington WASHINGTON UNIVERSITY IN ST LOUIS NetBSD Kernel Topics: IP Processing mbuf structure Loadable Kernel.
Segmentation & O/S Input/Output Chapter 4 & 5 Tuesday, April 3, 2007.
LWIP TCP/IP Stack 김백규.
Chapter 2: Operating-System Structures. 2.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts Chapter 2: Operating-System Structures Operating.
Washington WASHINGTON UNIVERSITY IN ST LOUIS January 7, MSR Tutorial John DeHart Washington University, Applied Research Lab
8.4 paging Paging is a memory-management scheme that permits the physical address space of a process to be non-contiguous. The basic method for implementation.
Washington WASHINGTON UNIVERSITY IN ST LOUIS Packet Routing Within MSR Fred Kuhns
TCP : Transmission Control Protocol Computer Network System Sirak Kaewjamnong.
Washington WASHINGTON UNIVERSITY IN ST LOUIS The New MSR Plugin Download Environment.
CIS250 OPERATING SYSTEMS Memory Management Since we share memory, we need to manage it Memory manager only sees the address A program counter value indicates.
Washington WASHINGTON UNIVERSITY IN ST LOUIS June 17, 2002 MSR Tutorial MSR Tutorial: MSR_Config and the AAL5_Download Utilitiy John DeHart Washington.
January 9, 2001 Router Plugins (Crossbow) 1 Washington WASHINGTON UNIVERSITY IN ST LOUIS Router Plugins (Formerly Crossbow) A Software Architecture for.
Chapter 8 – Main Memory (Pgs ). Overview  Everything to do with memory is complicated by the fact that more than 1 program can be in memory.
Washington WASHINGTON UNIVERSITY IN ST LOUIS (SPC) Port-Level Processing: the MSR Kernel Fred Kuhns.
© Janice Regan, CMPT 300, May CMPT 300 Introduction to Operating Systems Memory: Relocation.
January 10, Kits Workshop 1 Washington WASHINGTON UNIVERSITY IN ST LOUIS A Smart Port Card Tutorial --- Software John DeHart Washington University.
Washington WASHINGTON UNIVERSITY IN ST LOUIS Fred Kuhns Applied Research Laboratory NSP packet Formats.
Washington WASHINGTON UNIVERSITY IN ST LOUIS CP and Full MSR Test Status.
June 2000 MSR Design 1 Washington WASHINGTON UNIVERSITY IN ST LOUIS The Washington University Active Network Software Framework John DeHart Washington.
Washington WASHINGTON UNIVERSITY IN ST LOUIS MSR Tutorial Exercises Group 3.
Processes and Virtual Memory
CSC414 “Introduction to UNIX/ Linux” Lecture 2. Schedule 1. Introduction to Unix/ Linux 2. Kernel Structure and Device Drivers. 3. System and Storage.
Field Programmable Port Extender (FPX) 1 NCHARGE: Remote Management of the Field Programmable Port Extender (FPX) Todd Sproull Washington University, Applied.
File Systems cs550 Operating Systems David Monismith.
CSCI 156: Lab 11 Paging. Our Simple Architecture Logical memory space for a process consists of 16 pages of 4k bytes each. Your program thinks it has.
January 9, 2001 Router Plugins (Crossbow) 1 Washington WASHINGTON UNIVERSITY IN ST LOUIS Exercises.
COMP091 – Operating Systems 1 Memory Management. Memory Management Terms Physical address –Actual address as seen by memory unit Logical address –Address.
Washington WASHINGTON UNIVERSITY IN ST LOUIS Packet Classification in the SPC arl/projects/msr/work/msrcfy.ppt.
Memory management The main purpose of a computer system is to execute programs. These programs, together with the data they access, must be in main memory.
Chapter 8: Memory Management. 8.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts Chapter 8: Memory Management Background Swapping Contiguous.
Introduction to Kernel
Introduction to Operating Systems
Processes and threads.
Chapter 11: File System Implementation
Chapter 8 Main Memory.
Program Execution in Linux
Software Development with uMPS
Design of a Diversified Router: Project Management
Operation System Program 4
Operating System Concepts
An NP-Based Router for the Open Network Lab Overview by JST
Main Memory Background Swapping Contiguous Allocation Paging
Memory Allocation CS 217.
Design of a Diversified Router: November 2006 Demonstration Plans
Implementing an OpenFlow Switch on the NetFPGA platform
Lecture Topics: 11/1 General Operating System Concepts Processes
Chapter 8: Memory Management strategies
The Router Plugins system architecture
Program Execution in Linux
CSE 542: Operating Systems
Chapter 13: I/O Systems “The two main jobs of a computer are I/O and [CPU] processing. In many cases, the main job is I/O, and the [CPU] processing is.
Presentation transcript:

Washington WASHINGTON UNIVERSITY IN ST LOUIS The New MSR Plugin Download Environment

2 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 First: The Old Way Compile plugin code on NetBSD Copy plugin directory onto File System destined for SPC Boot SPC Log in to SPC –requires user space and serial line or telnet access Use modload(1) on SPC to load plugin –links plugin against kernel in /netbsd on SPC Use modstat(1) on SPC to see list of loaded plugins

3 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 The New Way Compile plugin code on NetBSD Verify plugin has no undefined symbols –There is no link against running kernel anymore –msr_lkm.h provides macros to needed kernel fucntions and structures We can add more as we need them. Use pluginDownload utility from CP (Linux) to download plugin to SPC –Not sure I’ve even tried it on NetBSD… Use sendcmd utility from CP to configure plugin, filters, etc Use pluginStat utility from CP to view list of loaded plugins

4 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 pluginDownload Uses gnu binary utilities cross-linker –Runs on Linux, builds a NetBSD binary –Used to: prelink to get size information final link to relocate Uses new AAL5 control data channels to download plugin directly into kernel memory. –uses sendcmd API to: allocate kernel memory for plugin set up AAL5 data channel call plugin entry function to complete load operation Side Note: sendcmd API –should be expanded to include all of sendcmd, but right now we have about 15 “commands”.

5 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 The rest of the slides are old notes

6 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Plugin Loading Steps Compile Plugin code on NetBSD Do one of these two, currently Linux seems to work better for later steps: –Pre-link Plugin on NetBSD to get size info ready  ld -e example -T 0 -o pl_combined combined.o –Pre-link Plugin on Linux to get size info ready  ld-cross –o pl_combined.o –e _example –Ttext 0 combined.o

7 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Plugin Loading Steps On Linux CP: open file (pl_combined.o), get size information and allocate MSR/SPC memory for plugin  sendcmd –p # -c rp_pcu –s allocate –d -d -d sendcmd code in kernel calls msr_lkmiotcl(LMRESERV,, FWRITE) points to a (struct lmc_reserv) which passes in: –size = a_text + a_data + a_bss (all from a.out header) »but we don’t need to load the bss since it is all 0 –sym_size = a_syms + stb.st_size – N_STROFF(info_buf) »a_syms is symbol table size »string table is at the end so, the string table size is full file size (stb.st_size minus string tab offset) –sym_symsize = a_syms and returns: –address of block of memory allocated in kernel (resrvp->addr) –slot in lkm table (resrvp->slot) –address of symbols (resrvp->sym_addr) msr_lkmioctl() returns 0 if successful, non-zero if there was an error. –sendcmd will return Kernel address (PlAddr) for plugin to be loaded at Slot number Address of location of symbols (what do we use this for?) –This is used for adjusting the string table pointers before they are loaded (see modload.c for details) –useful command:  objdump

8 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Plugin Loading Steps (continued) On Linux CP: re-link plugin to relocate to PlAddr  ld-cross –o plugin –e _example –Ttext combined.o relocates to plAddr+0x20 and sets ‘_example’ as the entry point –the +0x20 is because we are currently downloading the a.out header –This sets the a_entry field in the a.out header of the file file plugin is now ready for downloading On Linux CP: request two data channels to MSR Kernel –One for plugin text and data:  sendcmd –p # -c dchan -s get -d -d –Another for the plugin symbols (sym_addr was returned by allocate command earlier)  sendcmd –p # -c dchan -s get -d -d –sendcmd returns the dchan# in its responses On Linux CP: download file plugin into MSR/SPC memory:  pluginDownload -f plugin –S -d -d -V -L –This needs to adjust the string table before downloading. Thus it needs the sym_addr which was returned by the allocate sendcmd above –text and data go to dchan#1 and symbol and string table to go dchan#2

9 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Plugin Loading Steps (continued) On Linux CP: Finish the loading of the plugin  sendcmd –p # -c rp_pcu –s load -d -d -d –I don’t think we actually need the PlAddr here. –I think in this command (or an earlier one) we do need to send the entry symbol address –We are also sending the amount of data sent for the plugin (size) and symbols (sym_size) the msr_lkm code will use these two values to update –curp->offset –curp->sym_offset –This sendcmd causes a call to msr_lkmioctl(LMREADY,, FWRITE) –We may also need to do some other stuff. See page of ioctl’s used by modload. On Linux CP: release the data channel  sendcmd –p # -c dchan -s release -d When all done with plugin: –On Linux CP: unload and deallocate the plugin  sendcmd –p # -c rp_pcu –s unload –d We should never have to use the LMLOADBUF and LMLOADSYMS cmds

10 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Data Transfer Options for the download phase, CP side: –hack up modload from NetBSD and build it on Linux modload uses ioctl’s to load the module into the local kernel we want to send AAL5 frames –modify Stage3 of AAL5_download Stage3 already processes NetBSD a.out files Need to do one of these: –change Stage3’s interaction with Stage2, i.e. have it not expect any acks –add a Stage2 like thing to the MSR kernel for accepting plugin frames –Merge modload and Stage3 modload does some manipulations to get the string table correct Stage3 has all the code to send AAL5 frames and wait for ACK/NACK Options for the downloading phase, MSR side: –Build a new AAL5 control data channel structure Uses AAL5 frame buffer pool that the IP fwding channels use Re-uses some of the frame processing code in kernel Arriving frames are copied into previously allocated memory associated with the data channel. –It would be nice if APIC descriptors pointed directly at the allocated memory, but that breaks the current model and would make it hard to build in safeguards against corruption.

11 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Data Transfer (continued) Vaddr Start of Virtual address block where data frames should go (32b) Length Length of block in bytes (32b) Next Addr Where next frame should go. Initially set to (32b) Seq # Next expected frame sequence number (first frame should be 1) (16b) Index(dchan#) DCHAN_MAX MSR Kernel Dchannel Table

12 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Data Transfer (continued) MSR Control Data Channel RATM AAL5 Frame Format (as it appears in the MSR Kernel) dchan#(8bits)seq# (16bits) framelength (16bits)pad (16bits) AAL5 Trailer (8 Bytes) AAL5 Frame Data (<= 1992 Bytes) Shim Reserved space (8 Bytes) 1992 B 2000 B 2016 B APIC Rx desc points here flags (8bits) flags: 1: Data 2: Ack 4: Nack

13 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 External Symbols in Plugin We will implement a structure to contain pointers to Kernel symbols that Plugins are allowed to use. –This structure will surely grow over time as we discover more kernel functions that we want to expose to Plugins When a plugin is loaded, it will be given the pointer to this structure in the kernel via the call to its entry function The plugin will therefore not need to link against the running kernel to resolve symbols. This strategy will achieve two goals: –Put bounds on what plugins can do in the kernel –Make the linking and downloading of plugins easier

14 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 External Symbols in Plugin (continued) Current kernel functions used in example plugin: –malloc related: free() –via FREE() macro from sys/malloc.h malloc() –via MALLOC() macro from sys/malloc.h –MSR Related: msr_printf() PCU Related: –pcu_deregister_class() –pcu_free_all_instances() –pcu_register_class() –LKM Related: lkm_nofunc() lkm_dispatch() –via DISPATCH() macro from sys/lkm.h lkm_exists()

15 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 The rest of the slides are supporting notes some from other places

16 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Data Transfer Options for the download phase, CP side: –hack up modload from NetBSD and build it on Linux modload uses ioctl’s to load the module into the local kernel we want to send AAL5 frames –modify Stage3 of AAL5_download Stage3 already processes NetBSD a.out files Need to do one of these: –change Stage3’s interaction with Stage2, i.e. have it not expect any acks –add a Stage2 like thing to the MSR kernel for accepting plugin frames Options for the downloading phase, MSR side: –When we get a request to load a plugin of size  sendcmd –p # -c rp_pcu –s allocate –d Allocate an APIC buffer of that size associate the plugin load descriptor with that buffer Tie the descriptor to the plugin load VCI Go –Once we have the plugin in the allocated buffer: in response to a  sendcmd –p # -c rp_pcu –s load –d -S “example use calls to lkmioctl() to do the rest

17 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Implementing modload in MSR Issues: –Where will we download plugin from? presumably just from the CP –Will the plugin on the CP already be pre-linked with the current MSR kernel? if not, we may have Linux vs. NetBSD problems. if so –how do we plan to keep plugins and MSR kernels in sync –how do we know the address where the plugin will go in the kernel –Dynamic scheme: allocate memory on demand in the kernel for a new plugin –Static scheme: predefined slots at predefined addresses in kernel Each plugin is built to fit in a specific slot at a predefined address Still need to resolve symbols with actual kernel –if we allow this at all…

18 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Implementing modload in MSR Option 1: Use sendcmd utility to execute modload on SPC –Download plugin binary to a file on MSR e.g. /var/run/rp/plugin/fileABC.o –and run modload e.g. modload –o /var/run/rp/plugin/fileABC.o –e example fileABC.o –Something like:  sendcmd –p # –c rp_pcu –s load –S “fileABC.o” –S “example” uses proposed new option –S for including strings causes file “fileABC.o” to be downloaded to MSR and loaded as kernel module named “example” –Requires presence on MSR file system of: /sbin/modload /usr/bin/ld up to date symbol version of kernel being executed

19 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Implementing modload in MSR Option 2: Prelink on CP, use sendcmd to download directly into memory –Link plugin against copy of kernel on CP  ld -A netbsd.MSR -e _ -o -T –Reserve Kernel memory:  sendcmd –p # –c rp_pcu –s allocate –d returns kernel load address –Relink at kernel load address (LA)  ld -A netbsd.MSR -e _ -o -T –Open relinked module and load it into kernel  sendcmd –p # –c rp_pcu –s load –S uses proposed new option –S for including a strings –Adjusting symbol table entry pointers and load it. What does this actually do in modload(1) –sync(); What does this actually do in modload(1) –Call the module’s entry function to test it. –Post-install if called for... ioctl(lkm_fd, LMSTAT,...)

20 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Implementing modload in MSR Option 3: Prelink on CP, Plugin must use kernel function pointer array to access predefined, limited number of kernel functions, then use sendcmd to download directly into memory –plugin code uses local pointer for function pointer array which will be reset later when kernel calls entry function –Reserve Kernel memory:  sendcmd –p # –c rp_pcu –s allocate –d returns kernel load address –Relink at kernel load address (LA)  ld -A netbsd.MSR -e _ -o -T –Open relinked module and load it into kernel  sendcmd –p # –c rp_pcu –s load –S uses proposed new option –S for including strings –Call the module’s entry function to test it. kernel will provide the actual location of the function pointer array –Post-install if called for... ioctl(lkm_fd, LMSTAT,...)

21 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Implementing modload in MSR (continued) Current ld commands issued by modload on NetBSD: –modload links it the first time so it can get size information:  ld -A /netbsd -e _example -o /var/run/msr/example -T 0 combined.o –modload links it the second time to resolve symbols and relocate:  ld -A /netbsd -e _example -o /var/run/msr/example -T combined.o Equivalent command on Linux: –First do this on NetBSD (‘pl_’ implies pre-linked)  ld -e _example -o pl_combined -T 0 combined.o –This is just for relocating, everything else should be done on NetBSD:  ld-cross –o plugin –e _example –Ttext 0x pl_combined.o –Linux and NetBSD seem to be off by 0x20 on their location of the text segment, still investigating that. –After this command, the file plugin should be ready for downloading

22 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 modload ioctl’s We need to know exactly what each of these does: –ioctl(LMRESERV) reserves kernel memory reserves lkm slot for module reserves kernel memory for the symbols –ioctl(LMLOADBUF) loads module into memory, uses and affects lkm struct curp –ioctl(LMLOADSYMS) loads symbol table into memory, uses and affects lkm struct curp –ioctl(LMLOADSYMS) loads string table into memory, uses and affects lkm struct curp –ioctl(LMREADY) if DDB is turned on, adds modules symbols to the DB symbol table clears modules BSS space calls entry procedure of module, uses and affects lkm struct curp –ioctl(LMSTAT) post install retrieval of stats from module –ioctl(LMUNRESRV) release slot for module if something goes wrong after LMRESERV.

23 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 (From Crossbow Tutorial) NetBSD Kernel Topics IP Processing mbuf structure Loadable Kernel Modules Interrupts Miscellaneous

24 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Loadable Kernel Modules Mechanism in NetBSD to dynamically load code into running kernel NetBSD System Utilities: –modload(8) –modunload(8) –modstat(8) Module Types supported: –System Call modules When unloaded, returns to original system call Any system call can be replace Take care when replacing ioctl(2) since LKM uses it to load/unload modules!! –Virtual File System modules –Device Driver modules: Block and character device drivers –Execution Interpreters: For binaries not normally usable by OS –Miscellaneous modules No defined interfaces Up to user/developer to provide hooks to get to the code This is what Router Plugins uses

25 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Loadable Kernel Modules: modload Open /dev/lkm –ioctl’s will be performed on the open file descriptor Prelink module, open it and calculate size info –system(“ld -A /netbsd -e _ -o -T ”); Reserve Kernel memory: –ioctl(lkm_fd, LMRESERV, size_info) –returns kernel load address Relink at kernel load address Open relinked module and load it into kernel –ioctl(lkm_fd, LMLOADBUF,...) Adjusting symbol table entry pointers and load it. sync(); Call the module’s entry function to test it. Post-install if called for... –ioctl(lkm_fd, LMSTAT,...)

26 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Overview (From MSR Tutorial) Introduction to hardware environment APIC core processing and buffer management Overview of SPC kernel software architecture and processing steps Plugin environment and filters Command Facility

27 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Packet Classification & Plugins Classification provides and opportunity to bind flows to registered plugin instances. General classifier - Network Management –classification using 5-tuple, Prefix match on address, exact match port and proto 0 is a wildcard for all fields –input and output ports –filters added/removed via the command facility

28 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Flow Bound to a Plugin... DQ/ In Queuing plugin Plugin Plugin Environment... DRR/ Out Queuing Flow Classifier/ (channel map) Route Lookup (Shim, FIPL, Simple, cache)... Frame/Buffer and IP Processing Ingress/ Egress ? NM Filter instance->handle_packet(instance, packet, flags) Call packet handler for bound instance with pointer to IP packet (struct ip *). AAL5 Frame Fragment offset VersionH-lenTOSTotal length Identificationflags TTLprotocolHeader checksum Source Address Destination Address Options ?? IP data (transport header and transport data) AAL5 padding ( bytes) CPCS-UU (0) Length (IP packet + LLC/SNAP) CRC Shim pkt (struct ip *) handle_packet(inst, pkt, flags) { /* Plugin may read and/or * modify content but not * delete it unless COPY. * On return the framework * forwards packet */... return;} Rule 1 Rule 2 Rule 3 Rule 4 Rule 5 Rule 6 Rule 7 Rule 8 Rule 9 Rule 10 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 Search Invoke instance handler General Match Classifier: Linear search of {src_addr, dst_addr, src_port, dst_port, proto}. General Classifier options: {First, Last, All} Rule Actions: {Deny, Permit, Active}. Rule flags {All, Copy, Stop} Send packet to exact match classifier Flow Table flow hash Instance 1 {Active} Flow entry to plugin has a one-to-one relationship. Exact Match Classifier: Hash {src_addr, dst_addr, src_port, dst_port}, then linear search for flow spec. Exact Match Classifier options: None. Rule Actions: {Deny, Permit, Active, Reserve}. Rule flags {Pinned, Idle, Remove} Exact Match: active processing same as general match. The AAL5 length is and IP header checksum are calculated so plugin does not have to perform these operations.

29 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Search Rule 1 Rule 2 Rule 3 Rule 4 Rule 5 Rule 6 Rule 7 Rule 8 Rule 9 Rule 10 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 i1i2i3i4i5 Invoke instance handler General Match Classifier: Linear search of {src_addr, dst_addr, src_port, dst_port, proto} General Classifier options: {First, Last, All} Rule Actions: {Deny, Permit, Active}. Rule flags {All, Copy, Stop} General Match Classifier Notes

30 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Flow Table flow hash Instance 1 {Active} Flow entry to plugin has a one-to-one relationship General Match Classifier: Linear search of - {src_addr, dst_addr, src_port, dst_port, proto}. Exact Match Classifier options: None. Rule Actions: {Deny, Permit, Active, Reserve}. Rule flags {Pinned, Idle, Remove} Exact Match Classifier Notes

31 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Instance 1 {Active} Instance 2 {Active, All} Instance 1 {Deny} Rule N General/Exact Match Classifier Class A “plugin x” Class B “plugin y” Class C “plugin z” Rule P Instance 1 {Active} Plugin instance maps to at most one rule/filter. General classifier: rule maps to at most 5 instances. Exact match classifier: rule maps to at most 1 instance. Active Processing Environment

32 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Creating an Instance Class A classid = 100 inst_t *create_instance(class_t *, inst_id) Instance of Class A - (Base Class extended by Developer) class_t*class inst_t*next inst_idid fid_tbound_fid void (*handle_packet) (inst_t *, ip_t *, flag32_t); void (*bind_instance) (inst_t *); void (*unbind_instance) (inst_t *); void (*free_instance) (inst_t *); int (*handle_msg) (inst_t *, buf_t *, flag8_t, seq_t, len_t *)... create class instance Return reference to instance create_instance() Called by PCU framework in response to receiving command. struct my_inst { inst_t base; subclass defs };

33 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Plugin Class Specific Interface All plugins belong to a class. At run time a class (i.e. plugin) must be instantiated before it vcan be referenced. Plugin is passed its instance pointer (like c++) as the first argument. Developer may extend the base class (struct rp_instance) to include additional fields which are local to each instance. Plugin developer must implement the following methods: –void(*handle_packet)(struct rp_instance *, struct ip *, u_int32_t); –void(*bind_instance)(struct rp_instance *); –void(*unbind_instance)(struct rp_instance *); –void(*free_instance)(struct rp_instance *); –int (*handle_msg)(struct rp_instance *, void *, u_int8_t, u_int8_t, u_int8_t);

34 Washington WASHINGTON UNIVERSITY IN ST LOUIS John DeHart - 10/9/2015 Plugin Framework Enhancements Integrated with Command framework –send command cells to PCU: create instance, free instance, bind instance to filter, unbind instance –Send command cells to particular plugin instances –Send command cells to plugin base class Enhanced interface to address limitation noticed in crossbow: –instance access to: plugin class, instance id, filter id –pcu reports describing any loaded classes, instances and filters