Tutorial agenda - The Fast Data Project

Tutorial agenda - The Fast Data Project

CICN Community Information-Centric Networking Tutorial at ACM SIGCOMM ICN, Berlin, Germany 26th of September 2017 1 Tutorial agenda Project overview Vector Packet Processing vICN: automation of virtual ICN network deployment The consumer/producer socket API with applications to HTTP 2 CICN project overview CCNx Internet documents are specified at the ICNRG define

the architecture. The rest is just software development, testing and experimentation. Focus on VPP and application development: Vector Packet Processing as the Universal Data Plane for vRouting and vSwitching vICN automation of virtual networks deployment The Consumer/Producer Socket API and HTTP 3 What is FD.io (pronounced fido)? 4 FD.io: The Universal Dataplane Project at Linux Foundation Multi-party Multi-project

Software Dataplane High throughput Low Latency Feature Rich Resource Efficient Bare Metal/VM/Container Multiplatform Fd.io Scope: Network IO - NIC/vNIC <-> cores/threads Packet Processing Classify/Transform/Prioritize/

Forward/Terminate Dataplane Management Agents - ControlPlane Bare Bare Metal/VM/Container Metal/VM/Container Dataplane Management Agent Packet Processing Network IO 5 Fd.io in the overall stack Application Layer/App Server Orchestration vICN Network Controller

Data Plane Services Dataplane Management Agent Packet Processing Network IO Operation System Hardware 6 Multiparty: Broad Membership Service Providers Network Vendors Chip Vendors

Integrators 7 Multiparty: Broad Contribution Qiniu Yandex Universitat Politcnica de Catalunya (UPC) 8 Code Activity In the period since its inception, fd.io has more commits than OVS and DPDK combined, and more contributors than OVS 2016-02-11 to 2017-04-03

Fd.io OVS DPDK Commits Contributors Organizations 6283 163 42 2395 146 52 3289

245 78 Commits 7000 6000 5000 4000 3000 2000 1000 0 Contributors 300 250 200 150 100

50 Commits fd.io OVS DPDK 0 Contributors fd.io OVS DPDK Organizations

80 70 60 50 40 30 20 10 0 Organizations fd.io OVS DPDK 9 Multiproject: Fd.io Projects

Dataplane Management Agent vICN hc2vpp Testing/Support Honeycomb CSIT puppet-fdio Packet Processing ICNET CICN ONE odp4vpp TLDK VPP Sandbox

trex VPP Network IO deb_dpdk rpm_dpdk 10 Fd.io Integrations Openstack Neutron Control Control Plane

Plane Integration work done at Fd.io Plugin GBP app Lispflowmapping app LISP Mapping Protocol Data Data Plane Plane ODL

Plugin VBD app SFC Netconf/Yang Netconf/yang Honeycomb REST Fd.io ML2 Agent VPP 11

Continuous Quality, Performance, Usability Built into the development process patch by patch Submit Build/Unit Testing 120 Tests/Patch Build binary packaging for Ubuntu 14.04 Ubuntu 16.04 Centos 7 Automated Style Checking Unit test : IPv6 IPFIX IP Multicast BFD L2 FIB Classifier

L2 Bridge Domain DHCP MPLS FIB SNAT GRE SPAN IPv4 VXLAN IPv4 IRB IPv4 multi-VRF Automated Verify Code Review System Functional Testing 252 Tests/Patch

DHCP Client and Proxy GRE Overlay Tunnels L2BD Ethernet Switching L2 Cross Connect Ethernet Switching LISP Overlay Tunnels IPv4-in-IPv6 Softwire Tunnels Cop Address Security IPSec IPv6 Routing NS/ND, RA, ICMPv6 uRPF Security Tap Interface Telemetry IPFIX and Span VRF Routed Forwarding iACL Security Ingress IPv6/IPv6/Mac IPv4 Routing QoS Policer Metering VLAN Tag Translation VXLAN Overlay Tunnels

