mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
73 lines
2.4 KiB
Python
Executable File
73 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
# vim:fenc=utf-8
|
|
#
|
|
# Copyright (C) 2020 Freie Universität Berlin
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU Lesser
|
|
# General Public License v2.1. See the file LICENSE in the top level
|
|
# directory for more details.
|
|
|
|
import argparse
|
|
import os
|
|
|
|
import kea
|
|
import util
|
|
|
|
__author__ = "Martine S. Lenders"
|
|
__copyright__ = "Copyright (C) 2020 Freie Universität Berlin"
|
|
__credits__ = ["Martine S. Lenders"]
|
|
__license__ = "LGPLv2.1"
|
|
__version__ = "0.0.1"
|
|
__maintainer__ = "Martine S. Lenders"
|
|
__email__ = "m.lenders@fu-berlin.de"
|
|
__status__ = "Experimental"
|
|
|
|
|
|
DEFAULT_NEXT_HOP = "fe80::2"
|
|
DEFAULT_DELEGATED_LEN = 64
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-d", "--daemonized", action="store_true",
|
|
help="Run server in background")
|
|
parser.add_argument("-p", "--pidfile", nargs="?",
|
|
help="PID file for the server. Required with -d.")
|
|
parser.add_argument(
|
|
"-n", "--next-hop", default=DEFAULT_NEXT_HOP, nargs="?",
|
|
help="Next hop address for application (default: fe80::2)"
|
|
)
|
|
parser.add_argument(
|
|
"-g", "--delegated-len", default=DEFAULT_DELEGATED_LEN, nargs="?",
|
|
type=int,
|
|
help="The prefix length delegated by the DHCPv6 server. "
|
|
"Must be greater or equal to the prefix length of the subnet. "
|
|
"This may differ from the prefix length provided in subnet more "
|
|
"to understand as a template from which to generate the "
|
|
"delegated prefixes from. "
|
|
"(default: 64)"
|
|
)
|
|
parser.add_argument(
|
|
"interface", help="Interface to bind DHCPv6 server to"
|
|
)
|
|
parser.add_argument(
|
|
"subnet", type=util.split_prefix,
|
|
help="Subnet to delegate (must have format <prefix>/<prefix_len>)"
|
|
)
|
|
args = parser.parse_args()
|
|
if "SUDO_USER" not in os.environ:
|
|
raise PermissionError("Must be run with sudo")
|
|
if args.delegated_len < args.subnet[1]:
|
|
raise ValueError("delegated_len {} is lesser than prefix length {}"
|
|
.format(args.delegated_len, args.subnet[1]))
|
|
config = kea.KeaConfig(args.interface, args.subnet[0], args.subnet[1],
|
|
args.delegated_len)
|
|
server = kea.KeaServer(config, args.next_hop, daemonized=args.daemonized,
|
|
pidfile=args.pidfile)
|
|
server.run()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|