]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/timesync/timesyncd-server.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2014 Kay Sievers, Lennart Poettering
8 #include "alloc-util.h"
9 #include "timesyncd-server.h"
11 int server_address_new(
14 const union sockaddr_union
*sockaddr
,
17 ServerAddress
*a
, *tail
;
21 assert(socklen
>= offsetof(struct sockaddr
, sa_data
));
22 assert(socklen
<= sizeof(union sockaddr_union
));
24 a
= new0(ServerAddress
, 1);
28 memcpy(&a
->sockaddr
, sockaddr
, socklen
);
31 LIST_FIND_TAIL(addresses
, n
->addresses
, tail
);
32 LIST_INSERT_AFTER(addresses
, n
->addresses
, tail
, a
);
41 ServerAddress
* server_address_free(ServerAddress
*a
) {
46 LIST_REMOVE(addresses
, a
->name
->addresses
, a
);
48 if (a
->name
->manager
&& a
->name
->manager
->current_server_address
== a
)
49 manager_set_server_address(a
->name
->manager
, NULL
);
66 n
= new0(ServerName
, 1);
71 n
->string
= strdup(string
);
77 if (type
== SERVER_SYSTEM
) {
78 LIST_FIND_TAIL(names
, m
->system_servers
, tail
);
79 LIST_INSERT_AFTER(names
, m
->system_servers
, tail
, n
);
80 } else if (type
== SERVER_LINK
) {
81 LIST_FIND_TAIL(names
, m
->link_servers
, tail
);
82 LIST_INSERT_AFTER(names
, m
->link_servers
, tail
, n
);
83 } else if (type
== SERVER_FALLBACK
) {
84 LIST_FIND_TAIL(names
, m
->fallback_servers
, tail
);
85 LIST_INSERT_AFTER(names
, m
->fallback_servers
, tail
, n
);
87 assert_not_reached("Unknown server type");
91 if (type
!= SERVER_FALLBACK
&&
92 m
->current_server_name
&&
93 m
->current_server_name
->type
== SERVER_FALLBACK
)
94 manager_set_server_name(m
, NULL
);
96 log_debug("Added new server %s.", string
);
104 ServerName
*server_name_free(ServerName
*n
) {
108 server_name_flush_addresses(n
);
111 if (n
->type
== SERVER_SYSTEM
)
112 LIST_REMOVE(names
, n
->manager
->system_servers
, n
);
113 else if (n
->type
== SERVER_LINK
)
114 LIST_REMOVE(names
, n
->manager
->link_servers
, n
);
115 else if (n
->type
== SERVER_FALLBACK
)
116 LIST_REMOVE(names
, n
->manager
->fallback_servers
, n
);
118 assert_not_reached("Unknown server type");
120 if (n
->manager
->current_server_name
== n
)
121 manager_set_server_name(n
->manager
, NULL
);
124 log_debug("Removed server %s.", n
->string
);
130 void server_name_flush_addresses(ServerName
*n
) {
134 server_address_free(n
->addresses
);