Merge Performance Testing 144 Tests/Patch, 841 Tests L2 Cross Connect L2 Bridging IPv4 Routing IPv6 Routing IPv4 Scale 20k,200k,2M FIB Entries IPv4 Scale - 20k,200k,2M FIB Entries VM with vhost-userr PHYS-VPP-VM-VPP-PHYS L2 Cross Connect/Bridge VXLAN w/L2 Bridge Domain IPv4 Routing COP IPv4/IPv6 whiteless iACL ingress IPv4/IPv6 ACLs LISP IPv4-o-IPv6/IPv6-o-IPv4 VXLAN

QoS Policer L2 Cross over L2 Bridging Publish Artifacts Usability Merge-by-merge: apt installable deb packaging yum installable rpm packaging autogenerated code documentation autogenerated cli documentation Per release: autogenerated testing reports report perf improvements Puppet modules Training/Tutorial videos Hands-on-usecase documentation

Merge-by-merge packaging feeds Downstream consumer CI pipelines 12 Run on real hardware in fd.io Performance Lab Universal Dataplane: Infrastructure Bare Metal Cloud/NFVi Container Infra Server Server Server VM

VM VM Con Con FD.io FD.io FD.io Kernel/Hypervisor Kernel/Hypervisor

Kernel Con 13 Universal Dataplane: VNFs FD.io based VNFs FD.io based VNFs Server Server VM VM FD.io

FD.io Con Con FD.io FD.io FD.io FD.io Kernel/Hypervisor Kernel/Hypervisor 14

Universal Dataplane: Embedded Embedded Device SmartNic Device Server Kernel/Hypervisor FD.io SmartNic FD.io Kernel/Hypervisor Hw Accel

Hw Accel 15 Universal Dataplane: CICN Example Physical CICN router CICN in a VM CICN in a Container Device Server Server VM

VM FD.io FD.io docker FD.io LXC FD.io FD.io FD.io FD.io Kernel/Hypervisor Hw Accel

Kernel/Hypervisor Kernel/Hypervisor 16 Universal Dataplane: communication/API Consumer/Producer Socket API Server LXC LXD app Socket API

LXC FD.io MEMIF Segmentation/Naming Manifest management Reassembly Flow and Congestion Control VCL FD.io AF-PACKET Kernel/Hypervisor DPDK

Existing drivers for links DPDK AF-PACKET MEMIF (SHARED MEMORY) Nic 17 What is Vector Packet Processing? An open-source software that provides out-of-the-box production quality switch/router functionality running under commodity CPUs High Throughput

14+ Mpps per core Multiplatform Feature rich L2, L3, L4, local and remote programmability Modular and Extensible Through plugins Bare Metal/VM/Container Data Plane Management Agent Packet Processing Network IO Why VPP? NFV goals Software flexibility without giving up to hardware level performance

What about existing solutions? Linux Kernel Too slow for high throughput Evolve slowly Click In principle similar to VPP, no V(ector) CICN distribution Core libraries Consumer/Producer Socket API, CCNx libs, PARC C libraries Server and Router VPP cicn plugin for Ubuntu 16, CentOS 7 HTTP video server, Apache Traffic Server Plugin coming soon Client

Metis Forwarder VIPER MPEG-DASH video player Android 7/8, MacOS X 10.12, iOS 10/11, Ubuntu 16, CentOS 7 Soon Apple Store and Google Play vICN intent-based networking model driven programmable framework monitoring and streaming for BigData support (PNDA.io) 20 Opportunities to Contribute We invite you to Participate in fd.io Forwarding strategies Mobility management

Get the Code, Build the Code, Run the C ode, install from binaries Hardware Accelerators from binary packages vICN, configuration/management/control Read/Watch the Tutorials Consumer/Producer Socket API Join the Mailing Lists Reliable Transport Join the IRC Channels

Instrumentation tools Explore the wiki HTTP integration Join fd.io as a member https://wiki.fd.io/view/cicn https://wiki.fd.io/view/vicn https://fd.io/ 21 22 Vector Packet Processing for ICN Alberto Compagno

Tutorial at ACM SIGCOMM ICN, Berlin, Germany 26th of September 2017 How does VPP work? Packet vector VPP is a packet processing graph Nodes are Small Loosely coupled dpdk-input arp-input

