]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/timesync/timesyncd-server.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 #include "alloc-util.h"
4 #include "timesyncd-server.h"
6 int server_address_new(
9 const union sockaddr_union
*sockaddr
,
12 ServerAddress
*a
, *tail
;
16 assert(socklen
>= offsetof(struct sockaddr
, sa_data
));
17 assert(socklen
<= sizeof(union sockaddr_union
));
19 a
= new0(ServerAddress
, 1);
23 memcpy(&a
->sockaddr
, sockaddr
, socklen
);
26 LIST_FIND_TAIL(addresses
, n
->addresses
, tail
);
27 LIST_INSERT_AFTER(addresses
, n
->addresses
, tail
, a
);
36 ServerAddress
* server_address_free(ServerAddress
*a
) {
41 LIST_REMOVE(addresses
, a
->name
->addresses
, a
);
43 if (a
->name
->manager
&& a
->name
->manager
->current_server_address
== a
)
44 manager_set_server_address(a
->name
->manager
, NULL
);
61 n
= new0(ServerName
, 1);
66 n
->string
= strdup(string
);
72 if (type
== SERVER_SYSTEM
) {
73 LIST_FIND_TAIL(names
, m
->system_servers
, tail
);
74 LIST_INSERT_AFTER(names
, m
->system_servers
, tail
, n
);
75 } else if (type
== SERVER_LINK
) {
76 LIST_FIND_TAIL(names
, m
->link_servers
, tail
);
77 LIST_INSERT_AFTER(names
, m
->link_servers
, tail
, n
);
78 } else if (type
== SERVER_FALLBACK
) {
79 LIST_FIND_TAIL(names
, m
->fallback_servers
, tail
);
80 LIST_INSERT_AFTER(names
, m
->fallback_servers
, tail
, n
);
82 assert_not_reached("Unknown server type");
86 if (type
!= SERVER_FALLBACK
&&
87 m
->current_server_name
&&
88 m
->current_server_name
->type
== SERVER_FALLBACK
)
89 manager_set_server_name(m
, NULL
);
91 log_debug("Added new server %s.", string
);
99 ServerName
*server_name_free(ServerName
*n
) {
103 server_name_flush_addresses(n
);
106 if (n
->type
== SERVER_SYSTEM
)
107 LIST_REMOVE(names
, n
->manager
->system_servers
, n
);
108 else if (n
->type
== SERVER_LINK
)
109 LIST_REMOVE(names
, n
->manager
->link_servers
, n
);
110 else if (n
->type
== SERVER_FALLBACK
)
111 LIST_REMOVE(names
, n
->manager
->fallback_servers
, n
);
113 assert_not_reached("Unknown server type");
115 if (n
->manager
->current_server_name
== n
)
116 manager_set_server_name(n
->manager
, NULL
);
119 log_debug("Removed server %s.", n
->string
);
125 void server_name_flush_addresses(ServerName
*n
) {
129 server_address_free(n
->addresses
);