"""
The basic configuration objects
"""
import grp
import logging
from dhcpkit.common.server.config_elements import ConfigSection
from dhcpkit.ipv6.server.message_handler import MessageHandler
from dhcpkit.ipv6.server.utils import determine_local_duid
logger = logging.getLogger(__name__)
[docs]class MainConfig(ConfigSection):
"""
The top level configuration element
"""
[docs] def clean_config_section(self):
"""
Clean up the config, making sure we have user, group and DUID
"""
if self.section.group is None:
# No group specified
try:
self.section.group = grp.getgrgid(self.section.user.pw_gid)
except KeyError:
raise ValueError("User {} has a non-existent primary group {}".format(self.section.user.pw_name,
self.section.user.pw_gid))
if not self.section.server_id:
self.section.server_id = determine_local_duid()
[docs] def create_message_handler(self) -> MessageHandler:
"""
Create a message handler based on this configuration.
:return: The message handler
"""
sub_filters = []
for filter_factory in self.section.filter_factories:
sub_filters.append(filter_factory())
sub_handlers = []
for handler_factory in self.section.handler_factories:
sub_handlers.append(handler_factory())
return MessageHandler(self.section.server_id, sub_filters, sub_handlers, self.section.allow_rapid_commit)
[docs]class StatisticsConfig(ConfigSection):
"""
Configuration of the statistics gatherer
"""