Named Data Networking ndn SIM a modular NDN

  • Slides: 46
Download presentation
Named Data Networking ndn. SIM: a modular NDN simulator

Named Data Networking ndn. SIM: a modular NDN simulator

Outline Introduction • current status and usage • internal structure Tutorial • getting started

Outline Introduction • current status and usage • internal structure Tutorial • getting started • prepare the environment for simulations • writing basic scenario 2

Introduction • Based on NS-3 network simulator o C++, highly module, actively maintained •

Introduction • Based on NS-3 network simulator o C++, highly module, actively maintained • ndn. SIM implements all basic NDN operations • Has modular architecture o Individual abstractions for every NDN component o Can be easily extended o Easy to use • Allows combining different implementations of core NDN components o PIT, CS, Strategies 3

Current status • 27 public forks on github • Active development o extended API

Current status • 27 public forks on github • Active development o extended API o usage examples and documentation • Active mailing list 4

ndn. SIM usage scope trends • http: //scholar. google. com/scholar? oi=bibs&hl=en&cites=1137170556819695342 2, 10718881312950170080 o

ndn. SIM usage scope trends • http: //scholar. google. com/scholar? oi=bibs&hl=en&cites=1137170556819695342 2, 10718881312950170080 o > 80 published papers from inside and outside NDN team that used ndn. SIM • • • Caching-related evaluation o various caching replacement policies, collaborative caching Congestion control related o TCP-like transfers (end-to-end, host-by-host) o queueing Mobile and vehicular environment evaluations DDo. S-related evaluations o interest flooding (us) o content poisoning Forwarding strategy experimentation o behavior in the presence of link failures, prefix black-holing Application-level evaluations o exploration of Chrono. Sync protocol design 5