mpls-input ip6-input ip6-lookup VPP processes vectors of packets Passed from node to node netmap-input ip6-rewrite ip6-local ip4-input

How does VPP work? Each node has its vector(s) Packets are passed from vector to vector dpdk-input Packet vector netmap-input arp-input mpls-input ip6-input

Packet vector Packet vector ip6-lookup ip6-rewrite ip4-input ip6-local Packet vector How does VPP work?

Packet vector dpdk-input Three types of nodes netmap-input Input arp-input mpls-input ip6-input

Internal ip6-lookup Process ip6-rewrite ip6-local ip4-input How does VPP work? Packet vector Input nodes

dpdk-input netmap-input Read packets from RX buffer Create the packet vector arp-input mpls-input ip6-input Internal nodes Process packets Called from other nodes Can be leaf (drop or TX)

ip6-lookup ip6-rewrite ip6-local ip4-input How does VPP work? Packet vector Process nodes Not part of the processing graph Run in background React to timer/event

dpdk-input netmap-input arp-input mpls-input ip6-input ip6-lookup ip6-rewrite ip6-local ip4-input

Extend VPP with plugins? Packet vector new-input dpdk-input netmap-input Plugins are first class citizen They can: arp-input mpls-input

ip6-input Add nodes Add api Rearrange the graph ip4-input ip6-lookup icn-forwarder ip6-rewrite ip6-local How does VPP accelerate packet processing? Accelerating packet processing Kernel bypass

Code Design (Multi-loop, Branch prediction, Function flattening, Lock-free structures, Numa aware) Reduce cache misses Reduce cache misses Why? 14 Mpps on 3.5GHz CPU = 250 cycles/packet Cache hit: ~2-30 cycles Cache miss (main memory) ~140 cycles Reduce cache misses Packets ip6-input ip6-lookupip6-rewrite Main memory

Expensive I-cache D-cache Processor Reduce cache misses I-cache Lets compare scalar processing with vector processing Packets ip6-input ip6-lookupip6-rewrite Main memory Expensive I-cache

D-cache Processor Scalar Packet Processing Process one packet at a time Packets ip6-input ip6-lookupip6-rewrite Main memory I-cache D-cache Processor Scalar Packet Processing

Process one packet at a time Packets ip6-input ip6-lookupip6-rewrite Main memory miss miss I cache ip6-input D-cache Processor Scalar Packet Processing

Process one packet at a time Packets ip6-input ip6-lookupip6-rewrite Main memory miss ip6-lookup I cache D-cache Processor Scalar Packet Processing Process one packet at a time Packets

ip6-input ip6-lookupip6-rewrite Main memory miss I cache ip6-rewrite D-cache Processor Scalar Packet Processing Process one packet at a time Packets ip6-input ip6-lookupip6-rewrite

Main memory miss miss I cache ip6-input D-cache Processor Scalar Packet Processing Process one packet at a time Many I-cache misses per

packet Main memory Packets ip6-input ip6-lookupip6-rewrite miss ip6-lookup I cache D-cache Processor Vector Packet Processing Every node process the full packet vector Packets ip6-input ip6-lookupip6-rewrite

Main memory I-cache D-cache Processor Vector Packet Processing Every node process the full packet vector Packets ip6-input ip6-lookupip6-rewrite Main memory

miss miss I cache ip6-input D-cache Processor Vector Packet Processing Every node process the full packet vector Packets ip6-input ip6-lookupip6-rewrite Main memory

miss I cache ip6-input D-cache Processor Vector Packet Processing Every node process the full packet vector Packets ip6-input ip6-lookupip6-rewrite Main memory miss

I cache ip6-input D-cache Processor Vector Packet Processing Every node process the full packet vector Processing the full vector amortizes the cost Packets of the first I-cache miss Main memory ip6-input ip6-lookupip6-rewrite at the cost of increasing D-cache misses miss I cache

ip6-input D-cache Processor Reduce cache miss D-cache VPP pre-fetches data into D-cache Packets ip6-input ip6-lookupip6-rewrite Main memory Expensive I-cache D-cache Processor

