Requirements
------------

Contributions to NLSR must be licensed under GPL 3.0 or compatible license.  If you are
choosing GPL 3.0, please use the following license boilerplate in all `.hpp` and `.cpp`
files:

Include the following header in all `.hpp` and `.cpp` files:

    /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
    /*
     * Copyright (c) [Year(s)], [Copyright Holder(s)].
     *
     * This file is part of NLSR (Named-data Link State Routing).
     * See AUTHORS.md for complete list of NLSR authors and contributors.
     *
     * NLSR is free software: you can redistribute it and/or modify it under the terms
     * of the GNU General Public License as published by the Free Software Foundation,
     * either version 3 of the License, or (at your option) any later version.
     *
     * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     * PURPOSE.  See the GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License along with
     * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
     */

If you are affiliated with an NSF-supported NDN project institution,
please use the [NDN Team License Boilerplate]
(https://redmine.named-data.net/projects/nlsr/wiki/NDN_Team_License_Boilerplate_(NLSR)).

Recommendations
---------------

NLSR code is subject to the code style, defined here:
https://redmine.named-data.net/projects/nfd/wiki/CodeStyle

NLSR Developer's guide can be found here:
https://github.com/named-data/NLSR/blob/developers-guide/NLSR-Developers-Guide.pdf
