From e8af69739a629708d2c155ebcd4fa57b8fd5006a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 6 May 2014 17:02:11 +0200 Subject: timesyncd: read server settings from a configuration file Also, allow compiling in a default server list via a configure command line item. --- src/timesync/timesyncd.h | 97 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/timesync/timesyncd.h (limited to 'src/timesync/timesyncd.h') diff --git a/src/timesync/timesyncd.h b/src/timesync/timesyncd.h new file mode 100644 index 0000000000..6dd1388ea8 --- /dev/null +++ b/src/timesync/timesyncd.h @@ -0,0 +1,97 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/*** + This file is part of systemd. + + Copyright 2014 Kay Sievers, Lennart Poettering + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see . +***/ + +#include "list.h" +#include "socket-util.h" +#include "ratelimit.h" +#include "sd-event.h" +#include "sd-resolve.h" + +typedef struct Manager Manager; +typedef struct ServerAddress ServerAddress; +typedef struct ServerName ServerName; + +struct ServerAddress { + union sockaddr_union sockaddr; + socklen_t socklen; + LIST_FIELDS(ServerAddress, addresses); +}; + +struct ServerName { + char *string; + LIST_HEAD(ServerAddress, addresses); + LIST_FIELDS(ServerName, names); +}; + +struct Manager { + sd_event *event; + sd_resolve *resolve; + + LIST_HEAD(ServerName, servers); + + RateLimit ratelimit; + + /* peer */ + sd_resolve_query *resolve_query; + sd_event_source *event_receive; + ServerName *current_server_name; + ServerAddress *current_server_address; + int server_socket; + uint64_t packet_count; + sd_event_source *event_timeout; + + /* last sent packet */ + struct timespec trans_time_mon; + struct timespec trans_time; + usec_t retry_interval; + bool pending; + + /* poll timer */ + sd_event_source *event_timer; + usec_t poll_interval_usec; + bool poll_resync; + + /* history data */ + struct { + double offset; + double delay; + } samples[8]; + unsigned int samples_idx; + double samples_jitter; + + /* last change */ + bool jumped; + int drift_ppm; + + /* watch for time changes */ + sd_event_source *event_clock_watch; + int clock_watch_fd; + + /* Retry connections */ + sd_event_source *event_retry; + + /* Handle SIGINT/SIGTERM */ + sd_event_source *sigterm, *sigint; +}; + +const struct ConfigPerfItem* timesyncd_gperf_lookup(const char *key, unsigned length); + +int config_parse_servers(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); -- cgit v1.2.3-54-g00ecf