Reduce cache miss D-cache Example: Processing packet 1 & 2 VPP node pseudocode Might have a cache miss for packet 1 & 2 Packets ip6-input ip6-lookup Main memory ip6-rewrite 1 2 3 4 5 while packets in vector while 4 or more packets PREFETCH #3 and #4

PROCESS #1 and #2 ip6-input I-cache 1 2 3 4 D-cache while any packets Processor Reduce cache miss D-cache Example: Processing packet 3 & 4 The cost of the first D-cache miss is amortized VPP node code snippet

hit! by theCache subsequent D-cache hits. Packets ip6-input ip6-lookup Main memory ip6-rewrite 1 2 3 4 5 while packets in vector while 4 or more packets PREFETCH #5 and #6 PROCESS #3 and #4

ip6-input I-cache 5 6 3 4 D-cache while any packets Processor Hands on VPP! VPP documentation Wiki https://wiki.fd.io/view/VPP Doxygen https://docs.fd.io/vpp/17.04/

Download VPP (v17.04) Clone the source code from git git clone https://gerrit.fd.io/r/vpp Or install it from .deb pkg (rpm for Centos available too) see wiki Configure and Start VPP VPP configuration file # emacs /etc/vpp/startup.conf Start vpp # sudo vpp -c /etc/vpp/startup.conf VPP Command Line Interface To start a shell: # vppctl To run one command: # vppctl

VPP Command Line Interface A bunch of useful commands: ? show set Create your own plugin Outline VPP structures Design & Implement your node(s) Insert your node(s) in the vlib_graph Compile and install your plugin VPP structures vlib_buffer_t The vector of packets is called FRAME .

u8 data[0]; Each element is called VECTOR A vector is an index to a vlib_buffer_t Memory holding vlib_buffer_t objects Pointer to packet data (DMA memory) Outline VPP structures Design & Implement your node(s) Inserting your node(s) in the vlib_graph Compiling and installing your plugin Design & Implement your node(s) Your node should follow VPP style

Multi-loop, Branch prediction, Function flattening, Lock-free structures A node must implement a processing function that Moves vectors from your nodes frame to the next nodes frame Processes packets as YOU want Add whatever else you need Supporting Functions, macros, variables, etc.. (C code) Register your node(s) to VPP Each node must be registered to VPP through VLIB_REGISTER_NODE macro Example: Cicn plugin Node processing function Name of the node Runtime structure You need to initialize it by yourself Type of node

Next nodes in the Vpp graph Lets take a look to icnfwd_node_fn icnfwd node from icnfwd n_left_from to_next error ip4-lookup

n_left_to_next next_index next0=? Hold the actual next node id icnfwd node vlib_buffer_t objects b0 from icnfwd

bi0= n_left_from to_next error ip4-lookup n_left_to_next next_index next0=? icnfwd node

vlib_buffer_t objects b0 from icnfwd bi0= n_left_from to_next error ip4-lookup

n_left_to_next next_index next0=? Wrong speculation vlib_buffer_t objects b0 from icnfwd bi0=

n_left_from to_next error ip4-lookup n_left_to_next to_next next_index next0=? n_left_to_next

Example: Cicn plugin Errors handling (counters) Other important macros VPP_INIT_FUNCTION Function that is called during VPP initialization VPP_REGISTER_PLUGIN Required to guarantee that your plugin is actually a VPP plugin and not a library copied by mistake in /usr/lib/vpp_plugins Outline VPP structures Design & Implement your node(s) Insert your node(s) in the vlib_graph Compile and install your plugin Insert your node to VPP graph

1. direct all the packets from one interface vnet_hw_interface_rx_redirect_to_node (vnet_main, hw_if_index, my_graph_node.index /* redirect to my_graph_node */); 2. capture packets with a particular ethertype ethernet_register_input_type (vm, ETHERNET_TYPE_CDP, cdp_input_node.index); 3. for-us packet for new protocol on top of IP ip4_register_protocol (IP_PROTOCOL_GRE, gre_input_node.index); Insert your node to VPP graph 4. ip-for-us packet sent to a specific UDP port udp_register_dst_port (vm, UDP_DST_PORT_vxlan, vxlan_input_node.index, 1 /* is_ip4 */); 5. direct all packets from one ip prefix Create your own Data Path Object (i.e. result of a FIB lookup)

