blob: 985de852dea5bfa060eb6f4765e5f4edd4efa49c [file] [log] [blame]
Nick Gordonf3a9ecb2017-01-24 13:55:14 -06001\section{Configuration File}
2\label{sec:configuration}
3
4NLSR's configuration file contains numerous parameters to control the behavior and performance of NLSR.
5The configuration file also includes the trust schema used by NLSR to verify LSA Data, Hello Data, and prefix update command Interests.
Nick Gordon221531c2017-06-08 11:44:45 -05006
7\subsection{Naming Conventions}
8The NLSR naming convention is mostly arbitrary. For example, a router's name, maybe \texttt{\%C1.Router/router1}, is composed of two parts. \texttt{\%C1.Router} is the router ``tag'', and \texttt{router1} is the name or label of the router. Different entities are given different tags, depending on the context.
Nick Gordonf3a9ecb2017-01-24 13:55:14 -06009
10\subsection{General Section}
11
12The \texttt{general} section in the configuration file includes parameters which deal with the general setup of the router, the behavior of the LSDB, and logging configuration.
13
14There are three parameters used to configure the router prefix of the router.
15The router prefix is the name that other routers in the network know this router by.
16\begin{itemize}
17\item \texttt{network} - the name of the network to which the router belongs; e.g., \texttt{/ndn}.
18\item \texttt{site} - the name of the site to which the router belongs; e.g., \texttt{/edu/memphis}.
Nick Gordon221531c2017-06-08 11:44:45 -050019\item \texttt{router} - the name to identify the router; e.g., \texttt{/\%C1.Router/cs/pollux}.t
Nick Gordonf3a9ecb2017-01-24 13:55:14 -060020\end{itemize}
21The router prefix is constructed by combining the three parameters following the format: \texttt{/<network>/<site>/<router>}.
22
23There are three parameters which affect the behavior of the LSDB.
24\begin{itemize}
25\item \texttt{lsa-refresh-time} - the time in seconds the router will wait before refreshing its LSAs (Default value: 1800; Valid values: 240 - 7200).
26\item \texttt{router-dead-interval} - the time in seconds after which an inactive router's LSAs are removed.
27The configured value for this parameter must be greater than \texttt{lsa-refresh-time}. (Default value: two times the value configured in \texttt{lsa-refresh-time}).
28\item \texttt{lsa-interest-lifetime} - the interest lifetime used for LSA Interests (Default value: 4; Valid values: 1 - 60).
29\end{itemize}
30
31The \texttt{log-level} parameter configures the verbosity of NLSR's logging.
Nick Gordon221531c2017-06-08 11:44:45 -050032The possible \texttt{log-level} values are listed in increasing verbosity. That is, the value all the way to the left includes the values all the way to the right.
33\begin{verbatim}
34NONE < ERROR < WARN < INFO (Default) < DEBUG < TRACE < ALL
35\end{verbatim}
36
37Note that a log level also enables all log levels to its left. That is, setting log level to \texttt{TRACE} causes \texttt{ERROR, WARN, INFO} and \texttt{DEBUG} messages. to also be logged.
Nick Gordonf3a9ecb2017-01-24 13:55:14 -060038
39The \texttt{general} configuration section also includes parameters to choose where the NLSR log file and the NLSR sequence number file are stored.
Nick Gordon221531c2017-06-08 11:44:45 -050040The \texttt{log-dir} parameter is an absolute path to the directory where the NLSR log file should be written, and \texttt{seq-dir} is an absolute path to the directory where the NLSR sequence number should be written. The log directory must exist and be writable, or else NLSR will fail to start.
Nick Gordonf3a9ecb2017-01-24 13:55:14 -060041
42\subsection{Neighbors Section}
43
44The \texttt{neighbors} section in the configuration file contains parameters that define the behavior of the Hello Protocol and the neighboring routers of the router.
45\begin{itemize}
46\item \texttt{hello-retries} - the number of times to retry a Hello Interest before deciding the neighbor is down (Default value: 3; Valid values: 1 - 10).
47\item \texttt{hello-timeout} - the interest lifetime for Hello Interests in seconds (Default value: 1, Valid values: 1 - 15).
48\item \texttt{hello-interval} - the time in seconds between sending each Hello Interest to a neighbor. (Default value: 60; Valid values: 30 - 90).
49\item \texttt{first-hello-interval} - the time to wait in seconds before sending the first Hello Interests (Default value: 10; Valid values: 0 - 10).
50\item \texttt{adj-lsa-build-interval} - when the Hello Protocol triggers an Adjacency LSA build, the LSDB will wait this amount of time in seconds before performing the Adjacency LSA build. This parameter is intended to allow for Adjacency LSA build requests to be aggregated and the build can then be performed once. (Default value: 5; Valid values: 0 - 5)
51\end{itemize}
52
53The \texttt{neighbors} section also includes multiple \texttt{neighbor} subsections, each of which configures a neighbor of the router.
54The \texttt{neighbor} subsection includes:
55\begin{itemize}
56\item \texttt{name} - the router prefix of the neighboring router
57\item \texttt{face-uri} - the face that should be used to connect to the neighboring router
58\item \texttt{link-cost} - the cost metric for the link connecting this router to the neighbor router.
59\end{itemize}
60
61\subsection{Hyperbolic Section}
62
Nick Gordon221531c2017-06-08 11:44:45 -050063Hyperbolic Routing is a greedy geometric routing technique available in NLSR. The best resource to understand how it works is its white paper. \cite{HyperbolicASF}
64
Nick Gordonf3a9ecb2017-01-24 13:55:14 -060065The \texttt{hyperbolic} section in the configuration file is used to enable/disable hyperbolic routing and to specify the hyperbolic coordinates of the router.
66
67The \texttt{state} parameter indicates whether or not hyperbolic routing should be enabled. There are three possible values for this parameter: \texttt{on}, \texttt{off}, and \texttt{dry-run}. \texttt{on} enables hyperbolic routing; \texttt{off} disables hyperbolic routing (link-state routing is used); \texttt{dry-run} uses link-state routing to populate NFD's FIB, but will also perform the hyperbolic routing calculations and write them to the log file for debugging purposes.
68
Ashlesh Gawande69903472017-06-28 13:30:46 -050069The \texttt{radius} parameter defines the router's radius in the hyperbolic coordinate system and \texttt{angle} defines the router's angle(s) in the hyperbolic coordinate system. There can be (d-1) angular coordinates in d-dimensional hyperbolic routing. Currently the testbed uses 2-dimensional hyperbolic routing with one radial and one angular coordinate.
Nick Gordonf3a9ecb2017-01-24 13:55:14 -060070
71\subsection{FIB Section}
72
73The \texttt{fib} section in the configuration file contains two parameters: one to limit the number of next hops registered for each name prefix, and the amount of time to wait before calculating the routing table after a request is made.
74
75\texttt{max-faces-per-prefix} defines the maximum number of next hops that can be registered for a name prefix.
76This value is intended to reduce the FIB size for routers with a large number of neighbors.
77The default value for \texttt{max-faces-per-prefix} is \texttt{0} which indicates that all available next hops may be added to each name prefix. \texttt{max-faces-per-prefix} allows values between 0 and 60.
78
79\texttt{routing-calc-interval} is the time to wait in seconds after a routing table calculation is requested before actually performing the routing table calculation.
80This parameter is intended to limit the number of routing table calculations, which may be performance intensive on some systems.
Nick Gordon221531c2017-06-08 11:44:45 -050081The default value for \texttt{routing-calc-interval} is 15 seconds and can be configured to be in the range of 0 to 15 seconds.
Nick Gordonf3a9ecb2017-01-24 13:55:14 -060082
83\subsection{Advertising Section}
84
85The \texttt{advertising} section includes a list of name prefixes that the router should advertise as reachable through itself.
86Each name prefix that should be advertised should be in the following format: \texttt{prefix /name/to/advertise}.
Nick Gordon221531c2017-06-08 11:44:45 -050087This section allows for static configuration of the advertised prefixes, but prefixes can be dynamically advertised and withdrawn using the Prefix Update Processor.
Nick Gordonf3a9ecb2017-01-24 13:55:14 -060088
89\subsection{Security Section}
90
91The \texttt{security} section of the configuration file includes the configuration for NLSR's validators and the locations of certificates that should be published by the router.
92
93The \texttt{validator} subsection includes the configuration for the validator used by NLSR to verify the signatures of Hello Data and LSA Data.
94
95The \texttt{prefix-update-validator} configures the validator used by the Prefix Update Processor to verify that prefix update command Interests are signed by the operator of the router.
96
97The \texttt{security} section also allows configuration of which certificates should be published by the router using the \texttt{cert-to-publish} keyword.
98If the router should publish a certificate, the absolute path for the certificate file can be configured as \texttt{cert-to-publish} value.