# Copyright (c) 2015,  Regents of the University of California,
#                      Arizona Board of Regents,
#                      Colorado State University,
#                      University Pierre & Marie Curie, Sorbonne University,
#                      Washington University in St. Louis,
#                      Beijing Institute of Technology,
#                      The University of Memphis.
#
# This file is part of NFD (Named Data Networking Forwarding Daemon).
# See AUTHORS.md for complete list of NFD authors and contributors.
#
# NFD 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.
#
# NFD 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
# NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
#
# Author: Eric Newberry <enewberry@email.arizona.edu>

[Unit]
Description=NDN Autoconfig Server
Documentation=man:nfd-autoconfig-server
Requires=nfd.service
After=nfd.service

[Service]
Environment=HOME=/var/lib/ndn/ndn-autoconfig-server
EnvironmentFile=-/etc/default/ndn-autoconfig-server
User=ndn
Group=ndn
ExecStart=/bin/sh -ec 'if [ "$FACE_URI" != "" ]; then exec /usr/bin/ndn-autoconfig-server $ROUTABLE_PREFIXES $FACE_URI; fi'
Restart=on-failure
ProtectSystem=full
PrivateTmp=yes
PrivateDevices=yes
ProtectHome=yes

[Install]
WantedBy=multi-user.target