Outline VPP structures Design & Implement your node(s) Insert your node(s) in the vlib_graph Compile and install your plugin Compiling your plugin VPP provides Automake/Autoconf examples Install vpp-dev and move to /usr/share/doc/vpp/examples Adapting Makefile.am and sample.am is trivial Compile cicn-plugin: vICN: configuration, management and control of an virtual ICN network Marcel Enguehard ACM ICN Conference CICN tutorial September 26th 2017

What is vICN Unified framework for network deployment, management and monitoring Integrates all the tools of the CICN fd.io suite Provides an API to easily to bootstrap ICN deployments and get meaningful telemetry out of it I want to deploy and monitor a network model vICN at a glance User intent I know how things work

vICN Resource description I have some infrastructure you can use Infrastructure description Example vICN topology Linux Containers Cons Relay consumer

forwarder veth veth Prod producer forwarder veth veth veth forwarder veth Data plane veth

Control plane Bridge vICN resources Class Virtual representation of deployment element Node, forwarder, application, link, etc. Described by attributes

Members Example resource: forwarder Represents an ICN forwarder Attributes: node cache_size cache_policy (e.g., LRU) log_file etc. Resource hierarchy

How does it work? Intent based-framework cons = LxcContainer() prod = LxcContainer() link = Link(src=cons, dst=prod) Object-based model State reconciliation between model and deployment tasks cons monitoring prod

vICN functionalities Multithreaded deployment of network models SDN controller for IPv4, IPv6, and ICN Wireless links emulation Connection of real devices Built-in monitoring through Python model Our example deployment cons core1 core2 prod Network model deployment

Network model declaration JSON file containing list of resources Resources complemented with key attributes Intent-based declaration: descriptive approach (not imperative) Physical resources { "type": "Physical", "name": "server", "hostname": "localhost" }, { "type": "LxcImage", "name": "cicn-image", "node": "server", "image": "ubuntu1604-cicnsuite-rc3" }

Nodes { Virtual topology References to previous resources { "type" : "LxcContainer", "image": "cicn-image", "name" : "cons", "groups": [ "virtual" ], "node" : "server" }, {

"type" : "LxcContainer", "image": "cicn-image", "name" : "core1", "groups": [ "virtual" ], "node" : "server" }, { "type" : "LxcContainer", "image": "cicn-image", "name" : "prod", "groups": [ "virtual" ], "node" : "server" }, "type" : "LxcContainer", "image": "cicn-image", "name" : "core2", "groups": [ "virtual" ],

"node" : "server" }, Links { "type": "Link", "src_node": "cons", "dst_node": "core1", "groups": [ "virtual" ] }, { "type": "Link", "src_node": "core1", "dst_node": "core2", "groups": [ "virtual" ] }, { "type": "Link", "src_node": "core2",

"dst_node": "prod", "groups": [ "virtual" ] }, IP networking on topology { "type": "CentralIP", "ip4_data_prefix": "192.168.19.0/24", "ip6_data_prefix": "9001::/16", "ip_routing_strategy": "spt", "groups": [ "virtual" Defines ] } IPv6 addresses are attributed by /64

objects on which to act CentralIP is similar to an SDN controller that assigns addresses and sets up the routing in the network: CentralIP = (Ipv4Assignment | Ipv6Assignment) > IPRoutes ICN forwarders { { "type": "MetisForwarder", "cache_size": 0, "node": "cons" "type": "WebServer", "prefixes": [ "/webserver" ], "node": "prod"

}, { "type": "MetisForwarder", "cache_size": 2000, "node": "core1" }, { "type": "MetisForwarder", "cache_size": 0, "node": "core2" } "type": "CentralICN", "groups": [ "virtual" ], "face_protocol": "udp4"

}, { }, { "type": "MetisForwarder", "cache_size": 0, "node": "prod" }, Like CentralIP ether, udp4, udp6, tcp4, tcp6 GUI { "type": "GUI",

"groups": ["virtual"] }, Launching vicn [email protected]:~/vicn$ sudo vicn/bin/vicn.py -s examples/tutorial/tutorial06acm-icn17.json [] 2017-09-21 17:48:15,023 - vicn.core.task - INFO - Scheduling task > for resource 2017-09-21 17:48:15,024 - vicn.core.resource_mgr - INFO - Resource is marked as CLEAN (99/104) 2017-09-21 17:48:15,146 - vicn.core.task - INFO - Scheduling task > for resource 2017-09-21 17:48:15,148 - vicn.core.resource_mgr - INFO - Resource is marked as CLEAN (100/104) Traffic creation Producer setup: producer-test Consumer setup