Modular ndn. SIM structure overview Net. Device (connection to other nodes) Applications Face (App.

Modular ndn. SIM structure overview Net. Device (connection to other nodes) Applications Face (App. Face, Api. Face) Face (Net. Device. Face) Core NDN Protocol (ndn: : L 3 Protocol) LRU, LFU, Random, with or without evicting stale data, others Content. Store Pit Unbounded, “Persistent”, “Random” retention policies for PIT entries Fib Forwarding Strategy Best. Route, Flooding, Smart. Flooding, Per. Out. Face. Limits, Per. Fib. Limits, others 6

Faces • Abstraction from underlying protocols • • callback registration-deregistration packet encapsulation 7

Faces • Abstraction from underlying protocols • • callback registration-deregistration packet encapsulation 7

General use of ndn. SIM • Define topology o Manually o Using various readers

General use of ndn. SIM • Define topology o Manually o Using various readers (http: //ndnsim. net/examples. html#node-grid-example-usingtopology-plugin) • Create ndn: : Stack. Helper o Define Content. Store size and policy • ns 3: : ndn: : cs: : Lru (default size 100), . . . Fifo, . . . Random • ns 3: : ndn: : cs: : Stats: : Lru, . . . Fifo, . . . Random • ns 3: : ndn: : cs: : Freshness: : Lru, . . . Fifo, . . . Random o Define Forwarding Strategy • ns 3: : ndn: : fw: : Flooding (default), . . . Smart. Flooding, . . . Best. Route • Set up routes between nodes o manually o semi-automatic • Define and assign applications • Collect metrics 8

Forwarding strategies • Abstraction control all aspect of Interest and Data packet forwarding o

Forwarding strategies • Abstraction control all aspect of Interest and Data packet forwarding o specify where to forward Interest packets o track data plane performance for Data packets • Available strategies o Flooding strategy o Smart flooding strategy o Best-Route strategy • Easy to write your own strategy or redefine aspects of the existing ones 9

An initial set of applications • http: //ndnsim. net/applications. html • ndn: : Consumer.

An initial set of applications • http: //ndnsim. net/applications. html • ndn: : Consumer. Cbr o generates Interest traffic with predefined frequency • ndn: : Consumer. Batches o generates a specified number of Interests at specified points of simulation • ndn: : Consumer. Window o very basic approximation of TCP-like transfer • ndn: : Consumer. Zipf. Mandelbrot o (thanks to Xiaoke Jiang) requests contents (names in the requests) following Zipf. Mandelbrot distribution (number of Content frequency Distribution) • ndn: : Producer o Interest-sink application, which replies every incoming Interest with Data packet 10

Metrics • http: //ndnsim. net/metric. html • Packet-level trace helpers o L 3 Aggregate.

Metrics • http: //ndnsim. net/metric. html • Packet-level trace helpers o L 3 Aggregate. Tracer o L 3 Rate. Tracer o L 2 Tracer • Content store trace helper o ndn: : Cs. Tracer • App-level trace helpers o App. Delay. Tracer • Custom tracing by connecting to available Trace. Source’s 11

Code from the tutorial can be cloned from github: https: //github. com/cawka/ndn. SIM-tutorial Outline

Code from the tutorial can be cloned from github: https: //github. com/cawka/ndn. SIM-tutorial Outline Introduction Tutorial • getting started • prepare the environment for simulations • writing basic scenario 12

Getting started • http: //ndnsim. net/getting-started. html • Works in OSX, Linux, Free. BSD

Getting started • http: //ndnsim. net/getting-started. html • Works in OSX, Linux, Free. BSD o requires boost libraries >= 1. 46 • recommended latest version of boost (e. g. , 1. 54) o visualizer module need python and various python bindings • Download o o o mkdir ndn. SIM cd ndn. SIM git clone git: //github. com/cawka/ns-3 -dev-ndn. SIM. git ns-3 git clone git: //github. com/cawka/pybindgen. git pybindgen git clone git: //github. com/NDN-Routing/ndn. SIM. git ns-3/src/ndn. SIM • Build o. /waf configure --enable-examples o. /waf • Run examples o. /waf --run=ndn-grid --vis o other examples: http: //ndnsim. net/examples. html 13

Prepare the environment • Using scratch folder in NS-3 (not recommended) o one scenario

Prepare the environment • Using scratch folder in NS-3 (not recommended) o one scenario per. cc file • cd ndn. SIM/ns-3 • create scratch/my-scenario. cc • (. /waf) • . /waf --run my-scenario o multiple. cc files per scenario • cd ndn. SIM/ns-3 • mkdir scratch/my-scenario o create scratch/my-scenario/file 1. cc o create scratch/my-scenario/file 2. cc o. . . • (. /waf) • . /waf --run my-scenario • Cons and pros o cons • compilation of the scenario could be very slow • hard to separate simulation code from the simulator code o pros • works out-of-the box 14

 • Prepare the environment (cont. ) Using separate repository (recommended) o o o

• Prepare the environment (cont. ) Using separate repository (recommended) o o o o • install ndn. SIM and NS-3 • cd ndn. SIM/ns-3 • sudo. /waf install git clone https: //github. com/cawka/ndn. SIM-scenario-template my-scenario cd my-scenario create extensions (any. cc|. h files) in extensions/ • create extensions/my-test-extension. cc create scenarios in scenarios/ • create scenarios/my-test-scenario. cc. /waf configure --debug • or just. /waf configure if ndn. SIM/NS-3 was compiled in optimized mode. /waf --run=my-test-scenario • or directly: . /build/my-test-scenario • or. /waf --run my-test-scenario --vis to run visualizer (if installed) Cons and pros o o cons • pros • • • may need certain configuration tricks (refer to README. md) fast compilation clear separation of the simulator code from the extensions and scenarios easy to make code available for others to reproduce scenarios 15

Writing a basic scenario • Simple simulation o filename • scenarios/example 1. cc (C++)

Writing a basic scenario • Simple simulation o filename • scenarios/example 1. cc (C++) • scenarios/example 1. py (Python) o Topology • 3 x 3 grid topology • 10 Mbps links / 10 ms delays • One consumer, one producer o NDN parameters • Forwarding Strategy for interests: Best. Route • FIB is computed automatically using global routing controller • Cache: LRU with 100 items on each node (default) 16

NS-3 101: Prepare scenario (C++) Step 1. Include necessary modules Step 2. Define main

NS-3 101: Prepare scenario (C++) Step 1. Include necessary modules Step 2. Define main function like in any other C++ program #include ”ns 3/core-module. h" #include "ns 3/network-module. h" #include "ns 3/point-to-point-grid. h" #include "ns 3/ndn. SIM-module. h" using namespace ns 3; int main (int argc, char *argv[]) { Step 3. Set default parameters for the simulator modules. For example, define that by default all created p 2 p links will have 10 Mbps bandwidth, 10 ms delay and Drop. Tail. Queue with 20 packets Config: : Set. Default ("ns 3: : Point. To. Point. Net. Device: : Data. Rate", String. Value ("10 Mbps")); Config: : Set. Default ("ns 3: : Point. To. Point. Channel: : Delay", String. Value ("10 ms")); Config: : Set. Default ("ns 3: : Drop. Tail. Queue: : Max. Packets", String. Value ("20")); Step 4. Allow overriding defaults from command line Command. Line cmd; cmd. Parse (argc, argv); Step 5. Define what topology will be simulated. For example, 3 x 3 grid topology Point. To. Point. Helper p 2 p; Point. To. Point. Grid. Helper grid (3, 3, p 2 p); grid. Bounding. Box(100, 200, 200); Step 6. Create and install networking stacks, install and schedule applications, define metric logging, etc. // scenario meat Step 7. Define when simulation should be stopped Final step. Run simulation Simulator: : Stop (Seconds (20. 0)); Simulator: : Run (); Simulator: : Destroy (); } return 0; 17

The same scenario can be also written in Python C++ #include "ns 3/core-module. h"

The same scenario can be also written in Python C++ #include "ns 3/core-module. h" #include "ns 3/network-module. h" #include "ns 3/point-to-point-grid. h" #include "ns 3/ndn. SIM-module. h” using namespace ns 3; int main (int argc, char *argv[]) { Config: : Set. Default ("ns 3: : Point. To. Point. Net. Device: : Data. Rate", String. Value ("10 Mbps")); Config: : Set. Default ("ns 3: : Point. To. Point. Channel: : Delay", String. Value ("10 ms")); Config: : Set. Default ("ns 3: : Drop. Tail. Queue: : Max. Packets", String. Value ("20")); from ns. core import * from ns. network import * from ns. point_to_point_layout import * from ns. ndn. SIM import * Config. Set. Default ("ns 3: : Point. To. Point. Net. Device: : Data. Rate", String. Value ("10 Mbps")) Config. Set. Default ("ns 3: : Point. To. Point. Channel: : Delay", String. Value ("10 ms")) Config. Set. Default ("ns 3: : Drop. Tail. Queue: : Max. Packets", String. Value ("20")) Command. Line cmd; cmd. Parse (argc, argv); import sys; cmd = Command. Line (); cmd. Parse (sys. argv); Point. To. Point. Helper p 2 p; Point. To. Point. Grid. Helper grid (3, 3, p 2 p); grid. Bounding. Box(100, 200, 200); p 2 p = Point. To. Point. Helper () grid = Point. To. Point. Grid. Helper (3, 3, p 2 p) grid. Bounding. Box(100, 200, 200) // scenario meat # scenario meat Simulator: : Stop (Seconds (20. 0)); Simulator. Stop (Seconds (20. 0)) Simulator. Run () Simulator. Destroy () Simulator: : Run (); Simulator: : Destroy (); } Python return 0; # or run using the visualizer # import visualizer # visualizer. start () Defining scenario in Python is easier and don’t require (re)compilation, but not all features of NS-3 and 18 ndn. SIM are available in Python interface.

ndn. SIM 101: filling scenario meat (C++) Step 1. Install NDN stack on all

ndn. SIM 101: filling scenario meat (C++) Step 1. Install NDN stack on all nodes (like starting ccnd on a computer) ndn: : Stack. Helper ndn. Helper; ndn. Helper. Install. All (); Step 2. Define which nodes will run applications // Getting containers for the consumer/producer Ptr<Node> producer = grid. Get. Node (2, 2); Node. Container consumer. Nodes; consumer. Nodes. Add (grid. Get. Node (0, 0)); Step 3. “Install” applications on nodes ndn: : App. Helper c. Helper ("ns 3: : ndn: : Consumer. Cbr"); c. Helper. Set. Prefix ("/prefix"); c. Helper. Set. Attribute ("Frequency", String. Value ("10")); c. Helper. Install (consumer. Nodes); ndn: : App. Helper ("ns 3: : ndn: : Producer"); p. Helper. Set. Prefix ("/prefix"); p. Helper. Set. Attribute ("Payload. Size", String. Value("1024")); p. Helper. Install (producer); Step 2. Configure FIB • manually • using global routing controller (shown here) ndn: : Global. Routing. Helper ndn. Global. Routing. Helper; ndn. Global. Routing. Helper. Install. All (); // Add /prefix origins to ndn: : Global. Router ndn. Global. Routing. Helper. Add. Origins (“/prefix”, producer); // Calculate and install FIBs ndn. Global. Routing. Helper. Calculate. Routes (); 19

ndn. SIM 101: filling scenario meat (Python) Step 1. Install NDN stack on all

ndn. SIM 101: filling scenario meat (Python) Step 1. Install NDN stack on all nodes (like starting ccnd on a computer) ndn. Helper = ndn. Stack. Helper () ndn. Helper. Install. All (); Step 2. Define which nodes will run applications # Getting containers for the consumer/producer = grid. Get. Node (2, 2) consumer. Nodes = Node. Container () consumer. Nodes. Add (grid. Get. Node (0, 0)) Step 3. “Install” applications on nodes c. Helper = ndn. App. Helper ("ns 3: : ndn: : Consumer. Cbr”) c. Helper. Set. Prefix ("/prefix”) c. Helper. Set. Attribute ("Frequency", String. Value ("10")) c. Helper. Install (consumer. Nodes) p. Helper = ndn. App. Helper ("ns 3: : ndn: : Producer”) p. Helper. Set. Prefix ("/prefix”) p. Helper. Set. Attribute ("Payload. Size", String. Value("1024")); p. Helper. Install (producer) Step 2. Configure FIB • manually • using global routing controller (shown here) ndn. Global. Routing. Helper = ndn. Global. Routing. Helper () ndn. Global. Routing. Helper. Install. All () # Add /prefix origins to ndn: : Global. Router ndn. Global. Routing. Helper. Add. Origins (“/prefix”, producer) # Calculate and install FIBs ndn. Global. Routing. Helper. Calculate. Routes () 20

Running the simulation (C++) • Run C++ scenario • . /waf --run example 1

Running the simulation (C++) • Run C++ scenario • . /waf --run example 1 • • or. /waf &&. /build/example 1 or. /waf --run example 1 --vis • Run Python scenario • python scenarios/example 1. py • If in debug mode • NS_LOG=ndn. fw. /waf --run example 1 Result if you followed the steps Hint: using right click on a node in visualizer, it is possible to check FIB, PIT, and CS contents on the node during the active simulation Same example is on http: //ndnsim. net 21

That’s all for now • More tutorial examples in the slide deck o https:

That’s all for now • More tutorial examples in the slide deck o https: //dl. dropboxusercontent. com/u/45347685/slides/ndn. SIM-tutorial-demo. pptx 22

Logging in debug mode • Should be used ONLY for developing/debugging purposes o very

Logging in debug mode • Should be used ONLY for developing/debugging purposes o very slow!!! • Actual simulation SHOULD be run in optimized mode o much, much faster o all logging is disabled • Available debug loggings in ndn. SIM: o ndn. Face, ndn. Net. Device. Face, ndn. App. Face o ndn. App, ndn. Consumer, ndn. Producer, and many others To discover name for the logging component, look in. cc files: find src/ndn. SIM/ -type f -name '*. cc' -exec grep 23 NS_LOG_COMPONENT_DEFINE {} ;

Logging in debug mode (cont. ) • Selecting several loggings o NS_LOG=ndn. fw: ndn.

Logging in debug mode (cont. ) • Selecting several loggings o NS_LOG=ndn. fw: ndn. fw. Best. Route: ndn. Consumer. /waf --run=example 1 • Select all loggings (including from the NS-3) o NS_LOG=*. /waf --run=example 1 • DO NOT USE LOGGING TO GET METRICS o use existing tracing helpers or write your own 24

Getting metrics (supported only in C++) • L 3 Rate. Tracer • App. Delay.

Getting metrics (supported only in C++) • L 3 Rate. Tracer • App. Delay. Tracer • Cs. Tracer 25

Processing metrics • Resulting. txt files can be processed o R o gnuplot o

Processing metrics • Resulting. txt files can be processed o R o gnuplot o python graph library and others • Example with R o Same scenario, but with small modifications • Config: : Set. Default ("ns 3: : Point. To. Point. Net. Device: : Data. Rat e", String. Value ("20 Kbps")); • ndn: : App. Helper c. Helper ("ns 3: : ndn: : Consumer. Zipf. Mandelbrot") ; o very basic rate-trace. txt procesing • library (ggplot 2) • data = read. table ("results/rate-trace. txt", header=T) • ggplot(data, aes(x=Time, y=Kilobytes, color=Type)) + geom_line () + facet_wrap(~ Face. Descr) 26

Customizing scenarios • Forwarding strategy • Content Store (type and caching replacement/placement policy) •

Customizing scenarios • Forwarding strategy • Content Store (type and caching replacement/placement policy) • Pending Interest Table 27

Forwarding strategy ndn: : Stack. Helper ndn. Helper; ndn. Helper. Set. Forwarding. Strategy (“ns

Forwarding strategy ndn: : Stack. Helper ndn. Helper; ndn. Helper. Set. Forwarding. Strategy (“ns 3: : ndn: : fw: : Flooding”); • Available strategies: o (default) ns 3: : ndn: : fw: : Flooding o ns 3: : ndn: : fw: : Best. Route o ns 3: : ndn: : fw: : Smart. Floowing o o o ns 3: : ndn: : fw: : Flooding: : Per. Out. Face. Limits: : Per. Fib. Limits ns 3: : ndn: : fw: : Best. Route: : Per. Out. Face. Limits: : Per. Fib. Limits ns 3: : ndn: : fw: : Smart. Flooding: : Per. Out. Face. Limits: : Per. Fib. Limits 28

Content Store ndn: : Stack. Helper ndn. Helper; ndn. Helper. Set. Content. Store (“ns

Content Store ndn: : Stack. Helper ndn. Helper; ndn. Helper. Set. Content. Store (“ns 3: : ndn: : cs: : Lru”, “Max. Size”, “ 100”); • Available content stores o o o (default) ns 3: : ndn: : cs: : Lru ns 3: : ndn: : cs: : Random ns 3: : ndn: : cs: : Fifo ns 3: : ndn: : cs: : Lfu ns 3: : ndn: : cs: : Nocache o o ns 3: : ndn: : cs: : Lru: : Freshness ns 3: : ndn: : cs: : Random: : Freshness ns 3: : ndn: : cs: : Fifo: : Freshness ns 3: : ndn: : cs: : Lfu: : Freshness o o ns 3: : ndn: : cs: : Lru: : Lifetime. Stats ns 3: : ndn: : cs: : Random: : Lifetime. Stats ns 3: : ndn: : cs: : Fifo: : Lifetime. Stats ns 3: : ndn: : cs: : Lfu: : Lifetime. Stats 29

Pending Interest Table (PIT) ndn: : Stack. Helper ndn. Helper; ndn. Helper. Set. Pit

Pending Interest Table (PIT) ndn: : Stack. Helper ndn. Helper; ndn. Helper. Set. Pit (“ns 3: : ndn: : pit: : Persistent”, “Max. Size”, “ 100”); • Each PIT entry stores o o Interest packet itself list of incoming faces + associated info list of outgoing faces + associated info forwarding strategy tags • e. g. , reference to a delayed processing queue • Size of PIT can be limited in simulation scenario o Available policies for new PIT entry creation: • (default) persistent (ns 3: : ndn: : pit: : Persistent): a new entry will not be created if limit is reached • LRU (ns 3: : ndn: : pit: : LRU): when limit is reached, insertion of a new entry will evict the oldest entry • Random (ns 3: : ndn: : pit: : Random): when limit is reached, insertion will evict a random entry 30

Write your own forwarding strategy Step 1. Create a standard C++ class and derive

Write your own forwarding strategy Step 1. Create a standard C++ class and derive it from ndn: : Forwarding. Strategy, one of the extensions, or one of the existing strategies Step 2. Extend or re-implement available forwarding strategy events (for the full list refer to http: //ndnsim. net/doxygen/): • On. Interest • On. Data • Will. Erase. Timed. Out. Pending. Interest • Add. Face • Remove. Face • Did. Add. Fib. Entry • Will. Remove. Fib. Entry • Did. Create. Pit. Entry • Failed. To. Create. Pit. Entry • Did. Receive. Duplicate. Interest • Did. Suppress. Similar. Interest • Did. Forward. Similar. Interest • Did. Exhaust. Forwarding. Options • Detect. Retransmitted. Interest • Will. Satisfy. Pending. Interest • • • Did. Send. Out. Data Did. Receive. Solicited. Data Did. Receive. Unsolicited. Data Should. Suppress. Incoming. Interest Can. Send. Out. Interest Try. Send. Out. Interest Did. Send. Out. Interest Propagate. Interest Do. Propagate. Interest 31

Writing a custom forwarding strategy • Basic o http: //ndnsim. net/fw. html#writing-your-own-custom-strategy • Processing

Writing a custom forwarding strategy • Basic o http: //ndnsim. net/fw. html#writing-your-own-custom-strategy • Processing forwarding strategy events o Example • if we want to perform special logging of all forwarded, timed out, and satisfied Interests o http: //ndnsim. net/fw. html#extending-strategy 32

Write your own cache policy • Option A: o create a class derived from

Write your own cache policy • Option A: o create a class derived from ndn: : Content. Store, implementing all interface functions o example • ndn: : cs: : No. Cache • Option B: o use C++ templates of ndn. SIM • define “policy traits” (example utils/trie/lru-policy) o defines what to do • on insert (e. g. , put in front) • on update (e. g. , promote to front) • on delete (e. g. , remove) • on lookup (e. g. , promote to front) • instantiate cache class with new policy: o template class Content. Store. Impl<lru_policy_traits>; • see examples in model/cs/content-store-impl. cc 33

Writing a custom cache policy • Example. Policy o only every other data packet

Writing a custom cache policy • Example. Policy o only every other data packet will be cached o “promote” Data packet if it is accessed more that twice o apply LRU cache replacement strategy • Write “policy traits” o extensions/example-policy. h o use one of the existing policy traits as a base • utils/tries/lru-policy. h • “Instantiate” content store with the policy o create extensions/cs-with-example-policy. cc 34

Policy (extensions/example-policy. h) 1/3 35

Policy (extensions/example-policy. h) 1/3 35

Policy (extensions/example-policy. h) 2/3 36

Policy (extensions/example-policy. h) 2/3 36

Policy (extensions/example-policy. h) 3/3 See scenarios/example 6. cc 37

Policy (extensions/example-policy. h) 3/3 See scenarios/example 6. cc 37

Content Store instantiation (extensions/cs-withexample-policy. cc) 38

Content Store instantiation (extensions/cs-withexample-policy. cc) 38

Write your own application (requester) Step 1. Create a normal C++ class and derive

Write your own application (requester) Step 1. Create a normal C++ class and derive it from ndn: : App Step 2. Define Get. Type. Id () function (use templates!) Needed for NS-3 object system Step 3. Define actions upon start and stop of the application Step 4. Implement On. Data method to process requested data: virtual void On. Data (Ptr<const Data> data); . . . class Requester. App : public App { public: static Type. Id Get. Type. Id (); Requester. App (); virtual ~Requester. App (); protected: // from App virtual void Start. Application () { App: : Start. Application (); // send packet for example } virtual void Stop. Application () { // do cleanup App: : Stop. Application (); } }; 39

Requester. App (extensions/requester-app. cc) See scenarios/example 3. cc 40

Requester. App (extensions/requester-app. cc) See scenarios/example 3. cc 40

Write your own application (producer) Step 0. Do everything as for the requester app

Write your own application (producer) Step 0. Do everything as for the requester app Step 1. Register prefix in FIB (= set Interest filter) in Start. Application Step 2. Implement On. Interest to process incoming interests void Start. Application () {. . . Ptr<Fib> fib = Get. Node ()>Get. Object<Fib> (); Ptr<fib: : Entry> fib. Entry = fib->Add (m_prefix, m_face, 0); fib. Entry->Update. Status (m_face, fib: : Face. Metric: : NDN_FIB_GREEN); } virtual void On. Interest (Ptr<const Interest> interest); 41

Producer. App (extensions/producer-app. cc) See scenarios/example 4. cc 42

Producer. App (extensions/producer-app. cc) See scenarios/example 4. cc 42

New API to write the same apps (Consumer. App) See scenarios/example 5. cc 43

New API to write the same apps (Consumer. App) See scenarios/example 5. cc 43

New API to write the same apps (Producer. App) See scenarios/example 5. cc 44

New API to write the same apps (Producer. App) See scenarios/example 5. cc 44

Feedback • Try out ndn. SIM and let us know your thought/comments/bug reports/new feature

Feedback • Try out ndn. SIM and let us know your thought/comments/bug reports/new feature requests! • Join our mailing list o http: //www. lists. cs. ucla. edu/mailman/listinfo/ndnsim • Contribute o issues on Github • https: //github. com/NDN-Routing/ndn. SIM/issues? state=open o fork and create pull requests on Github o issues in NDN redmine • http: //redmine. named-data. net/projects/ndnsim http: //ndnsim. net 45

Thanks • Questions? http: //ndnsim. net 46

Thanks • Questions? http: //ndnsim. net 46