blob: 9807191ad8ca2b1469a7d0c158ba77622b521f08 [file] [log] [blame]
David Arjona2e6c8bb2018-11-14 16:27:09 -06001==========================================================
2A beginners guide to installing and testing NLSR on Fedora
3==========================================================
4
5:Authors: David Arjona-Villicaña, Octavio Renteria-Vidales, Ashlesh Gawande
6:Date: November, 2018
7:Abstract: This is an easy to follow guide on how to install and test the NLSR routing protocol for NDN using two Fedora 28 machines. The commands and the paths used in this guide have been tested only in Fedora, although a similar procedure should be used for other linux systems. Specifically, the testing section `5 <#test>`__) is platform independent. Therefore users who have NLSR already installed may skip to this section. Since neither NDN, NLSR nor Fedora are static software developments, it is expected that some commands and features in this guide will change over time. However, this guide is as accurate as it could be at the time it was published.
8
9.. role:: raw-latex(raw)
10 :format: latex
11
12
13.. _intro:
14
151. Introduction
16===============
17
18The following instructions are based on the information provided at the
19Named Data Networking project web page [NDNmain]_.
20Before installing NLSR it is necessary to install different libraries
Ashlesh Gawande32ec3fd2018-07-18 13:42:32 -050021and programs: ndn-cxx, NFD, ChronoSync, and PSync. This document describes the
David Arjona2e6c8bb2018-11-14 16:27:09 -060022necessary steps to correctly install these programs `2 <#ndncxx>`__,
23`3 <#nfd>`__ and `4 <#nlsr>`__) and a brief guide on how to configure
24and test NLSR using a simple two-node network `5 <#test>`__).
25
26Many of the commands in this guide need to be executed as *root*.
27Starting from Fedora 28, there is no need to set a root user
28[Kolman2018]_. However it is possible to define it,
29using the following command:
30
31::
32
33 $ sudo -i
34
35And then using the *passwd* command to set up a password. After setting
36up the root user, it is possible to become root by employing the
37following command and providing the root password when prompted:
38
39::
40
41 $ su -
42
43Fedora employs the *dnf* command to install and verify installed
44packages. The following commands may become useful during the
45installation process and should be executed as root:
46
47- To verify that all installed packages are up to date
48
49 ::
50
51 $ dnf update
52
53- To verify if a package is already installed in the system
54
55 ::
56
57 $ dnf list --installed <package-name>
58
59- To search for information about a package or family of packages (not
60 necessarily installed in the system).
61
62 ::
63
64 $ dnf info <package-name>
65
66- To install a package in the system.
67
68 ::
69
70 $ dnf install <package-name>
71
72It is also a good installation practice to download and install all the
73NDN programs in a common directory. Therefore, it is recommended to
74create a directory at the home directory where all the following
75programs may get installed. The name of this directory is not important.
76However, the following are provided as suggestions: project, NDNproject,
77NDNprograms. Each of the programs in the following sections should be
78downloaded to their own directory using the *git* command, and then
79compiled in this directory.
80
81.. _ndncxx:
82
832. Installing ndn-cxx
84=====================
85
862.1 Before installing ndn-cxx
87-----------------------------
88
89An updated list of the packages and programs that need to be installed
90before installing ndn-cxx, is provided at [NDN-cxx]_.
91This list is also reproduced bellow with the commands to verify that all
92the packages have been installed in the system. The following commands
93should be run as root:
94
95#. gcc and gcc-c++
96
97 ::
98
99 $ dnf list --installed gcc
100 $ dnf list --installed gcc-c++
101
102#. Python version 2.6 or later
103
104 ::
105
106 $ python -V
107
108#. libsqlite3
109
110 ::
111
112 $ dnf list --installed sqlite
113 $ dnf list --installed sqlite-devel
114
115#. openssl version 1.0.1 or later
116
117 ::
118
119 $ openssl version
120 $ dnf list --installed openssl-devel
121
122#. pkgconf that replaces pkg-config
123
124 ::
125
126 $ dnf list --installed pkgconf*
127
128#. boost libraries version 1.54 or later
129
130 ::
131
132 $ dnf list --installed boost
133 $ dnf list --installed boost-devel
134
135#. doxygen
136
137 ::
138
139 $ dnf list --installed doxygen
140
141#. graphviz
142
143 ::
144
145 $ dnf list --installed graphviz
146
147#. python2-sphinx that replaces python-sphinx
148
149 ::
150
151 $ dnf list --installed python2-sphinx
152
153#. After verifying that the python-sphinx package has been installed, it
154 is necessary to run the following two commands:
155
156 ::
157
158 $ pip-3 install sphinxcontrib-doxylink
159 $ pip install sphinxcontrib-googleanalytics
160
161 Note: When the two previous commands are run before correctly
162 installing python-sphinx, the following error message is produced
163 when trying to install this latter package: Error unpacking rpm
164 package python2-urllib3-1.22-3.fc27.noarch”. To fix this problem, it
165 is necessary to run the following commands before installing
166 python-sphinx again:
167
168 ::
169
170 $ dnf remove python2-sphinx
171 $ pip uninstall sphinxcontrib-googleanalytics
172 $ pip-3 uninstall sphinxcontrib-doxylink
173 $ pip uninstall urllib3
174
175#. dpkg-architecture
176
177 ::
178
179 $ dnf list --installed dpkg
180 $ dnf list --installed dpkg-dev
181
182#. git and valgrind, which is used when installing NFD (§
183 `3 <#nfd>`__).
184
185 ::
186
187 $ dnf list --installed valgrind
188 $ dnf list --installed valgrind-devel
189 $ dnf list --installed git
190
1912.2 Downloading and installing ndn-cxx
192--------------------------------------
193
194The *git* command allows to download the ndn-cxx library in its own
195folder, also called *ndn-cxx*. Therefore it is recommended to execute
196this command at the directory created at § `1 <#intro>`__:
197
198::
199
200 $ git clone --depth 1 https://github.com/named-data/ndn-cxx.git
201
202Move to the ndn-cxx directory:
203
204::
205
206 $ cd ndn-cxx
207
208Use the following command to verify that everything is ready to compile.
209If an error message displays, it is necessary to fix it before
210continuing:
211
212::
213
214 $ ./waf configure --with-examples
215
216Compile the ndn-cxx library and install the compiled files at the
217systems directories:
218
219::
220
221 $ ./waf
222 $ sudo ./waf install
223
2242.3 Configuring ndn-cxx
225-----------------------
226
227The commands in this subsection need to be run as root. First, it is
228necessary to create file *local.conf*, which contains a line with the
229location for the ndn-cxx library:
230
231::
232
233 $ echo /usr/local/lib64 >> /etc/ld.so.conf.d/local.conf
234
235The following command configures the libraries:
236
237::
238
239 $ ldconfig -v | grep ndn
240
241This command should display a line similar to the following:
242
243::
244
245 libndn-cxx.so.0.6.1 -> libndn-cxx.so.0.6.1
246
247Configure the NDN path:
248
249::
250
251 $ echo export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig >>
252 /etc/profile.d/ndn.sh
253
254After this command has been executed, it is necessary to apply the
255changes by either logging out and back in, and then running the
256following command:
257
258::
259
260 $ printenv | grep PKG
261
262Or by executing the following command:
263
264::
265
266 $ ./etc/profile.d/ndn.sh
267
268For more information and examples about how to compile and configure
269this library, users should read the ndn-cxx guide at
270[NDN-cxx]_.
271
272.. _nfd:
273
2743. Installing NFD
275=================
276
2773.1 Before installing NFD
278-------------------------
279
280An updated list of the packages and programs that need to be installed
281before NFD is provided at [NDNNFD]_. Before installing
282NFD it is necessary to verify that the following packages are installed:
283
284#. libpcap libraries
285
286 ::
287
288 $ dnf list --installed libpcap
289 $ dnf list --installed libpcap-devel
290
2913.2 Downloading and installing NFD
292----------------------------------
293
294This library is downloaded and installed in a folder called *NFD*, which
295should be created at the directory defined at § `1 <#intro>`__. The
296following commands need to be run as a regular user:
297
298::
299
300 $ git clone --depth 1 https://github.com/named-data/NFD.git
301 $ cd NFD
302 $ ./waf configure
303
304If the previous command prints an error message saying that waf cannot
305find WebSocket, it is necessary to follow the instructions provided by
306this same output, which tells the user to execute either of the
307following two set of commands:
308
309::
310
311 $ git submodule init && git submodule update
312
313Or:
314
315::
316
317 $ mkdir websocketpp
318 $ curl -L https://github.com/zaphoyd/websocketpp/archive/0.7.0.tar.gz
319 > websocket.tar.gz
320 $ tar zxf websocket.tar.gz -C websocketpp/ --strip 1
321
322After executing either of these instructions, complete the configuration
323by running *./waf configure* again. Then complete the installation by
324means of the following commands:
325
326::
327
328 $ ./waf
329 $ sudo ./waf install
330
3313.3 Configuring NFD
332-------------------
333
334Create a configuration file by running the following command as root:
335
336::
337
338 $ cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf
339
340After the configuration file has been created, NFDs behavior may be
341changed by modifying this file. Once the configuration file has been
342created, it is recommended to start NFD by using the following command:
343
344::
345
346 $ nfd-start
347
348This command does not properly allow to employ the command window to
349enter new commands; however it displays the NFD logs. Therefore, it is
350recommended to open a new command window. This second window may be used
351to verify NDFs status and then stop NFD by using the following
352commands:
353
354::
355
356 $ nfd-status
357 $ nfd-stop
358
359.. _nlsr:
360
3614. Installing NLSR
362==================
363
3644.1 Installing ChronoSync
365-------------------------
366
367Before installing NLSR, it is necessary to first download and install
Ashlesh Gawande32ec3fd2018-07-18 13:42:32 -0500368ChronoSync, which is a synchronization library which allows NLSR routers
369to synchronize Link State Advertisements (LSAs). More information about
370ChronoSync may be found at [Chronosync]_. This library may be
David Arjona2e6c8bb2018-11-14 16:27:09 -0600371installed by running the following commands as a regular user and at the
372directory defined at § `1 <#intro>`__:
373
374::
375
376 $ git clone --depth 1 https://github.com/named-data/ChronoSync.git
377 $ cd ChronoSync
378 $ ./waf configure
379 $ ./waf
380 $ sudo ./waf install
381
382The following command needs to be used again to configure the libraries:
383
384::
385
Ashlesh Gawande32ec3fd2018-07-18 13:42:32 -0500386 $ sudo ldconfig -v | grep -i chronosync
David Arjona2e6c8bb2018-11-14 16:27:09 -0600387
388This command should display a line similar to the following:
389
390::
391
392 libChronoSync.so.0.5.0 -> libChronoSync.so.0.5.0
393
Ashlesh Gawande32ec3fd2018-07-18 13:42:32 -05003944.2 Installing PSync
395-------------------------
396
397Before installing NLSR, it is also necessary to download and install
398PSync. PSync is a synchronization library which allows NLSR to synchronize LSAs
399similar to ChronoSync. More information about PSync may be found at [PSync]_.
400This library may be installed by running the following commands as a regular
401user and at the directory defined at § `1 <#intro>`__:
402
403::
404
405 $ git clone --depth 1 https://github.com/named-data/PSync.git
406 $ cd PSync
407 $ ./waf configure
408 $ ./waf
409 $ sudo ./waf install
410
411The following command needs to be used again to configure the libraries:
412
413::
414
415 $ sudo ldconfig -v | grep -i psync
416
417This command should display a line similar to the following:
418
419::
420
421 libPSync.so.0.1.0 -> libPSync.so.0.1.0
422
4234.3 Downloading and installing NLSR
David Arjona2e6c8bb2018-11-14 16:27:09 -0600424-----------------------------------
425
426NLSR is downloaded and installed in a folder called *NLSR* which should
427be created at the directory defined at § `1 <#intro>`__. The following
428commands need to be run as a regular user:
429
430::
431
432 $ git clone --depth 1 https://github.com/named-data/NLSR.git
433 $ cd NLSR
434 $ ./waf configure
435 $ ./waf
436 $ sudo ./waf install
437
Ashlesh Gawande32ec3fd2018-07-18 13:42:32 -05004384.4 Configuring NLSR
David Arjona2e6c8bb2018-11-14 16:27:09 -0600439--------------------
440
441Create and configure the following directory by running the following
442commands as root:
443
444::
445
446 $ mkdir /var/lib/nlsr
447 $ chmod 777 /var/lib/nlsr
448
449.. _test:
450
4515. Configuring and Testing NLSR
452===============================
453
454To test NLSR, the first step is to configure the keys and certificates
455that implement a secure communication between the routers. Then it is
456necessary to verify that the computers in the test network are
457connected, that NFD is running and the faces between the computers are
458configured. Finally, the NLSR configuration file has to be edited before
459running NLSR. The following subsections are provided as a guide to
460define and configure a simple computer network between two computers:
461router1 and router2.
462
463.. _security:
464
4655.1 Setting up the security
466---------------------------
467
468Configuring security in an NDN network requires to generate, exchange
469and install, keys and certificates between the root, site, operator and
470router computers that form the network
471[NLSRsecconf]_, [NLSRdevguide]_, although in practice, it
472is possible to keep more than one of these entities in a single machine.
473The following example and *Figure 1* show how to configure security
474for a single router, called Router X. In this example, the root, site,
475operator and Router X are in different computers:
476
477.. figure:: security_comp.png
478 :alt: Security configuration example for Router X.
479 :width: 19cm
480 :align: center
481
482 Fig. 1. Security configuration example for Router X.
483
484
485#. At the root server, generate the root key:
486
487 ::
488
489 $ ndnsec-key-gen /ndn/ > root.key
490
491#. Generate the certificate for the root key at the root server:
492
493 ::
494
495 $ ndnsec-cert-dump -i /ndn/ > root.cert
496
497#. Install the root certificate at the root server:
498
499 ::
500
501 $ ndnsec-cert-install -f root.cert
502
503#. At the site server, generate the site key:
504
505 ::
506
507 $ ndnsec-key-gen /ndn/edu/uaslp > site.key
508
509#. Copy the site key to the root server and generate the certificate for
510 the site server:
511
512 ::
513
514 $ ndnsec-cert-gen -s /ndn/ site.key > site.cert
515
516#. Copy the site certificate to the site server and install it:
517
518 ::
519
520 $ ndnsec-cert-install -f site.cert
521
522#. At the operator server, generate the operator key:
523
524 ::
525
526 $ ndnsec-key-gen /ndn/edu/uaslp/%C1.Operator/op > op.key
527
528#. Copy the operator key to the site server and generate the certificate
529 for the operator server:
530
531 ::
532
533 $ ndnsec-cert-gen -s /ndn/edu/uaslp op.key > op.cert
534
535#. Copy the operator certificate to the operator server and install it:
536
537 ::
538
539 $ ndnsec-cert-install -f op.cert
540
541#. At the router, generate the router key:
542
543 ::
544
545 $ ndnsec-key-gen /ndn/edu/uaslp/%C1.Router/routerX > routerX.key
546
547#. Copy the router key to the operator server and generate the
548 certificate for the router:
549
550 ::
551
552 $ ndnsec-cert-gen -s /ndn/edu/uaslp/%C1.Operator/op routerX.key >
553 routerX.cert
554
555#. Copy the router certificate to the router and install it:
556
557 ::
558
559 $ ndnsec-cert-install -f routerX.cert
560
561In the previous steps, the *%C1.Router* and *%C1.Operator* labels are
562NDN keywords and should not be changed. These labels will be also used
563by the configuration file `5.4 <#configfile>`__)
564
565The following command may be used to verify that the certificates have
566been installed in a computer:
567
568::
569
570 $ ndnsec-list
571
572This guide recommends that one machine functions as the root, site,
573operator and router1, while a different computer only functions as
574router2. *Figure 2* shows this
575configuration. For router1, the twelve steps described before need to be
576executed except for exchanging files between computers. For the router2,
577only steps 10 to 12 are needed to generate this routers certificate.
578
579Additionally, the following command may be used to print a list and a
580brief description of all the *ndnsec* commands:
581
582::
583
584 $ man ndnsec
585
586
587.. figure:: netwk1.png
588 :alt: Example network.
589 :width: 19cm
590 :align: center
591
592 Fig. 2. Example network.
593
594
5955.2 Configuring the network
596---------------------------
597
598The first step is to configure the physical network. If two computers
599are going to get connected using a single Ethernet cable, it is
600necessary to verify that this cable is a crossover. The other option is
601to employ a switch between two computers that are then connected using
602two regular Ethernet cables.
603
604After the physical network has been assembled, it is necessary to
605configure the network addresses and cards for all the computers in the
606network. It is important to remember that computers that are connected
607to each other should use the same subnetwork address. It is possible to
608verify the network configuration in a Linux computer by means of the *ip
609addr* command
610
611Once the physical network and network cards have been configured, it is
612necessary to verify that the computers can communicate with each other.
613The simplest way to do this is by using the *ping* command:
614
615::
616
617 $ ping <remote-ip-address>
618
6195.3 Starting and configuring NFD
620--------------------------------
621
622To start and configure NFD it is necessary to open two terminal windows.
623The first one will be used to start NFD by means of the *nfd-start*
624command. This terminal will also display the logs that NFD generates. By
625default, NFD only generates informational logs (INFO). However, it is
626possible to obtain different levels of verbosity for these logs. These
627levels can be set before NFD starts by editing the
628*/usr/local/etc/ndn/nfd.conf* file. Open this file using a regular text
629editor, read the information provided about logging and then modify the
630*default-level* variable at the *log* section according to the
631instructions provided in the file. Additional information about NFD
632configuration may be found at [NDNNFDusage]_.
633
634The second terminal will be used to monitor the NFD status:
635
636::
637
638 $ nfd-status
639
640Employ the following command to configure each face that a computer uses
641to connect to a neighboring computer:
642
643::
644
645 $ nfdc face create udp4://<remote-ip-address>
646
647The face id may be displayed by running either *nfd-status* or:
648
649::
650
651 $ nfdc face list
652
653The status of the face may be verified by using the following command:
654
655::
656
657 $ nfdc face show id <face-id>
658
659After finishing NLSR testing, it is necessary to destroy the face before
660stopping NFD. This operation is described at § `5.6 <#turn_off>`__. For
661the two computer network provided as an example (*Figure 2*), it is necessary that both
662machines run NFD and that each one configures a face that connects to
663the other machine.
664
665.. _configfile:
666
6675.4 Setting up the configuration file
668-------------------------------------
669
670Instructions on how to use the configuration file are already provided
671at the NLSRs Router Configuration page [NLSRrtrconf]_.
672Read the information in this page to understand NLSR router
673configuration. The following text describes the instructions that have
674been modified at the default nlsr.conf file for router1:
675
676::
677
678 ; AT general SECTION:
679 {
680 network /ndn/ ; name of the network
681 site /edu/uaslp ; name of the site
682 router /%C1.Router/router1 ; name of the router: router1
683 }
684
685 ;AT neighbors SECTION:
686 neighbors
687 {
688 neighbor
689 {
690 name /ndn/edu/uaslp/%C1.Router/router2 ; Neighbor router: router2
691 face-uri udp://140.220.80.124 ; face to the neighbor
692 link-cost 30 ; cost of the link
693 }
694 }
695
696 ; AT advertising SECTION:
697 advertising
698 {
699 prefix /ndn/edu/uaslp/office/bldg1 ; Advertising destinations
700 prefix /ndn/edu/uaslp/office/bldg2 ; for router1
701 }
702
703 ; AT security SECTION:
704 security
705 {
706 validator
707 {
708 ...
709 trust-anchor
710 {
711 type file
712 file-name "root.cert" ; root certificate file
713 }
714 }
715
716 prefix-update-validator
717 {
718 ...
719 trust-anchor
720 {
721 type file
722 file-name "site.cert" ; site certificate file
723 }
724 }
725
726 cert-to-publish "root.cert" ; root certificate file
727
728 cert-to-publish "site.cert" ; site certificate file
729
730 cert-to-publish "op.cert" ; operator certificate file
731
732 cert-to-publish "router1.cert" ; router1 certificate file
733 }
734
735The following text shows the modified instructions for router2:
736
737::
738
739 ; AT general SECTION:
740 {
741 network /ndn/ ; name of the network
742 site /edu/uaslp ; name of the site
743 router /%C1.Router/router2 ; name of the router: router2
744 }
745
746 ;AT neighbors SECTION:
747 neighbors
748 {
749 neighbor
750 {
751 name /ndn/edu/uaslp/%C1.Router/router1 ; Neighbor router: router1
752 face-uri udp://140.220.80.121 ; face to the neighbor
753 link-cost 30 ; cost of the link
754 }
755 }
756
757 ; AT advertising SECTION:
758 advertising
759 {
760 prefix /ndn/edu/uaslp/labs/networks ; Advertising destinations
761 prefix /ndn/edu/uaslp/labs/hardware ; for router2
762 }
763
764 ; AT security SECTION:
765 security
766 {
767 validator
768 {
769 ...
770 trust-anchor
771 {
772 type file
773 file-name "root.cert" ; root certificate file
774 } ; this file needs to be copied to
775 } ; router2
776
777 prefix-update-validator
778 {
779 ...
780 trust-anchor
781 {
782 type file
783 file-name "site.cert" ; site certificate file
784 } ; this file needs to be copied to
785 } ; router2
786
787 ...
788 cert-to-publish "router2.cert" ; router2 certificate file
789 }
790
791Notice that files *root.cert* and *site.cert*, which were generated at
792router1, need to be copied to router2. Also notice that the *%C1.Router*
793and *%C1.Operator* keywords employed at § `5.1 <#security>`__ are also
794referenced by these configuration files.
795
796.. _starting_nlsr:
797
7985.5 Starting NLSR
799-----------------
800
801It is recommended to open a third command terminal and run NLSR in this
802window. After the NLSR configuration file has been edited and saved as
803*nlsr.conf*, it is possible to start NLSR by running either of the
804following two commands:
805
806::
807
808 $ nlsr
809 $ nlsr -f <configuration-file>
810
811However, to verify what is NLSR doing, it becomes necessary to employ
812NLSRs logging facility [NLSRstarting]_. A brief
813description on how to use NDNs logging facility may be displayed by
814entering the *man ndn-log* command. This guide recommends using one of
815the following two instructions to start NLSR:
816
817::
818
819 $ export NDN_LOG=nlsr.*=TRACE && nlsr
820 $ export NDN_LOG=nlsr.*=TRACE && nlsr -f <configuration-file>
821
822The second terminal window may be used to run *nfd-status* again and it
823should be possible to verify that the status has changed, specially at
824the FIB and RIB sections of the generated report.
825
826.. _turn_off:
827
8285.6 Turning everything off
829--------------------------
830
831In order to stop NLSR and NFD, the following sequence of events is
832recommended:
833
834#. Stop NLSR by pressing the Ctrl+C keys at the third terminal window.
835
836#. Destroy the face to the remote computers using either of the
837 following two commands at the second terminal window:
838
839 ::
840
841 $ nfdc face destroy <face-id>
842 $ nfdc face destroy udp4://<remote-ip-address>
843
844#. Stop NFD by entering the following command at the second terminal
845 window:
846
847 ::
848
849 $ nfd-stop
850
851#. The crossover Ethernet cable may be unplugged and the computers’
852 network configuration restored to its original settings.
853
8545.7 Where to go from here
855-------------------------
856
857Users interested in building and configuring larger networks may want to
858take a look at the NDN Ansible repository
859[NDNAnsible]_. This repository uses Ansible, which is a
860configuration management tool, to manage the official NDN testbed
861deployment [NDNTestbed]_.
862
863
864.. [NDNmain] *Named Data Networking*, http://named-data.net/, March 2018.
865
866.. [Kolman2018] M. Kolman. *Anaconda improvements in Fedora 28*, Fedora Magazine, June 2018.
867
868.. [NDN-cxx] *Getting started with ndn-cxx*, http://named-data.net/doc/ndn-cxx/current/INSTALL.html, April 2018.
869
870.. [NDNNFD] *Getting started with NFD*, http://named-data.net/doc/NFD/current/INSTALL.html, April 2018.
871
872.. [NDNNFDusage] *NFD usage*, http://named-data.net/doc/NFD/current/manpages/nfd.html, May 2018.
873
874.. [Chronosync] Z. Zhu and A. Afanasyev. *Lets ChronoSync: Decentralized dataset state synchronization in Named Data Networking*, in IEEE ICNP, October 2013.
875
Ashlesh Gawande32ec3fd2018-07-18 13:42:32 -0500876.. [PSync] M. Zhang, V. Lehman, and L. Wang. *Scalable Name-based Data Synchronization for Named Data Networking*, in IEEE INFOCOM, May 2017.
877
David Arjona2e6c8bb2018-11-14 16:27:09 -0600878.. [NLSRsecconf] *NLSR Security Configuration*, http://named-data.net/doc/NLSR/current/SECURITY-CONFIG.html June 2018.
879
880.. [NLSRdevguide] V. Lehman, M. Chowdhury, N. Gordon, A. Gawande. *NLSR Developers Guide*, University of Memphis, November 2017.
881
882.. [NLSRrtrconf] *NLSR Router Configuration*, http://named-data.net/doc/NLSR/current/ROUTER-CONFIG.html, April 2018.
883
884.. [NLSRstarting] *Getting Started with NLSR*, http://named-data.net/doc/NLSR/current/GETTING-STARTED.html, May 2018.
885
886.. [NDNAnsible] *NDN Ansible repository*, https://github.com/WU-ARL/NDN_Ansible, October 2018.
887
888.. [NDNTestbed] *NDN Testbed*, https://named-data.net/ndn-testbed/, October 2018.