consumer-test producer-test -D ccnx:/webserver consumer-test -D ccnx:/webserver Webserver iget http-server -p $server_folder -l http://webserver iget http://webserver/$filename Traffic visualization on the GUI Network teardown [email protected]:~/vicn$ sudo ./scripts/topo_cleanup.sh

examples/tutorial/tutorial06-acm-icn17.json wifi_emulator: no process found lte_emulator: no process found kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] Removing bridge... Removing interface... Removing stale routes VPP in vICN Objective: learn to setup vICN to use your Intel interfaces VPP running in container Uses DPDK and ZC-forwarding Setup

VPP cons DPDK-compatible interfaces core1 core2 enp0s9 enp0s10 prod Identifying the DPDK interfaces

Compare: sudo lshw -c network -businfo with http://dpdk.org/doc/nics Declaring the DPDK Interfaces { { "type": "DpdkDevice", "name": "core1-dpdk1", "mac_address": "08:00:27:44:9a:38", "node": "core1", "device_name": "enp0s9", "pci_address": "0000:00:09.0" }, "type": "DpdkDevice", "name": "core2-dpdk1",

"mac_address": "08:00:27:18:42:f2", "node": "core2", "device_name": "enp0s10", "pci_address": "0000:00:0a.0" }, { "type": "PhyLink", "src": "core1-dpdk1", "dst": "core2-dpdk1", "groups": [ "virtual" ] Changes to resources }, { { "type": "Link", "src_node": "core1",

"dst_node": "core2", "groups": [ "virtual" ] }, { "type": "MetisForwarder", "cache_size": 2000, "node": "core1" }, { "type": "MetisForwarder", "cache_size": 0, "node": "core2" }, "type": "VPP", "node": "core1", "name": "vpp_core1" }, {

"type": "CICNPlugin", "node": "core1", "name": "vpp-fwd" }, { "type": "VPP", "node": "core2", "name": "vpp_core2" }, { "type": "CICNPlugin", "node": "core1", "name": "vpp-fwd" }, What is vICN actually doing? VPP-ready host

Install (if necessary) the DPDK driver and load it in the host kernel Change driver for DPDK-compatible devices Change number of hugepages for VPP VPP-ready container Create a privileged container by changing its apparmor profile Add DPDK-enabled interfaces to the container What is vICN actually doing? (contd)

Start VPP on the container Create configuration file for VPP in the container Start VPP Set up IP forwarding Start CICN plugin in VPP Enable CICN plugin Set up ICN faces and routes

Launching vicn [email protected]:~/vicn$ sudo vicn/bin/vicn.py -s examples/tutorial/tutorial06acm-icn17-vpp.json [] 2017-09-21 17:48:15,023 - vicn.core.task - INFO - Scheduling task > for resource 2017-09-21 17:48:15,024 - vicn.core.resource_mgr - INFO - Resource is marked as CLEAN (99/104) 2017-09-21 17:48:15,146 - vicn.core.task - INFO - Scheduling task > for resource 2017-09-21 17:48:15,148 - vicn.core.resource_mgr - INFO - Resource is marked as CLEAN (100/104) Traffic creation Producer setup: producer-test Consumer setup consumer-test producer-test -D ccnx:/webserver

consumer-test -D ccnx:/webserver Webserver iget http-server -p $server_folder -l http://webserver iget http://webserver/$filename Traffic visualization on the GUI Toward a new Python API Use python objects instead of static JSON file cons = LxcContainer()

prod = LxcContainer() link = Link(src=cons, dst=prod) tasks cons monitoring prod More on vICN Demonstration session: new dynamic python API Thursday 10:50am: vICN paper presentation

Available tutorials In examples/tutorial/: tutorial01.json Simple topology tutorial02-dumbell VPP tutorial03-hetnets.json Wireless emulators tutorial06-acm-icn17* Todays tutorial (soon) https://wiki.fd.io/view/Vicn#Tutorials_overview References vICN wiki: https://wiki.fd.io/View/Vicn vICN paper: http://

conferences.sigcomm.org/acm-icn/2017/proceedings/icn17-26.p df vICN code: git clone -b vicn/master https://gerrit.fd.io/r/cicn vicn Libicnet: transport layer library for ICN Mauro Sardara Tutorial at ACM SIGCOMM ICN, Berlin, Germany 26th of September 2017 What is Libicnet? Library implementing a transport layer and exposing socket API to applications willing to communicate through an ICN protocol stack Relieves applications from the task of managing layer 4 problems, such as segmentation and congestion control Enhances the separation between Application Data Unit (ADU) and Protocol Data Unit (PDU) processing

Core Elements ProducerSocket ADU Segmentation and Naming Layer 4 PDU (ICN Content Object) L4 PDU Signature L4 PDU Publication ConsumerSocket Congestion control L4 PDU Fetching Signature verification L4 PDU reassembly ADU ProducerSocket ProducerSocket

Segmentation + Naming Signature Publication Produce(Name) Application ADU ProducerSocket ProducerSocket Segmentation + Naming Signature Publication

Produce(Name) ADU Application ProducerSocket ProducerSocket Application Produce(Name) Segmentation + Naming PDU = ICN Content Object PDU PDU

PDU Signature ICN Name + Signature Publication PDU = ADU ProducerSocket ProducerSocket Segmentation + Naming Signature

PDU Publication PDU PDU Produce(Name) Application ProducerSocket ProducerSocket Produce() Segmentation + Naming

Signature Interest Publication PDU PDU PDU Content Object Application ProducerSocket Signature The application has to provide the library with the information for signing the content objects

Signing every content object is computationally expensive: we provide support for manifest CO1 Signed Manifest ContentObject1Hash ContentObject2hash ContentObject3Hash .. CO2 CO3 ConsumerSocket ConsumerSocket Congestion Control

Signature verification PDU Reassembly Consume(Name) Application ConsumerSocket ConsumerSocket Interest Content Object Congestion Control PDU PDU

Signature verification PDU Reassembly PDU Consume(Name) Application ConsumerSocket ConsumerSocket Interest Congestion Control Content Object Signature verification PDU

PDU PDU Reassembly PDU Consume(Name) Application ConsumerSocket ConsumerSocket Interest Congestion Control Content Object Signature verification

PDU Reassembly ADU Consume(Name) Application ConsumerSocket ConsumerSocket Interest Congestion Control Content Object Signature verification PDU Reassembly

Consume(Name) Application ADU ConsumerSocket Congestion Control Application can choose among a set of algorithms: VEGAS, RAAQM 1, FIXED_WINDOW Extension with new algorithms possible Signature The application has to provide the library with the information for verifying the signature of the received content objects As the producer case, verifying every content object is expensive: we verify just the manifest signature G. Carofiglio et al. "Multipath congestion control in content-centric networks, 2013 IEEE Conference on Computer Communications Workshops (INFOCOM WKSHPS) 1

Hands on Libicnet! Where to find Libicnet? Wiki page https://wiki.fd.io/view/Libicnet Code https://git.fd.io/cicn/log/?h=libicnet/master Hello World Applications We will see how building two trivial applications against Libicnet: Hello world Producer It will produce a content of a certain size Hello world Consumer It will pull the content published by the producer

Topology Metis Forwarder Hello World Consumer Hello World Producer Hello World Producer #include Routable Name n("ccnx://helloworld");

prefix ProducerSocket p_(n); Naming, Segmentation, Signature, Publication std::string content(10000, 'A'); p_.produce(n, (uint8_t *)content.data(), content.size()); p_.attach(); p_.serveForever(); Local face forwarder-producer establishment Hello World Consumer Congestion #include

Consumer c_(Name(), TransportProtocolAlgorithms::RAAQM); c_.setSocketOption(GeneralTransportOptions::INTEREST_LIFETIME, 1001); c_.setSocketOption(GeneralTransportOptions::MAX_INTEREST_RETX, 25); control algorithm c_.setSocketOption(ConsumerCallbacksOptions::CONTENT_RETRIEVED, (ConsumerContentCallback) std::bind(&processContent, std::placeholders::_1, std::placeholders::_2)); Name name("ccnx://helloworld"); c_.consume(name); Content Pull + Signature Verification + Reassembly Callback called after whole ADU will be pulled

and reassembled Callbacks The application can register into the library a set of callback allowing to directly handle events during the download/publication. Advanced Example: HTTP support HTTP Client HTTP request HTTP Server reply libicnet locator = getlocator() name = resourceName()

recv(name) Send Buffer Data Interest Manifest Interest Network (ICN) reply request libicnet locator = getlocator()

name = resourceName() send(locator) Producer Socket HTTP send(name) Recv Buffer Send Buffer Consumer Socket Producer

Socket Interest Data Data recv(locator) Recv Buffer Interest Manifest Interest Consumer Socket Interest

Data Network (ICN) 132 Thank You!

Recently Viewed Presentations

  • Chapter 1 - Colliding Worlds (1450-1600)

    Chapter 1 - Colliding Worlds (1450-1600)

    1. Columbus and the Caribbean-Genoese mariner . Christopher Columbus . lobbies for 6 years to gain sponsorship of a voyage west across Atlantic Ocean to reach Asia-Aug 1492 CE - Columbus leaves with 3 Spanish ships on 6 week journey;...
  • From GPS to Maps and Beyond Delaware Instructional

    From GPS to Maps and Beyond Delaware Instructional

    From GPS to Maps and Beyond Delaware Instructional Technology Conference - Spring 2008 Thursday, April 10, 2008 Presenters: Miriam Pomilio and Nicole M. Minni
  • Connecting Kentucky Core Academic Standards to IEP

    Connecting Kentucky Core Academic Standards to IEP

    Connecting Kentucky Core Academic Standards to the IEP. Session today is connecting the Kentucky Core Academic Standards to the IEP. There are lots of acronyms associated with the new standards work. KCAS for short. Announce to participants: You will need...
  • WWII, Cold War, Korean War - AP WORLD HISTORY

    WWII, Cold War, Korean War - AP WORLD HISTORY

    PERIOD 6: 1900- PRESENT (ACCELERATING GLOBAL CHANGE AND RE-ALIGNMENT) Globalization of the Economy Pros and Cons of Globalization Article Answer the following questions in your notes: 1. What is globalization? 2. Globalization can be summed up as a long-term change...
  • Product Group Safety Independent High Integrity (HI) Technical

    Product Group Safety Independent High Integrity (HI) Technical

    AC 800M HI controller need to be able to communicate with other safety controllers and with process control systems on the same network. This enables use of common HSI facilities and introduces the possibility of connecting external equipment used in...
  • Bilgisayara Giriş

    Bilgisayara Giriş

    alan. fiilimsilerin. türlerini. bulunuz. Mektup yazmak onun için huzur verici bir şeydi. Yıkılası dağlar geçit vermez oldu. Sen gidince hiçbir şeyin tadı kalmamıştı. Ben de sizinle tatile gelmeyi düşünüyordum. Bağlama çalmayı bu kadar çok seveni hiç görmemiştim. Bazen bilindik şiirlerle...
  • Utility and Enablement - Berkeley Law

    Utility and Enablement - Berkeley Law

    The idea that patents, and IP generally, are only one factor that affects invention, dissemination, and commercialization Rewards and norms in the practice of scientific research affect research and disclosure The Contemporary View Patents may interfere with disclosure as much...
  • PowerPoint-Präsentation

    PowerPoint-Präsentation

    Generic Role Assignment in Wireless Sensor Networks Christian Frank, Kay Römer ETH Zurich The Gap Generic Role Assignment Enables automatic assignment of Special functions/roles to nodes in the network Using programmer-specified rules for assignment Rules are based on local and...