tree-wide: define iterator inside of the macro
This commit is contained in:
parent
12375b95dd
commit
90e74a66e6
|
@ -1500,7 +1500,6 @@ static int do_unit_files(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_hashmap_free_ Hashmap *unit_ids = NULL;
|
_cleanup_hashmap_free_ Hashmap *unit_ids = NULL;
|
||||||
_cleanup_hashmap_free_ Hashmap *unit_names = NULL;
|
_cleanup_hashmap_free_ Hashmap *unit_names = NULL;
|
||||||
char **patterns = strv_skip(argv, 1);
|
char **patterns = strv_skip(argv, 1);
|
||||||
Iterator i;
|
|
||||||
const char *k, *dst;
|
const char *k, *dst;
|
||||||
char **v;
|
char **v;
|
||||||
int r;
|
int r;
|
||||||
|
@ -1513,7 +1512,7 @@ static int do_unit_files(int argc, char *argv[], void *userdata) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "unit_file_build_name_map() failed: %m");
|
return log_error_errno(r, "unit_file_build_name_map() failed: %m");
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(dst, k, unit_ids, i) {
|
HASHMAP_FOREACH_KEY(dst, k, unit_ids) {
|
||||||
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
||||||
!strv_fnmatch_or_empty(patterns, dst, FNM_NOESCAPE))
|
!strv_fnmatch_or_empty(patterns, dst, FNM_NOESCAPE))
|
||||||
continue;
|
continue;
|
||||||
|
@ -1521,7 +1520,7 @@ static int do_unit_files(int argc, char *argv[], void *userdata) {
|
||||||
printf("ids: %s → %s\n", k, dst);
|
printf("ids: %s → %s\n", k, dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, k, unit_names, i) {
|
HASHMAP_FOREACH_KEY(v, k, unit_names) {
|
||||||
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
||||||
!strv_fnmatch_strv_or_empty(patterns, v, FNM_NOESCAPE))
|
!strv_fnmatch_strv_or_empty(patterns, v, FNM_NOESCAPE))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -407,17 +407,25 @@ static inline char** ordered_hashmap_get_strv(OrderedHashmap *h) {
|
||||||
* the entries were inserted.
|
* the entries were inserted.
|
||||||
* It is safe to remove the current entry.
|
* It is safe to remove the current entry.
|
||||||
*/
|
*/
|
||||||
#define HASHMAP_FOREACH(e, h, i) \
|
#define _HASHMAP_FOREACH(e, h, i) \
|
||||||
for ((i) = ITERATOR_FIRST; hashmap_iterate((h), &(i), (void**)&(e), NULL); )
|
for (Iterator i = ITERATOR_FIRST; hashmap_iterate((h), &i, (void**)&(e), NULL); )
|
||||||
|
#define HASHMAP_FOREACH(e, h) \
|
||||||
|
_HASHMAP_FOREACH(e, h, UNIQ_T(i, UNIQ))
|
||||||
|
|
||||||
#define ORDERED_HASHMAP_FOREACH(e, h, i) \
|
#define _ORDERED_HASHMAP_FOREACH(e, h, i) \
|
||||||
for ((i) = ITERATOR_FIRST; ordered_hashmap_iterate((h), &(i), (void**)&(e), NULL); )
|
for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), NULL); )
|
||||||
|
#define ORDERED_HASHMAP_FOREACH(e, h) \
|
||||||
|
_ORDERED_HASHMAP_FOREACH(e, h, UNIQ_T(i, UNIQ))
|
||||||
|
|
||||||
#define HASHMAP_FOREACH_KEY(e, k, h, i) \
|
#define _HASHMAP_FOREACH_KEY(e, k, h, i) \
|
||||||
for ((i) = ITERATOR_FIRST; hashmap_iterate((h), &(i), (void**)&(e), (const void**) &(k)); )
|
for (Iterator i = ITERATOR_FIRST; hashmap_iterate((h), &i, (void**)&(e), (const void**) &(k)); )
|
||||||
|
#define HASHMAP_FOREACH_KEY(e, k, h) \
|
||||||
|
_HASHMAP_FOREACH_KEY(e, k, h, UNIQ_T(i, UNIQ))
|
||||||
|
|
||||||
#define ORDERED_HASHMAP_FOREACH_KEY(e, k, h, i) \
|
#define _ORDERED_HASHMAP_FOREACH_KEY(e, k, h, i) \
|
||||||
for ((i) = ITERATOR_FIRST; ordered_hashmap_iterate((h), &(i), (void**)&(e), (const void**) &(k)); )
|
for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), (const void**) &(k)); )
|
||||||
|
#define ORDERED_HASHMAP_FOREACH_KEY(e, k, h) \
|
||||||
|
_ORDERED_HASHMAP_FOREACH_KEY(e, k, h, UNIQ_T(i, UNIQ))
|
||||||
|
|
||||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free);
|
DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free);
|
||||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free_free);
|
DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free_free);
|
||||||
|
|
|
@ -70,12 +70,11 @@ int ordered_set_put_strdupv(OrderedSet *s, char **l) {
|
||||||
|
|
||||||
int ordered_set_put_string_set(OrderedSet *s, OrderedSet *l) {
|
int ordered_set_put_string_set(OrderedSet *s, OrderedSet *l) {
|
||||||
int n = 0, r;
|
int n = 0, r;
|
||||||
Iterator i;
|
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
/* Like ordered_set_put_strv, but for an OrderedSet of strings */
|
/* Like ordered_set_put_strv, but for an OrderedSet of strings */
|
||||||
|
|
||||||
ORDERED_SET_FOREACH(p, l, i) {
|
ORDERED_SET_FOREACH(p, l) {
|
||||||
r = ordered_set_put_strdup(s, p);
|
r = ordered_set_put_strdup(s, p);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -88,7 +87,6 @@ int ordered_set_put_string_set(OrderedSet *s, OrderedSet *l) {
|
||||||
|
|
||||||
void ordered_set_print(FILE *f, const char *field, OrderedSet *s) {
|
void ordered_set_print(FILE *f, const char *field, OrderedSet *s) {
|
||||||
bool space = false;
|
bool space = false;
|
||||||
Iterator i;
|
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
if (ordered_set_isempty(s))
|
if (ordered_set_isempty(s))
|
||||||
|
@ -96,7 +94,7 @@ void ordered_set_print(FILE *f, const char *field, OrderedSet *s) {
|
||||||
|
|
||||||
fputs(field, f);
|
fputs(field, f);
|
||||||
|
|
||||||
ORDERED_SET_FOREACH(p, s, i)
|
ORDERED_SET_FOREACH(p, s)
|
||||||
fputs_with_space(f, p, NULL, &space);
|
fputs_with_space(f, p, NULL, &space);
|
||||||
|
|
||||||
fputc('\n', f);
|
fputc('\n', f);
|
||||||
|
|
|
@ -64,8 +64,10 @@ int ordered_set_put_strdupv(OrderedSet *s, char **l);
|
||||||
int ordered_set_put_string_set(OrderedSet *s, OrderedSet *l);
|
int ordered_set_put_string_set(OrderedSet *s, OrderedSet *l);
|
||||||
void ordered_set_print(FILE *f, const char *field, OrderedSet *s);
|
void ordered_set_print(FILE *f, const char *field, OrderedSet *s);
|
||||||
|
|
||||||
#define ORDERED_SET_FOREACH(e, s, i) \
|
#define _ORDERED_SET_FOREACH(e, s, i) \
|
||||||
for ((i) = ITERATOR_FIRST; ordered_set_iterate((s), &(i), (void**)&(e)); )
|
for (Iterator i = ITERATOR_FIRST; ordered_set_iterate((s), &i, (void**)&(e)); )
|
||||||
|
#define ORDERED_SET_FOREACH(e, s) \
|
||||||
|
_ORDERED_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
|
||||||
|
|
||||||
DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free);
|
DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free);
|
||||||
DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free_free);
|
DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free_free);
|
||||||
|
|
|
@ -135,8 +135,10 @@ int _set_put_strdupv(Set **s, char **l HASHMAP_DEBUG_PARAMS);
|
||||||
|
|
||||||
int set_put_strsplit(Set *s, const char *v, const char *separators, ExtractFlags flags);
|
int set_put_strsplit(Set *s, const char *v, const char *separators, ExtractFlags flags);
|
||||||
|
|
||||||
#define SET_FOREACH(e, s, i) \
|
#define _SET_FOREACH(e, s, i) \
|
||||||
for ((i) = ITERATOR_FIRST; set_iterate((s), &(i), (void**)&(e)); )
|
for (Iterator i = ITERATOR_FIRST; set_iterate((s), &i, (void**)&(e)); )
|
||||||
|
#define SET_FOREACH(e, s) \
|
||||||
|
_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
|
||||||
|
|
||||||
#define SET_FOREACH_MOVE(e, d, s) \
|
#define SET_FOREACH_MOVE(e, d, s) \
|
||||||
for (; ({ e = set_first(s); assert_se(!e || set_move_one(d, s, e) >= 0); e; }); )
|
for (; ({ e = set_first(s); assert_se(!e || set_move_one(d, s, e) >= 0); e; }); )
|
||||||
|
|
|
@ -145,7 +145,6 @@ static int list_bus_names(int argc, char **argv, void *userdata) {
|
||||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||||
_cleanup_hashmap_free_ Hashmap *names = NULL;
|
_cleanup_hashmap_free_ Hashmap *names = NULL;
|
||||||
_cleanup_(table_unrefp) Table *table = NULL;
|
_cleanup_(table_unrefp) Table *table = NULL;
|
||||||
Iterator iterator;
|
|
||||||
char **i, *k;
|
char **i, *k;
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
@ -247,7 +246,7 @@ static int list_bus_names(int argc, char **argv, void *userdata) {
|
||||||
|
|
||||||
table_set_header(table, arg_legend);
|
table_set_header(table, arg_legend);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, k, names, iterator) {
|
HASHMAP_FOREACH_KEY(v, k, names) {
|
||||||
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
||||||
|
|
||||||
if (v == NAME_IS_ACTIVATABLE) {
|
if (v == NAME_IS_ACTIVATABLE) {
|
||||||
|
@ -986,7 +985,6 @@ static int introspect(int argc, char **argv, void *userdata) {
|
||||||
_cleanup_(member_set_freep) Set *members = NULL;
|
_cleanup_(member_set_freep) Set *members = NULL;
|
||||||
unsigned name_width, type_width, signature_width, result_width, j, k = 0;
|
unsigned name_width, type_width, signature_width, result_width, j, k = 0;
|
||||||
Member *m, **sorted = NULL;
|
Member *m, **sorted = NULL;
|
||||||
Iterator i;
|
|
||||||
const char *xml;
|
const char *xml;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -1022,7 +1020,7 @@ static int introspect(int argc, char **argv, void *userdata) {
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
/* Second, find the current values for them */
|
/* Second, find the current values for them */
|
||||||
SET_FOREACH(m, members, i) {
|
SET_FOREACH(m, members) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
|
|
||||||
if (!streq(m->type, "property"))
|
if (!streq(m->type, "property"))
|
||||||
|
@ -1105,7 +1103,7 @@ static int introspect(int argc, char **argv, void *userdata) {
|
||||||
|
|
||||||
sorted = newa(Member*, set_size(members));
|
sorted = newa(Member*, set_size(members));
|
||||||
|
|
||||||
SET_FOREACH(m, members, i) {
|
SET_FOREACH(m, members) {
|
||||||
if (argv[3] && !streq(argv[3], m->interface))
|
if (argv[3] && !streq(argv[3], m->interface))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -582,7 +582,6 @@ static int group_compare(Group * const *a, Group * const *b) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void display(Hashmap *a) {
|
static void display(Hashmap *a) {
|
||||||
Iterator i;
|
|
||||||
Group *g;
|
Group *g;
|
||||||
Group **array;
|
Group **array;
|
||||||
signed path_columns;
|
signed path_columns;
|
||||||
|
@ -596,7 +595,7 @@ static void display(Hashmap *a) {
|
||||||
|
|
||||||
array = newa(Group*, hashmap_size(a));
|
array = newa(Group*, hashmap_size(a));
|
||||||
|
|
||||||
HASHMAP_FOREACH(g, a, i)
|
HASHMAP_FOREACH(g, a)
|
||||||
if (g->n_tasks_valid || g->cpu_valid || g->memory_valid || g->io_valid)
|
if (g->n_tasks_valid || g->cpu_valid || g->memory_valid || g->io_valid)
|
||||||
array[n++] = g;
|
array[n++] = g;
|
||||||
|
|
||||||
|
|
|
@ -850,7 +850,6 @@ static int automount_stop(Unit *u) {
|
||||||
|
|
||||||
static int automount_serialize(Unit *u, FILE *f, FDSet *fds) {
|
static int automount_serialize(Unit *u, FILE *f, FDSet *fds) {
|
||||||
Automount *a = AUTOMOUNT(u);
|
Automount *a = AUTOMOUNT(u);
|
||||||
Iterator i;
|
|
||||||
void *p;
|
void *p;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -862,9 +861,9 @@ static int automount_serialize(Unit *u, FILE *f, FDSet *fds) {
|
||||||
(void) serialize_item(f, "result", automount_result_to_string(a->result));
|
(void) serialize_item(f, "result", automount_result_to_string(a->result));
|
||||||
(void) serialize_item_format(f, "dev-id", "%lu", (unsigned long) a->dev_id);
|
(void) serialize_item_format(f, "dev-id", "%lu", (unsigned long) a->dev_id);
|
||||||
|
|
||||||
SET_FOREACH(p, a->tokens, i)
|
SET_FOREACH(p, a->tokens)
|
||||||
(void) serialize_item_format(f, "token", "%u", PTR_TO_UINT(p));
|
(void) serialize_item_format(f, "token", "%u", PTR_TO_UINT(p));
|
||||||
SET_FOREACH(p, a->expire_tokens, i)
|
SET_FOREACH(p, a->expire_tokens)
|
||||||
(void) serialize_item_format(f, "expire-token", "%u", PTR_TO_UINT(p));
|
(void) serialize_item_format(f, "expire-token", "%u", PTR_TO_UINT(p));
|
||||||
|
|
||||||
r = serialize_fd(f, fds, "pipe-fd", a->pipe_fd);
|
r = serialize_fd(f, fds, "pipe-fd", a->pipe_fd);
|
||||||
|
|
|
@ -646,14 +646,13 @@ int bpf_firewall_load_custom(Unit *u) {
|
||||||
|
|
||||||
static int attach_custom_bpf_progs(Unit *u, const char *path, int attach_type, Set **set, Set **set_installed) {
|
static int attach_custom_bpf_progs(Unit *u, const char *path, int attach_type, Set **set, Set **set_installed) {
|
||||||
BPFProgram *prog;
|
BPFProgram *prog;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
set_clear(*set_installed);
|
set_clear(*set_installed);
|
||||||
|
|
||||||
SET_FOREACH(prog, *set, i) {
|
SET_FOREACH(prog, *set) {
|
||||||
r = bpf_program_cgroup_attach(prog, attach_type, path, BPF_F_ALLOW_MULTI);
|
r = bpf_program_cgroup_attach(prog, attach_type, path, BPF_F_ALLOW_MULTI);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_unit_error_errno(u, r, "Attaching custom egress BPF program to cgroup %s failed: %m", path);
|
return log_unit_error_errno(u, r, "Attaching custom egress BPF program to cgroup %s failed: %m", path);
|
||||||
|
|
|
@ -1516,9 +1516,8 @@ CGroupMask unit_get_members_mask(Unit *u) {
|
||||||
if (u->type == UNIT_SLICE) {
|
if (u->type == UNIT_SLICE) {
|
||||||
void *v;
|
void *v;
|
||||||
Unit *member;
|
Unit *member;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, member, u->dependencies[UNIT_BEFORE], i)
|
HASHMAP_FOREACH_KEY(v, member, u->dependencies[UNIT_BEFORE])
|
||||||
if (UNIT_DEREF(member->slice) == u)
|
if (UNIT_DEREF(member->slice) == u)
|
||||||
u->cgroup_members_mask |= unit_get_subtree_mask(member); /* note that this calls ourselves again, for the children */
|
u->cgroup_members_mask |= unit_get_subtree_mask(member); /* note that this calls ourselves again, for the children */
|
||||||
}
|
}
|
||||||
|
@ -1940,7 +1939,6 @@ static int unit_attach_pid_to_cgroup_via_bus(Unit *u, pid_t pid, const char *suf
|
||||||
int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) {
|
int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) {
|
||||||
CGroupMask delegated_mask;
|
CGroupMask delegated_mask;
|
||||||
const char *p;
|
const char *p;
|
||||||
Iterator i;
|
|
||||||
void *pidp;
|
void *pidp;
|
||||||
int r, q;
|
int r, q;
|
||||||
|
|
||||||
|
@ -1970,7 +1968,7 @@ int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) {
|
||||||
delegated_mask = unit_get_delegate_mask(u);
|
delegated_mask = unit_get_delegate_mask(u);
|
||||||
|
|
||||||
r = 0;
|
r = 0;
|
||||||
SET_FOREACH(pidp, pids, i) {
|
SET_FOREACH(pidp, pids) {
|
||||||
pid_t pid = PTR_TO_PID(pidp);
|
pid_t pid = PTR_TO_PID(pidp);
|
||||||
CGroupController c;
|
CGroupController c;
|
||||||
|
|
||||||
|
@ -2158,7 +2156,6 @@ static int unit_realize_cgroup_now_enable(Unit *u, ManagerState state) {
|
||||||
/* Controllers can only be disabled depth-first, from the leaves of the
|
/* Controllers can only be disabled depth-first, from the leaves of the
|
||||||
* hierarchy upwards to the unit in question. */
|
* hierarchy upwards to the unit in question. */
|
||||||
static int unit_realize_cgroup_now_disable(Unit *u, ManagerState state) {
|
static int unit_realize_cgroup_now_disable(Unit *u, ManagerState state) {
|
||||||
Iterator i;
|
|
||||||
Unit *m;
|
Unit *m;
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
|
@ -2167,7 +2164,7 @@ static int unit_realize_cgroup_now_disable(Unit *u, ManagerState state) {
|
||||||
if (u->type != UNIT_SLICE)
|
if (u->type != UNIT_SLICE)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, m, u->dependencies[UNIT_BEFORE], i) {
|
HASHMAP_FOREACH_KEY(v, m, u->dependencies[UNIT_BEFORE]) {
|
||||||
CGroupMask target_mask, enable_mask, new_target_mask, new_enable_mask;
|
CGroupMask target_mask, enable_mask, new_target_mask, new_enable_mask;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -2331,14 +2328,13 @@ void unit_add_family_to_cgroup_realize_queue(Unit *u) {
|
||||||
* masks. */
|
* masks. */
|
||||||
|
|
||||||
do {
|
do {
|
||||||
Iterator i;
|
|
||||||
Unit *m;
|
Unit *m;
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
/* Children of u likely changed when we're called */
|
/* Children of u likely changed when we're called */
|
||||||
u->cgroup_members_mask_valid = false;
|
u->cgroup_members_mask_valid = false;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, m, u->dependencies[UNIT_BEFORE], i) {
|
HASHMAP_FOREACH_KEY(v, m, u->dependencies[UNIT_BEFORE]) {
|
||||||
/* Skip units that have a dependency on the slice but aren't actually in it. */
|
/* Skip units that have a dependency on the slice but aren't actually in it. */
|
||||||
if (UNIT_DEREF(m->slice) != u)
|
if (UNIT_DEREF(m->slice) != u)
|
||||||
continue;
|
continue;
|
||||||
|
@ -3527,10 +3523,9 @@ void unit_invalidate_cgroup_bpf(Unit *u) {
|
||||||
* list of our children includes our own. */
|
* list of our children includes our own. */
|
||||||
if (u->type == UNIT_SLICE) {
|
if (u->type == UNIT_SLICE) {
|
||||||
Unit *member;
|
Unit *member;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, member, u->dependencies[UNIT_BEFORE], i)
|
HASHMAP_FOREACH_KEY(v, member, u->dependencies[UNIT_BEFORE])
|
||||||
if (UNIT_DEREF(member->slice) == u)
|
if (UNIT_DEREF(member->slice) == u)
|
||||||
unit_invalidate_cgroup_bpf(member);
|
unit_invalidate_cgroup_bpf(member);
|
||||||
}
|
}
|
||||||
|
@ -3552,12 +3547,11 @@ bool unit_cgroup_delegate(Unit *u) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void manager_invalidate_startup_units(Manager *m) {
|
void manager_invalidate_startup_units(Manager *m) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
SET_FOREACH(u, m->startup_units, i)
|
SET_FOREACH(u, m->startup_units)
|
||||||
unit_invalidate_cgroup(u, CGROUP_MASK_CPU|CGROUP_MASK_IO|CGROUP_MASK_BLKIO);
|
unit_invalidate_cgroup(u, CGROUP_MASK_CPU|CGROUP_MASK_IO|CGROUP_MASK_BLKIO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,10 +79,9 @@ static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, Var
|
||||||
else if (p.user_name)
|
else if (p.user_name)
|
||||||
r = dynamic_user_lookup_name(m, p.user_name, &found_uid);
|
r = dynamic_user_lookup_name(m, p.user_name, &found_uid);
|
||||||
else {
|
else {
|
||||||
Iterator i;
|
|
||||||
DynamicUser *d;
|
DynamicUser *d;
|
||||||
|
|
||||||
HASHMAP_FOREACH(d, m->dynamic_users, i) {
|
HASHMAP_FOREACH(d, m->dynamic_users) {
|
||||||
r = dynamic_user_current(d, &uid);
|
r = dynamic_user_current(d, &uid);
|
||||||
if (r == -EAGAIN) /* not realized yet? */
|
if (r == -EAGAIN) /* not realized yet? */
|
||||||
continue;
|
continue;
|
||||||
|
@ -189,9 +188,8 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
|
||||||
r = dynamic_user_lookup_name(m, p.group_name, (uid_t*) &found_gid);
|
r = dynamic_user_lookup_name(m, p.group_name, (uid_t*) &found_gid);
|
||||||
else {
|
else {
|
||||||
DynamicUser *d;
|
DynamicUser *d;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(d, m->dynamic_users, i) {
|
HASHMAP_FOREACH(d, m->dynamic_users) {
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
|
|
||||||
r = dynamic_user_current(d, &uid);
|
r = dynamic_user_current(d, &uid);
|
||||||
|
|
|
@ -360,7 +360,6 @@ static int property_get_syscall_filter(
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
Iterator i;
|
|
||||||
void *id, *val;
|
void *id, *val;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -377,7 +376,7 @@ static int property_get_syscall_filter(
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
HASHMAP_FOREACH_KEY(val, id, c->syscall_filter, i) {
|
HASHMAP_FOREACH_KEY(val, id, c->syscall_filter) {
|
||||||
_cleanup_free_ char *name = NULL;
|
_cleanup_free_ char *name = NULL;
|
||||||
const char *e = NULL;
|
const char *e = NULL;
|
||||||
char *s;
|
char *s;
|
||||||
|
@ -430,7 +429,6 @@ static int property_get_syscall_archs(
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
Iterator i;
|
|
||||||
void *id;
|
void *id;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -439,7 +437,7 @@ static int property_get_syscall_archs(
|
||||||
assert(c);
|
assert(c);
|
||||||
|
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
SET_FOREACH(id, c->syscall_archs, i) {
|
SET_FOREACH(id, c->syscall_archs) {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
name = seccomp_arch_to_string(PTR_TO_UINT32(id) - 1);
|
name = seccomp_arch_to_string(PTR_TO_UINT32(id) - 1);
|
||||||
|
@ -526,7 +524,6 @@ static int property_get_address_families(
|
||||||
|
|
||||||
ExecContext *c = userdata;
|
ExecContext *c = userdata;
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Iterator i;
|
|
||||||
void *af;
|
void *af;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -542,7 +539,7 @@ static int property_get_address_families(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(af, c->address_families, i) {
|
SET_FOREACH(af, c->address_families) {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
name = af_to_name(PTR_TO_INT(af));
|
name = af_to_name(PTR_TO_INT(af));
|
||||||
|
@ -759,7 +756,6 @@ static int property_get_set_credential(
|
||||||
|
|
||||||
ExecContext *c = userdata;
|
ExecContext *c = userdata;
|
||||||
ExecSetCredential *sc;
|
ExecSetCredential *sc;
|
||||||
Iterator iterator;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
@ -771,7 +767,7 @@ static int property_get_set_credential(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(sc, c->set_credentials, iterator) {
|
HASHMAP_FOREACH(sc, c->set_credentials) {
|
||||||
|
|
||||||
r = sd_bus_message_open_container(reply, 'r', "say");
|
r = sd_bus_message_open_container(reply, 'r', "say");
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
|
@ -164,14 +164,13 @@ static int bus_job_enumerate(sd_bus *bus, const char *path, void *userdata, char
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
unsigned k = 0;
|
unsigned k = 0;
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
|
|
||||||
l = new0(char*, hashmap_size(m->jobs)+1);
|
l = new0(char*, hashmap_size(m->jobs)+1);
|
||||||
if (!l)
|
if (!l)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, m->jobs, i) {
|
HASHMAP_FOREACH(j, m->jobs) {
|
||||||
l[k] = job_dbus_path(j);
|
l[k] = job_dbus_path(j);
|
||||||
if (!l[k])
|
if (!l[k])
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -1058,7 +1058,6 @@ static int list_units_filtered(sd_bus_message *message, void *userdata, sd_bus_e
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
const char *k;
|
const char *k;
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -1079,7 +1078,7 @@ static int list_units_filtered(sd_bus_message *message, void *userdata, sd_bus_e
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(u, k, m->units, i) {
|
HASHMAP_FOREACH_KEY(u, k, m->units) {
|
||||||
if (k != u->id)
|
if (k != u->id)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1139,7 +1138,6 @@ static int method_list_units_by_patterns(sd_bus_message *message, void *userdata
|
||||||
static int method_list_jobs(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_list_jobs(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -1160,7 +1158,7 @@ static int method_list_jobs(sd_bus_message *message, void *userdata, sd_bus_erro
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, m->jobs, i) {
|
HASHMAP_FOREACH(j, m->jobs) {
|
||||||
_cleanup_free_ char *unit_path = NULL, *job_path = NULL;
|
_cleanup_free_ char *unit_path = NULL, *job_path = NULL;
|
||||||
|
|
||||||
job_path = job_dbus_path(j);
|
job_path = job_dbus_path(j);
|
||||||
|
@ -1759,7 +1757,6 @@ static int method_get_dynamic_users(sd_bus_message *message, void *userdata, sd_
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
DynamicUser *d;
|
DynamicUser *d;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -1778,7 +1775,7 @@ static int method_get_dynamic_users(sd_bus_message *message, void *userdata, sd_
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(d, m->dynamic_users, i) {
|
HASHMAP_FOREACH(d, m->dynamic_users) {
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
|
|
||||||
r = dynamic_user_current(d, &uid);
|
r = dynamic_user_current(d, &uid);
|
||||||
|
@ -1804,7 +1801,6 @@ static int list_unit_files_by_patterns(sd_bus_message *message, void *userdata,
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
UnitFileList *item;
|
UnitFileList *item;
|
||||||
Hashmap *h;
|
Hashmap *h;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -1832,7 +1828,7 @@ static int list_unit_files_by_patterns(sd_bus_message *message, void *userdata,
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
HASHMAP_FOREACH(item, h, i) {
|
HASHMAP_FOREACH(item, h) {
|
||||||
|
|
||||||
r = sd_bus_message_append(reply, "(ss)", item->path, unit_file_state_to_string(item->state));
|
r = sd_bus_message_append(reply, "(ss)", item->path, unit_file_state_to_string(item->state));
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
|
@ -42,7 +42,6 @@ static int property_get_exit_status_set(
|
||||||
|
|
||||||
const ExitStatusSet *status_set = userdata;
|
const ExitStatusSet *status_set = userdata;
|
||||||
unsigned n;
|
unsigned n;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
@ -57,7 +56,7 @@ static int property_get_exit_status_set(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
BITMAP_FOREACH(n, &status_set->status, i) {
|
BITMAP_FOREACH(n, &status_set->status) {
|
||||||
assert(n < 256);
|
assert(n < 256);
|
||||||
|
|
||||||
r = sd_bus_message_append_basic(reply, 'i', &n);
|
r = sd_bus_message_append_basic(reply, 'i', &n);
|
||||||
|
@ -73,7 +72,7 @@ static int property_get_exit_status_set(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
BITMAP_FOREACH(n, &status_set->signal, i) {
|
BITMAP_FOREACH(n, &status_set->signal) {
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
str = signal_to_string(n);
|
str = signal_to_string(n);
|
||||||
|
|
|
@ -103,7 +103,6 @@ static int property_get_names(
|
||||||
sd_bus_error *error) {
|
sd_bus_error *error) {
|
||||||
|
|
||||||
Unit *u = userdata;
|
Unit *u = userdata;
|
||||||
Iterator i;
|
|
||||||
const char *t;
|
const char *t;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -119,7 +118,7 @@ static int property_get_names(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(t, u->aliases, i) {
|
SET_FOREACH(t, u->aliases) {
|
||||||
r = sd_bus_message_append(reply, "s", t);
|
r = sd_bus_message_append(reply, "s", t);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -157,7 +156,6 @@ static int property_get_dependencies(
|
||||||
sd_bus_error *error) {
|
sd_bus_error *error) {
|
||||||
|
|
||||||
Hashmap **h = userdata;
|
Hashmap **h = userdata;
|
||||||
Iterator j;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
@ -170,7 +168,7 @@ static int property_get_dependencies(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, u, *h, j) {
|
HASHMAP_FOREACH_KEY(v, u, *h) {
|
||||||
r = sd_bus_message_append(reply, "s", u->id);
|
r = sd_bus_message_append(reply, "s", u->id);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -190,7 +188,6 @@ static int property_get_requires_mounts_for(
|
||||||
|
|
||||||
Hashmap **h = userdata;
|
Hashmap **h = userdata;
|
||||||
const char *p;
|
const char *p;
|
||||||
Iterator j;
|
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -202,7 +199,7 @@ static int property_get_requires_mounts_for(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, p, *h, j) {
|
HASHMAP_FOREACH_KEY(v, p, *h) {
|
||||||
r = sd_bus_message_append(reply, "s", p);
|
r = sd_bus_message_append(reply, "s", p);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -1729,7 +1726,6 @@ int bus_unit_queue_job(
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
_cleanup_free_ char *job_path = NULL, *unit_path = NULL;
|
_cleanup_free_ char *job_path = NULL, *unit_path = NULL;
|
||||||
_cleanup_set_free_ Set *affected = NULL;
|
_cleanup_set_free_ Set *affected = NULL;
|
||||||
Iterator i;
|
|
||||||
Job *j, *a;
|
Job *j, *a;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -1808,7 +1804,7 @@ int bus_unit_queue_job(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(a, affected, i) {
|
SET_FOREACH(a, affected) {
|
||||||
|
|
||||||
if (a->id == j->id)
|
if (a->id == j->id)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -457,14 +457,13 @@ static int bus_unit_enumerate(sd_bus *bus, const char *path, void *userdata, cha
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
unsigned k = 0;
|
unsigned k = 0;
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
|
|
||||||
l = new0(char*, hashmap_size(m->units)+1);
|
l = new0(char*, hashmap_size(m->units)+1);
|
||||||
if (!l)
|
if (!l)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
HASHMAP_FOREACH(u, m->units, i) {
|
HASHMAP_FOREACH(u, m->units) {
|
||||||
l[k] = unit_dbus_path(u);
|
l[k] = unit_dbus_path(u);
|
||||||
if (!l[k])
|
if (!l[k])
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -767,7 +766,6 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bus_setup_api(Manager *m, sd_bus *bus) {
|
static int bus_setup_api(Manager *m, sd_bus *bus) {
|
||||||
Iterator i;
|
|
||||||
char *name;
|
char *name;
|
||||||
Unit *u;
|
Unit *u;
|
||||||
int r;
|
int r;
|
||||||
|
@ -787,7 +785,7 @@ static int bus_setup_api(Manager *m, sd_bus *bus) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(u, name, m->watch_bus, i) {
|
HASHMAP_FOREACH_KEY(u, name, m->watch_bus) {
|
||||||
r = unit_install_bus_match(u, bus, name);
|
r = unit_install_bus_match(u, bus, name);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_error_errno(r, "Failed to subscribe to NameOwnerChanged signal for '%s': %m", name);
|
log_error_errno(r, "Failed to subscribe to NameOwnerChanged signal for '%s': %m", name);
|
||||||
|
@ -976,7 +974,6 @@ int bus_init_private(Manager *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void destroy_bus(Manager *m, sd_bus **bus) {
|
static void destroy_bus(Manager *m, sd_bus **bus) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
Job *j;
|
Job *j;
|
||||||
|
|
||||||
|
@ -987,7 +984,7 @@ static void destroy_bus(Manager *m, sd_bus **bus) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Make sure all bus slots watching names are released. */
|
/* Make sure all bus slots watching names are released. */
|
||||||
HASHMAP_FOREACH(u, m->watch_bus, i) {
|
HASHMAP_FOREACH(u, m->watch_bus) {
|
||||||
if (u->match_bus_slot && sd_bus_slot_get_bus(u->match_bus_slot) == *bus)
|
if (u->match_bus_slot && sd_bus_slot_get_bus(u->match_bus_slot) == *bus)
|
||||||
u->match_bus_slot = sd_bus_slot_unref(u->match_bus_slot);
|
u->match_bus_slot = sd_bus_slot_unref(u->match_bus_slot);
|
||||||
if (u->get_name_owner_slot && sd_bus_slot_get_bus(u->get_name_owner_slot) == *bus)
|
if (u->get_name_owner_slot && sd_bus_slot_get_bus(u->get_name_owner_slot) == *bus)
|
||||||
|
@ -998,11 +995,11 @@ static void destroy_bus(Manager *m, sd_bus **bus) {
|
||||||
if (m->subscribed && sd_bus_track_get_bus(m->subscribed) == *bus)
|
if (m->subscribed && sd_bus_track_get_bus(m->subscribed) == *bus)
|
||||||
m->subscribed = sd_bus_track_unref(m->subscribed);
|
m->subscribed = sd_bus_track_unref(m->subscribed);
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, m->jobs, i)
|
HASHMAP_FOREACH(j, m->jobs)
|
||||||
if (j->bus_track && sd_bus_track_get_bus(j->bus_track) == *bus)
|
if (j->bus_track && sd_bus_track_get_bus(j->bus_track) == *bus)
|
||||||
j->bus_track = sd_bus_track_unref(j->bus_track);
|
j->bus_track = sd_bus_track_unref(j->bus_track);
|
||||||
|
|
||||||
HASHMAP_FOREACH(u, m->units, i) {
|
HASHMAP_FOREACH(u, m->units) {
|
||||||
if (u->bus_track && sd_bus_track_get_bus(u->bus_track) == *bus)
|
if (u->bus_track && sd_bus_track_get_bus(u->bus_track) == *bus)
|
||||||
u->bus_track = sd_bus_track_unref(u->bus_track);
|
u->bus_track = sd_bus_track_unref(u->bus_track);
|
||||||
|
|
||||||
|
@ -1060,7 +1057,6 @@ void bus_done(Manager *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int bus_fdset_add_all(Manager *m, FDSet *fds) {
|
int bus_fdset_add_all(Manager *m, FDSet *fds) {
|
||||||
Iterator i;
|
|
||||||
sd_bus *b;
|
sd_bus *b;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
@ -1083,7 +1079,7 @@ int bus_fdset_add_all(Manager *m, FDSet *fds) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(b, m->private_buses, i) {
|
SET_FOREACH(b, m->private_buses) {
|
||||||
fd = sd_bus_get_fd(b);
|
fd = sd_bus_get_fd(b);
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
fd = fdset_put_dup(fds, fd);
|
fd = fdset_put_dup(fds, fd);
|
||||||
|
@ -1105,12 +1101,11 @@ int bus_foreach_bus(
|
||||||
int (*send_message)(sd_bus *bus, void *userdata),
|
int (*send_message)(sd_bus *bus, void *userdata),
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
Iterator i;
|
|
||||||
sd_bus *b;
|
sd_bus *b;
|
||||||
int r, ret = 0;
|
int r, ret = 0;
|
||||||
|
|
||||||
/* Send to all direct buses, unconditionally */
|
/* Send to all direct buses, unconditionally */
|
||||||
SET_FOREACH(b, m->private_buses, i) {
|
SET_FOREACH(b, m->private_buses) {
|
||||||
|
|
||||||
/* Don't bother with enqueuing these messages to clients that haven't started yet */
|
/* Don't bother with enqueuing these messages to clients that haven't started yet */
|
||||||
if (sd_bus_is_ready(b) <= 0)
|
if (sd_bus_is_ready(b) <= 0)
|
||||||
|
@ -1191,13 +1186,12 @@ int bus_verify_set_environment_async(Manager *m, sd_bus_message *call, sd_bus_er
|
||||||
|
|
||||||
uint64_t manager_bus_n_queued_write(Manager *m) {
|
uint64_t manager_bus_n_queued_write(Manager *m) {
|
||||||
uint64_t c = 0;
|
uint64_t c = 0;
|
||||||
Iterator i;
|
|
||||||
sd_bus *b;
|
sd_bus *b;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
/* Returns the total number of messages queued for writing on all our direct and API buses. */
|
/* Returns the total number of messages queued for writing on all our direct and API buses. */
|
||||||
|
|
||||||
SET_FOREACH(b, m->private_buses, i) {
|
SET_FOREACH(b, m->private_buses) {
|
||||||
uint64_t k;
|
uint64_t k;
|
||||||
|
|
||||||
r = sd_bus_get_n_queued_write(b, &k);
|
r = sd_bus_get_n_queued_write(b, &k);
|
||||||
|
|
|
@ -468,13 +468,12 @@ static bool device_is_bound_by_mounts(Device *d, sd_device *dev) {
|
||||||
|
|
||||||
static void device_upgrade_mount_deps(Unit *u) {
|
static void device_upgrade_mount_deps(Unit *u) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
/* Let's upgrade Requires= to BindsTo= on us. (Used when SYSTEMD_MOUNT_DEVICE_BOUND is set) */
|
/* Let's upgrade Requires= to BindsTo= on us. (Used when SYSTEMD_MOUNT_DEVICE_BOUND is set) */
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REQUIRED_BY], i) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REQUIRED_BY]) {
|
||||||
if (other->type != UNIT_MOUNT)
|
if (other->type != UNIT_MOUNT)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -611,7 +611,6 @@ static DynamicUser* dynamic_user_destroy(DynamicUser *d) {
|
||||||
|
|
||||||
int dynamic_user_serialize(Manager *m, FILE *f, FDSet *fds) {
|
int dynamic_user_serialize(Manager *m, FILE *f, FDSet *fds) {
|
||||||
DynamicUser *d;
|
DynamicUser *d;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(f);
|
assert(f);
|
||||||
|
@ -619,7 +618,7 @@ int dynamic_user_serialize(Manager *m, FILE *f, FDSet *fds) {
|
||||||
|
|
||||||
/* Dump the dynamic user database into the manager serialization, to deal with daemon reloads. */
|
/* Dump the dynamic user database into the manager serialization, to deal with daemon reloads. */
|
||||||
|
|
||||||
HASHMAP_FOREACH(d, m->dynamic_users, i) {
|
HASHMAP_FOREACH(d, m->dynamic_users) {
|
||||||
int copy0, copy1;
|
int copy0, copy1;
|
||||||
|
|
||||||
copy0 = fdset_put_dup(fds, d->storage_socket[0]);
|
copy0 = fdset_put_dup(fds, d->storage_socket[0]);
|
||||||
|
@ -674,7 +673,6 @@ void dynamic_user_deserialize_one(Manager *m, const char *value, FDSet *fds) {
|
||||||
|
|
||||||
void dynamic_user_vacuum(Manager *m, bool close_user) {
|
void dynamic_user_vacuum(Manager *m, bool close_user) {
|
||||||
DynamicUser *d;
|
DynamicUser *d;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
|
@ -682,7 +680,7 @@ void dynamic_user_vacuum(Manager *m, bool close_user) {
|
||||||
* to which no reference exist. This is called after a daemon reload finished, in order to destroy users which
|
* to which no reference exist. This is called after a daemon reload finished, in order to destroy users which
|
||||||
* might not be referenced anymore. */
|
* might not be referenced anymore. */
|
||||||
|
|
||||||
HASHMAP_FOREACH(d, m->dynamic_users, i) {
|
HASHMAP_FOREACH(d, m->dynamic_users) {
|
||||||
if (d->n_ref > 0)
|
if (d->n_ref > 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -2483,7 +2483,6 @@ static int acquire_credentials(
|
||||||
_cleanup_close_ int dfd = -1;
|
_cleanup_close_ int dfd = -1;
|
||||||
ExecSetCredential *sc;
|
ExecSetCredential *sc;
|
||||||
char **id, **fn;
|
char **id, **fn;
|
||||||
Iterator iterator;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(context);
|
assert(context);
|
||||||
|
@ -2495,7 +2494,7 @@ static int acquire_credentials(
|
||||||
|
|
||||||
/* First we use the literally specified credentials. Note that they might be overriden again below,
|
/* First we use the literally specified credentials. Note that they might be overriden again below,
|
||||||
* and thus act as a "default" if the same credential is specified multiple times */
|
* and thus act as a "default" if the same credential is specified multiple times */
|
||||||
HASHMAP_FOREACH(sc, context->set_credentials, iterator) {
|
HASHMAP_FOREACH(sc, context->set_credentials) {
|
||||||
size_t add;
|
size_t add;
|
||||||
|
|
||||||
add = strlen(sc->id) + sc->size;
|
add = strlen(sc->id) + sc->size;
|
||||||
|
@ -5484,7 +5483,6 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
|
||||||
|
|
||||||
if (c->syscall_filter) {
|
if (c->syscall_filter) {
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
Iterator j;
|
|
||||||
void *id, *val;
|
void *id, *val;
|
||||||
bool first = true;
|
bool first = true;
|
||||||
#endif
|
#endif
|
||||||
|
@ -5497,7 +5495,7 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
|
||||||
fputc('~', f);
|
fputc('~', f);
|
||||||
|
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
HASHMAP_FOREACH_KEY(val, id, c->syscall_filter, j) {
|
HASHMAP_FOREACH_KEY(val, id, c->syscall_filter) {
|
||||||
_cleanup_free_ char *name = NULL;
|
_cleanup_free_ char *name = NULL;
|
||||||
const char *errno_name = NULL;
|
const char *errno_name = NULL;
|
||||||
int num = PTR_TO_INT(val);
|
int num = PTR_TO_INT(val);
|
||||||
|
@ -5525,7 +5523,6 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
|
||||||
|
|
||||||
if (c->syscall_archs) {
|
if (c->syscall_archs) {
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
Iterator j;
|
|
||||||
void *id;
|
void *id;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5534,7 +5531,7 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
|
||||||
prefix);
|
prefix);
|
||||||
|
|
||||||
#if HAVE_SECCOMP
|
#if HAVE_SECCOMP
|
||||||
SET_FOREACH(id, c->syscall_archs, j)
|
SET_FOREACH(id, c->syscall_archs)
|
||||||
fprintf(f, " %s", strna(seccomp_arch_to_string(PTR_TO_UINT32(id) - 1)));
|
fprintf(f, " %s", strna(seccomp_arch_to_string(PTR_TO_UINT32(id) - 1)));
|
||||||
#endif
|
#endif
|
||||||
fputc('\n', f);
|
fputc('\n', f);
|
||||||
|
@ -6100,13 +6097,12 @@ ExecRuntime *exec_runtime_unref(ExecRuntime *rt, bool destroy) {
|
||||||
|
|
||||||
int exec_runtime_serialize(const Manager *m, FILE *f, FDSet *fds) {
|
int exec_runtime_serialize(const Manager *m, FILE *f, FDSet *fds) {
|
||||||
ExecRuntime *rt;
|
ExecRuntime *rt;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(f);
|
assert(f);
|
||||||
assert(fds);
|
assert(fds);
|
||||||
|
|
||||||
HASHMAP_FOREACH(rt, m->exec_runtime_by_id, i) {
|
HASHMAP_FOREACH(rt, m->exec_runtime_by_id) {
|
||||||
fprintf(f, "exec-runtime=%s", rt->id);
|
fprintf(f, "exec-runtime=%s", rt->id);
|
||||||
|
|
||||||
if (rt->tmp_dir)
|
if (rt->tmp_dir)
|
||||||
|
@ -6309,13 +6305,12 @@ finalize:
|
||||||
|
|
||||||
void exec_runtime_vacuum(Manager *m) {
|
void exec_runtime_vacuum(Manager *m) {
|
||||||
ExecRuntime *rt;
|
ExecRuntime *rt;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
/* Free unreferenced ExecRuntime objects. This is used after manager deserialization process. */
|
/* Free unreferenced ExecRuntime objects. This is used after manager deserialization process. */
|
||||||
|
|
||||||
HASHMAP_FOREACH(rt, m->exec_runtime_by_id, i) {
|
HASHMAP_FOREACH(rt, m->exec_runtime_by_id) {
|
||||||
if (rt->n_ref > 0)
|
if (rt->n_ref > 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -458,7 +458,6 @@ int job_type_merge_and_collapse(JobType *a, JobType b, Unit *u) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool job_is_runnable(Job *j) {
|
static bool job_is_runnable(Job *j) {
|
||||||
Iterator i;
|
|
||||||
Unit *other;
|
Unit *other;
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
|
@ -482,7 +481,7 @@ static bool job_is_runnable(Job *j) {
|
||||||
if (j->type == JOB_NOP)
|
if (j->type == JOB_NOP)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER], i)
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER])
|
||||||
if (other->job && job_compare(j, other->job, UNIT_AFTER) > 0) {
|
if (other->job && job_compare(j, other->job, UNIT_AFTER) > 0) {
|
||||||
log_unit_debug(j->unit,
|
log_unit_debug(j->unit,
|
||||||
"starting held back, waiting for: %s",
|
"starting held back, waiting for: %s",
|
||||||
|
@ -490,7 +489,7 @@ static bool job_is_runnable(Job *j) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE], i)
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE])
|
||||||
if (other->job && job_compare(j, other->job, UNIT_BEFORE) > 0) {
|
if (other->job && job_compare(j, other->job, UNIT_BEFORE) > 0) {
|
||||||
log_unit_debug(j->unit,
|
log_unit_debug(j->unit,
|
||||||
"stopping held back, waiting for: %s",
|
"stopping held back, waiting for: %s",
|
||||||
|
@ -957,12 +956,11 @@ static void job_emit_done_status_message(Unit *u, uint32_t job_id, JobType t, Jo
|
||||||
|
|
||||||
static void job_fail_dependencies(Unit *u, UnitDependency d) {
|
static void job_fail_dependencies(Unit *u, UnitDependency d) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[d], i) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[d]) {
|
||||||
Job *j = other->job;
|
Job *j = other->job;
|
||||||
|
|
||||||
if (!j)
|
if (!j)
|
||||||
|
@ -978,7 +976,6 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive, bool alr
|
||||||
Unit *u;
|
Unit *u;
|
||||||
Unit *other;
|
Unit *other;
|
||||||
JobType t;
|
JobType t;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
|
@ -1072,12 +1069,12 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive, bool alr
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
/* Try to start the next jobs that can be started */
|
/* Try to start the next jobs that can be started */
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_AFTER], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_AFTER])
|
||||||
if (other->job) {
|
if (other->job) {
|
||||||
job_add_to_run_queue(other->job);
|
job_add_to_run_queue(other->job);
|
||||||
job_add_to_gc_queue(other->job);
|
job_add_to_gc_queue(other->job);
|
||||||
}
|
}
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BEFORE], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BEFORE])
|
||||||
if (other->job) {
|
if (other->job) {
|
||||||
job_add_to_run_queue(other->job);
|
job_add_to_run_queue(other->job);
|
||||||
job_add_to_gc_queue(other->job);
|
job_add_to_gc_queue(other->job);
|
||||||
|
@ -1427,7 +1424,6 @@ int job_get_timeout(Job *j, usec_t *timeout) {
|
||||||
|
|
||||||
bool job_may_gc(Job *j) {
|
bool job_may_gc(Job *j) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
|
@ -1457,11 +1453,11 @@ bool job_may_gc(Job *j) {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* The logic is inverse to job_is_runnable, we cannot GC as long as we block any job. */
|
/* The logic is inverse to job_is_runnable, we cannot GC as long as we block any job. */
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE], i)
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE])
|
||||||
if (other->job && job_compare(j, other->job, UNIT_BEFORE) < 0)
|
if (other->job && job_compare(j, other->job, UNIT_BEFORE) < 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER], i)
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER])
|
||||||
if (other->job && job_compare(j, other->job, UNIT_AFTER) < 0)
|
if (other->job && job_compare(j, other->job, UNIT_AFTER) < 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1508,7 +1504,6 @@ int job_get_before(Job *j, Job*** ret) {
|
||||||
_cleanup_free_ Job** list = NULL;
|
_cleanup_free_ Job** list = NULL;
|
||||||
size_t n = 0, n_allocated = 0;
|
size_t n = 0, n_allocated = 0;
|
||||||
Unit *other = NULL;
|
Unit *other = NULL;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
/* Returns a list of all pending jobs that need to finish before this job may be started. */
|
/* Returns a list of all pending jobs that need to finish before this job may be started. */
|
||||||
|
@ -1521,7 +1516,7 @@ int job_get_before(Job *j, Job*** ret) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER], i) {
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER]) {
|
||||||
if (!other->job)
|
if (!other->job)
|
||||||
continue;
|
continue;
|
||||||
if (job_compare(j, other->job, UNIT_AFTER) <= 0)
|
if (job_compare(j, other->job, UNIT_AFTER) <= 0)
|
||||||
|
@ -1532,7 +1527,7 @@ int job_get_before(Job *j, Job*** ret) {
|
||||||
list[n++] = other->job;
|
list[n++] = other->job;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE], i) {
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE]) {
|
||||||
if (!other->job)
|
if (!other->job)
|
||||||
continue;
|
continue;
|
||||||
if (job_compare(j, other->job, UNIT_BEFORE) <= 0)
|
if (job_compare(j, other->job, UNIT_BEFORE) <= 0)
|
||||||
|
@ -1555,14 +1550,13 @@ int job_get_after(Job *j, Job*** ret) {
|
||||||
size_t n = 0, n_allocated = 0;
|
size_t n = 0, n_allocated = 0;
|
||||||
Unit *other = NULL;
|
Unit *other = NULL;
|
||||||
void *v;
|
void *v;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
assert(ret);
|
assert(ret);
|
||||||
|
|
||||||
/* Returns a list of all pending jobs that are waiting for this job to finish. */
|
/* Returns a list of all pending jobs that are waiting for this job to finish. */
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE], i) {
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_BEFORE]) {
|
||||||
if (!other->job)
|
if (!other->job)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1577,7 +1571,7 @@ int job_get_after(Job *j, Job*** ret) {
|
||||||
list[n++] = other->job;
|
list[n++] = other->job;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER], i) {
|
HASHMAP_FOREACH_KEY(v, other, j->unit->dependencies[UNIT_AFTER]) {
|
||||||
if (!other->job)
|
if (!other->job)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -79,10 +79,9 @@ static bool ignore_proc(pid_t pid, bool warn_rootfs) {
|
||||||
|
|
||||||
static void log_children_no_yet_killed(Set *pids) {
|
static void log_children_no_yet_killed(Set *pids) {
|
||||||
_cleanup_free_ char *lst_child = NULL;
|
_cleanup_free_ char *lst_child = NULL;
|
||||||
Iterator i;
|
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
SET_FOREACH(p, pids, i) {
|
SET_FOREACH(p, pids) {
|
||||||
_cleanup_free_ char *s = NULL;
|
_cleanup_free_ char *s = NULL;
|
||||||
|
|
||||||
if (get_process_comm(PTR_TO_PID(p), &s) < 0)
|
if (get_process_comm(PTR_TO_PID(p), &s) < 0)
|
||||||
|
@ -121,7 +120,6 @@ static int wait_for_children(Set *pids, sigset_t *mask, usec_t timeout) {
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
int k;
|
int k;
|
||||||
void *p;
|
void *p;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
/* First, let the kernel inform us about killed
|
/* First, let the kernel inform us about killed
|
||||||
* children. Most processes will probably be our
|
* children. Most processes will probably be our
|
||||||
|
@ -145,7 +143,7 @@ static int wait_for_children(Set *pids, sigset_t *mask, usec_t timeout) {
|
||||||
|
|
||||||
/* Now explicitly check who might be remaining, who
|
/* Now explicitly check who might be remaining, who
|
||||||
* might not be our child. */
|
* might not be our child. */
|
||||||
SET_FOREACH(p, pids, i) {
|
SET_FOREACH(p, pids) {
|
||||||
|
|
||||||
/* kill(pid, 0) sends no signal, but it tells
|
/* kill(pid, 0) sends no signal, but it tells
|
||||||
* us whether the process still exists. */
|
* us whether the process still exists. */
|
||||||
|
|
|
@ -198,7 +198,6 @@ static void manager_flip_auto_status(Manager *m, bool enable, const char *reason
|
||||||
|
|
||||||
static void manager_print_jobs_in_progress(Manager *m) {
|
static void manager_print_jobs_in_progress(Manager *m) {
|
||||||
_cleanup_free_ char *job_of_n = NULL;
|
_cleanup_free_ char *job_of_n = NULL;
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
unsigned counter = 0, print_nr;
|
unsigned counter = 0, print_nr;
|
||||||
char cylon[6 + CYLON_BUFFER_EXTRA + 1];
|
char cylon[6 + CYLON_BUFFER_EXTRA + 1];
|
||||||
|
@ -213,7 +212,7 @@ static void manager_print_jobs_in_progress(Manager *m) {
|
||||||
|
|
||||||
print_nr = (m->jobs_in_progress_iteration / JOBS_IN_PROGRESS_PERIOD_DIVISOR) % m->n_running_jobs;
|
print_nr = (m->jobs_in_progress_iteration / JOBS_IN_PROGRESS_PERIOD_DIVISOR) % m->n_running_jobs;
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, m->jobs, i)
|
HASHMAP_FOREACH(j, m->jobs)
|
||||||
if (j->state == JOB_RUNNING && counter++ == print_nr)
|
if (j->state == JOB_RUNNING && counter++ == print_nr)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1147,13 +1146,12 @@ enum {
|
||||||
|
|
||||||
static void unit_gc_mark_good(Unit *u, unsigned gc_marker) {
|
static void unit_gc_mark_good(Unit *u, unsigned gc_marker) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
u->gc_marker = gc_marker + GC_OFFSET_GOOD;
|
u->gc_marker = gc_marker + GC_OFFSET_GOOD;
|
||||||
|
|
||||||
/* Recursively mark referenced units as GOOD as well */
|
/* Recursively mark referenced units as GOOD as well */
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REFERENCES], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REFERENCES])
|
||||||
if (other->gc_marker == gc_marker + GC_OFFSET_UNSURE)
|
if (other->gc_marker == gc_marker + GC_OFFSET_UNSURE)
|
||||||
unit_gc_mark_good(other, gc_marker);
|
unit_gc_mark_good(other, gc_marker);
|
||||||
}
|
}
|
||||||
|
@ -1161,7 +1159,6 @@ static void unit_gc_mark_good(Unit *u, unsigned gc_marker) {
|
||||||
static void unit_gc_sweep(Unit *u, unsigned gc_marker) {
|
static void unit_gc_sweep(Unit *u, unsigned gc_marker) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
bool is_bad;
|
bool is_bad;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
@ -1180,7 +1177,7 @@ static void unit_gc_sweep(Unit *u, unsigned gc_marker) {
|
||||||
|
|
||||||
is_bad = true;
|
is_bad = true;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REFERENCED_BY], i) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REFERENCED_BY]) {
|
||||||
unit_gc_sweep(other, gc_marker);
|
unit_gc_sweep(other, gc_marker);
|
||||||
|
|
||||||
if (other->gc_marker == gc_marker + GC_OFFSET_GOOD)
|
if (other->gc_marker == gc_marker + GC_OFFSET_GOOD)
|
||||||
|
@ -1474,7 +1471,6 @@ static void manager_enumerate(Manager *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void manager_coldplug(Manager *m) {
|
static void manager_coldplug(Manager *m) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
char *k;
|
char *k;
|
||||||
int r;
|
int r;
|
||||||
|
@ -1484,7 +1480,7 @@ static void manager_coldplug(Manager *m) {
|
||||||
log_debug("Invoking unit coldplug() handlers…");
|
log_debug("Invoking unit coldplug() handlers…");
|
||||||
|
|
||||||
/* Let's place the units back into their deserialized state */
|
/* Let's place the units back into their deserialized state */
|
||||||
HASHMAP_FOREACH_KEY(u, k, m->units, i) {
|
HASHMAP_FOREACH_KEY(u, k, m->units) {
|
||||||
|
|
||||||
/* ignore aliases */
|
/* ignore aliases */
|
||||||
if (u->id != k)
|
if (u->id != k)
|
||||||
|
@ -1497,7 +1493,6 @@ static void manager_coldplug(Manager *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void manager_catchup(Manager *m) {
|
static void manager_catchup(Manager *m) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
char *k;
|
char *k;
|
||||||
|
|
||||||
|
@ -1506,7 +1501,7 @@ static void manager_catchup(Manager *m) {
|
||||||
log_debug("Invoking unit catchup() handlers…");
|
log_debug("Invoking unit catchup() handlers…");
|
||||||
|
|
||||||
/* Let's catch up on any state changes that happened while we were reloading/reexecing */
|
/* Let's catch up on any state changes that happened while we were reloading/reexecing */
|
||||||
HASHMAP_FOREACH_KEY(u, k, m->units, i) {
|
HASHMAP_FOREACH_KEY(u, k, m->units) {
|
||||||
|
|
||||||
/* ignore aliases */
|
/* ignore aliases */
|
||||||
if (u->id != k)
|
if (u->id != k)
|
||||||
|
@ -1517,12 +1512,11 @@ static void manager_catchup(Manager *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void manager_distribute_fds(Manager *m, FDSet *fds) {
|
static void manager_distribute_fds(Manager *m, FDSet *fds) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH(u, m->units, i) {
|
HASHMAP_FOREACH(u, m->units) {
|
||||||
|
|
||||||
if (fdset_size(fds) <= 0)
|
if (fdset_size(fds) <= 0)
|
||||||
break;
|
break;
|
||||||
|
@ -1903,10 +1897,9 @@ static int manager_dispatch_target_deps_queue(Manager *m) {
|
||||||
|
|
||||||
for (k = 0; k < ELEMENTSOF(deps); k++) {
|
for (k = 0; k < ELEMENTSOF(deps); k++) {
|
||||||
Unit *target;
|
Unit *target;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, target, u->dependencies[deps[k]], i) {
|
HASHMAP_FOREACH_KEY(v, target, u->dependencies[deps[k]]) {
|
||||||
r = unit_add_default_target_dependency(u, target);
|
r = unit_add_default_target_dependency(u, target);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -2099,25 +2092,23 @@ int manager_load_startable_unit_or_warn(
|
||||||
}
|
}
|
||||||
|
|
||||||
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix) {
|
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix) {
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
assert(f);
|
assert(f);
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, s->jobs, i)
|
HASHMAP_FOREACH(j, s->jobs)
|
||||||
job_dump(j, f, prefix);
|
job_dump(j, f, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
void manager_dump_units(Manager *s, FILE *f, const char *prefix) {
|
void manager_dump_units(Manager *s, FILE *f, const char *prefix) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
const char *t;
|
const char *t;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
assert(f);
|
assert(f);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(u, t, s->units, i)
|
HASHMAP_FOREACH_KEY(u, t, s->units)
|
||||||
if (u->id == t)
|
if (u->id == t)
|
||||||
unit_dump(u, f, prefix);
|
unit_dump(u, f, prefix);
|
||||||
}
|
}
|
||||||
|
@ -2840,7 +2831,6 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t
|
||||||
|
|
||||||
static int manager_dispatch_time_change_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
|
static int manager_dispatch_time_change_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -2853,7 +2843,7 @@ static int manager_dispatch_time_change_fd(sd_event_source *source, int fd, uint
|
||||||
/* Restart the watch */
|
/* Restart the watch */
|
||||||
(void) manager_setup_time_change(m);
|
(void) manager_setup_time_change(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH(u, m->units, i)
|
HASHMAP_FOREACH(u, m->units)
|
||||||
if (UNIT_VTABLE(u)->time_change)
|
if (UNIT_VTABLE(u)->time_change)
|
||||||
UNIT_VTABLE(u)->time_change(u);
|
UNIT_VTABLE(u)->time_change(u);
|
||||||
|
|
||||||
|
@ -2867,7 +2857,6 @@ static int manager_dispatch_timezone_change(
|
||||||
|
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
int changed;
|
int changed;
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -2886,7 +2875,7 @@ static int manager_dispatch_timezone_change(
|
||||||
|
|
||||||
log_debug("Timezone has been changed (now: %s).", tzname[daylight]);
|
log_debug("Timezone has been changed (now: %s).", tzname[daylight]);
|
||||||
|
|
||||||
HASHMAP_FOREACH(u, m->units, i)
|
HASHMAP_FOREACH(u, m->units)
|
||||||
if (UNIT_VTABLE(u)->timezone_change)
|
if (UNIT_VTABLE(u)->timezone_change)
|
||||||
UNIT_VTABLE(u)->timezone_change(u);
|
UNIT_VTABLE(u)->timezone_change(u);
|
||||||
|
|
||||||
|
@ -3189,7 +3178,6 @@ static void manager_serialize_uid_refs_internal(
|
||||||
Hashmap **uid_refs,
|
Hashmap **uid_refs,
|
||||||
const char *field_name) {
|
const char *field_name) {
|
||||||
|
|
||||||
Iterator i;
|
|
||||||
void *p, *k;
|
void *p, *k;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -3200,7 +3188,7 @@ static void manager_serialize_uid_refs_internal(
|
||||||
/* Serialize the UID reference table. Or actually, just the IPC destruction flag of it, as
|
/* Serialize the UID reference table. Or actually, just the IPC destruction flag of it, as
|
||||||
* the actual counter of it is better rebuild after a reload/reexec. */
|
* the actual counter of it is better rebuild after a reload/reexec. */
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(p, k, *uid_refs, i) {
|
HASHMAP_FOREACH_KEY(p, k, *uid_refs) {
|
||||||
uint32_t c;
|
uint32_t c;
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
|
|
||||||
|
@ -3230,7 +3218,6 @@ int manager_serialize(
|
||||||
|
|
||||||
ManagerTimestamp q;
|
ManagerTimestamp q;
|
||||||
const char *t;
|
const char *t;
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -3323,7 +3310,7 @@ int manager_serialize(
|
||||||
|
|
||||||
(void) fputc('\n', f);
|
(void) fputc('\n', f);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(u, t, m->units, i) {
|
HASHMAP_FOREACH_KEY(u, t, m->units) {
|
||||||
if (u->id != t)
|
if (u->id != t)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -3826,11 +3813,10 @@ int manager_reload(Manager *m) {
|
||||||
|
|
||||||
void manager_reset_failed(Manager *m) {
|
void manager_reset_failed(Manager *m) {
|
||||||
Unit *u;
|
Unit *u;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH(u, m->units, i)
|
HASHMAP_FOREACH(u, m->units)
|
||||||
unit_reset_failed(u);
|
unit_reset_failed(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4663,14 +4649,13 @@ static void manager_vacuum_uid_refs_internal(
|
||||||
Hashmap **uid_refs,
|
Hashmap **uid_refs,
|
||||||
int (*_clean_ipc)(uid_t uid)) {
|
int (*_clean_ipc)(uid_t uid)) {
|
||||||
|
|
||||||
Iterator i;
|
|
||||||
void *p, *k;
|
void *p, *k;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(uid_refs);
|
assert(uid_refs);
|
||||||
assert(_clean_ipc);
|
assert(_clean_ipc);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(p, k, *uid_refs, i) {
|
HASHMAP_FOREACH_KEY(p, k, *uid_refs) {
|
||||||
uint32_t c, n;
|
uint32_t c, n;
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
|
|
||||||
|
|
|
@ -281,7 +281,6 @@ static int update_parameters_proc_self_mountinfo(
|
||||||
static int mount_add_mount_dependencies(Mount *m) {
|
static int mount_add_mount_dependencies(Mount *m) {
|
||||||
MountParameters *pm;
|
MountParameters *pm;
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
Set *s;
|
Set *s;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -315,7 +314,7 @@ static int mount_add_mount_dependencies(Mount *m) {
|
||||||
|
|
||||||
/* Adds in dependencies to other units that use this path or paths further down in the hierarchy */
|
/* Adds in dependencies to other units that use this path or paths further down in the hierarchy */
|
||||||
s = manager_get_units_requiring_mounts_for(UNIT(m)->manager, m->where);
|
s = manager_get_units_requiring_mounts_for(UNIT(m)->manager, m->where);
|
||||||
SET_FOREACH(other, s, i) {
|
SET_FOREACH(other, s) {
|
||||||
|
|
||||||
if (other->load_state != UNIT_LOADED)
|
if (other->load_state != UNIT_LOADED)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1903,7 +1902,6 @@ static int drain_libmount(Manager *m) {
|
||||||
static int mount_process_proc_self_mountinfo(Manager *m) {
|
static int mount_process_proc_self_mountinfo(Manager *m) {
|
||||||
_cleanup_set_free_free_ Set *around = NULL, *gone = NULL;
|
_cleanup_set_free_free_ Set *around = NULL, *gone = NULL;
|
||||||
const char *what;
|
const char *what;
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -2001,7 +1999,7 @@ static int mount_process_proc_self_mountinfo(Manager *m) {
|
||||||
mount->proc_flags = 0;
|
mount->proc_flags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(what, gone, i) {
|
SET_FOREACH(what, gone) {
|
||||||
if (set_contains(around, what))
|
if (set_contains(around, what))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -1273,13 +1273,12 @@ static int service_collect_fds(
|
||||||
|
|
||||||
rn_socket_fds = 1;
|
rn_socket_fds = 1;
|
||||||
} else {
|
} else {
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
Unit *u;
|
Unit *u;
|
||||||
|
|
||||||
/* Pass all our configured sockets for singleton services */
|
/* Pass all our configured sockets for singleton services */
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
|
HASHMAP_FOREACH_KEY(v, u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY]) {
|
||||||
_cleanup_free_ int *cfds = NULL;
|
_cleanup_free_ int *cfds = NULL;
|
||||||
Socket *sock;
|
Socket *sock;
|
||||||
int cn_fds;
|
int cn_fds;
|
||||||
|
|
|
@ -351,11 +351,10 @@ static void slice_enumerate_perpetual(Manager *m) {
|
||||||
static bool slice_freezer_action_supported_by_children(Unit *s) {
|
static bool slice_freezer_action_supported_by_children(Unit *s) {
|
||||||
Unit *member;
|
Unit *member;
|
||||||
void *v;
|
void *v;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, member, s->dependencies[UNIT_BEFORE], i) {
|
HASHMAP_FOREACH_KEY(v, member, s->dependencies[UNIT_BEFORE]) {
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (UNIT_DEREF(member->slice) != s)
|
if (UNIT_DEREF(member->slice) != s)
|
||||||
|
@ -377,7 +376,6 @@ static bool slice_freezer_action_supported_by_children(Unit *s) {
|
||||||
static int slice_freezer_action(Unit *s, FreezerAction action) {
|
static int slice_freezer_action(Unit *s, FreezerAction action) {
|
||||||
Unit *member;
|
Unit *member;
|
||||||
void *v;
|
void *v;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
|
@ -386,7 +384,7 @@ static int slice_freezer_action(Unit *s, FreezerAction action) {
|
||||||
if (!slice_freezer_action_supported_by_children(s))
|
if (!slice_freezer_action_supported_by_children(s))
|
||||||
return log_unit_warning(s, "Requested freezer operation is not supported by all children of the slice");
|
return log_unit_warning(s, "Requested freezer operation is not supported by all children of the slice");
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, member, s->dependencies[UNIT_BEFORE], i) {
|
HASHMAP_FOREACH_KEY(v, member, s->dependencies[UNIT_BEFORE]) {
|
||||||
if (UNIT_DEREF(member->slice) != s)
|
if (UNIT_DEREF(member->slice) != s)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -2338,12 +2338,11 @@ static void socket_enter_running(Socket *s, int cfd_in) {
|
||||||
if (cfd < 0) {
|
if (cfd < 0) {
|
||||||
bool pending = false;
|
bool pending = false;
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
/* If there's already a start pending don't bother to
|
/* If there's already a start pending don't bother to
|
||||||
* do anything */
|
* do anything */
|
||||||
HASHMAP_FOREACH_KEY(v, other, UNIT(s)->dependencies[UNIT_TRIGGERS], i)
|
HASHMAP_FOREACH_KEY(v, other, UNIT(s)->dependencies[UNIT_TRIGGERS])
|
||||||
if (unit_active_or_pending(other)) {
|
if (unit_active_or_pending(other)) {
|
||||||
pending = true;
|
pending = true;
|
||||||
break;
|
break;
|
||||||
|
@ -2788,7 +2787,6 @@ static void socket_distribute_fds(Unit *u, FDSet *fds) {
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
LIST_FOREACH(port, p, s->ports) {
|
LIST_FOREACH(port, p, s->ports) {
|
||||||
Iterator i;
|
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
if (p->type != SOCKET_SOCKET)
|
if (p->type != SOCKET_SOCKET)
|
||||||
|
@ -2797,7 +2795,7 @@ static void socket_distribute_fds(Unit *u, FDSet *fds) {
|
||||||
if (p->fd >= 0)
|
if (p->fd >= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
FDSET_FOREACH(fd, fds, i) {
|
FDSET_FOREACH(fd, fds) {
|
||||||
if (socket_address_matches_fd(&p->address, fd)) {
|
if (socket_address_matches_fd(&p->address, fd)) {
|
||||||
p->fd = fdset_remove(fds, fd);
|
p->fd = fdset_remove(fds, fd);
|
||||||
s->deserialized_state = SOCKET_LISTENING;
|
s->deserialized_state = SOCKET_LISTENING;
|
||||||
|
|
|
@ -57,10 +57,9 @@ static int target_add_default_dependencies(Target *t) {
|
||||||
|
|
||||||
for (k = 0; k < ELEMENTSOF(deps); k++) {
|
for (k = 0; k < ELEMENTSOF(deps); k++) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, UNIT(t)->dependencies[deps[k]], i) {
|
HASHMAP_FOREACH_KEY(v, other, UNIT(t)->dependencies[deps[k]]) {
|
||||||
r = unit_add_default_target_dependency(other, UNIT(t));
|
r = unit_add_default_target_dependency(other, UNIT(t));
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -218,14 +218,13 @@ static int delete_one_unmergeable_job(Transaction *tr, Job *j) {
|
||||||
|
|
||||||
static int transaction_merge_jobs(Transaction *tr, sd_bus_error *e) {
|
static int transaction_merge_jobs(Transaction *tr, sd_bus_error *e) {
|
||||||
Job *j;
|
Job *j;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(tr);
|
assert(tr);
|
||||||
|
|
||||||
/* First step, check whether any of the jobs for one specific
|
/* First step, check whether any of the jobs for one specific
|
||||||
* task conflict. If so, try to drop one of them. */
|
* task conflict. If so, try to drop one of them. */
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
JobType t;
|
JobType t;
|
||||||
Job *k;
|
Job *k;
|
||||||
|
|
||||||
|
@ -256,7 +255,7 @@ static int transaction_merge_jobs(Transaction *tr, sd_bus_error *e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Second step, merge the jobs. */
|
/* Second step, merge the jobs. */
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
JobType t = j->type;
|
JobType t = j->type;
|
||||||
Job *k;
|
Job *k;
|
||||||
|
|
||||||
|
@ -288,12 +287,11 @@ static void transaction_drop_redundant(Transaction *tr) {
|
||||||
assert(tr);
|
assert(tr);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
|
|
||||||
again = false;
|
again = false;
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
bool keep = false;
|
bool keep = false;
|
||||||
Job *k;
|
Job *k;
|
||||||
|
|
||||||
|
@ -349,7 +347,6 @@ static char* merge_unit_ids(const char* unit_log_field, char **pairs) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsigned generation, sd_bus_error *e) {
|
static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsigned generation, sd_bus_error *e) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
@ -453,7 +450,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
|
||||||
* ordering dependencies and we test with job_compare() whether it is the 'before' edge in the job
|
* ordering dependencies and we test with job_compare() whether it is the 'before' edge in the job
|
||||||
* execution ordering. */
|
* execution ordering. */
|
||||||
for (d = 0; d < ELEMENTSOF(directions); d++) {
|
for (d = 0; d < ELEMENTSOF(directions); d++) {
|
||||||
HASHMAP_FOREACH_KEY(v, u, j->unit->dependencies[directions[d]], i) {
|
HASHMAP_FOREACH_KEY(v, u, j->unit->dependencies[directions[d]]) {
|
||||||
Job *o;
|
Job *o;
|
||||||
|
|
||||||
/* Is there a job for this unit? */
|
/* Is there a job for this unit? */
|
||||||
|
@ -487,7 +484,6 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
|
||||||
static int transaction_verify_order(Transaction *tr, unsigned *generation, sd_bus_error *e) {
|
static int transaction_verify_order(Transaction *tr, unsigned *generation, sd_bus_error *e) {
|
||||||
Job *j;
|
Job *j;
|
||||||
int r;
|
int r;
|
||||||
Iterator i;
|
|
||||||
unsigned g;
|
unsigned g;
|
||||||
|
|
||||||
assert(tr);
|
assert(tr);
|
||||||
|
@ -498,7 +494,7 @@ static int transaction_verify_order(Transaction *tr, unsigned *generation, sd_bu
|
||||||
|
|
||||||
g = (*generation)++;
|
g = (*generation)++;
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
r = transaction_verify_order_one(tr, j, NULL, g, e);
|
r = transaction_verify_order_one(tr, j, NULL, g, e);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -515,12 +511,11 @@ static void transaction_collect_garbage(Transaction *tr) {
|
||||||
/* Drop jobs that are not required by any other job */
|
/* Drop jobs that are not required by any other job */
|
||||||
|
|
||||||
do {
|
do {
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
|
|
||||||
again = false;
|
again = false;
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
if (tr->anchor_job == j)
|
if (tr->anchor_job == j)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -541,7 +536,6 @@ static void transaction_collect_garbage(Transaction *tr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int transaction_is_destructive(Transaction *tr, JobMode mode, sd_bus_error *e) {
|
static int transaction_is_destructive(Transaction *tr, JobMode mode, sd_bus_error *e) {
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
|
|
||||||
assert(tr);
|
assert(tr);
|
||||||
|
@ -549,7 +543,7 @@ static int transaction_is_destructive(Transaction *tr, JobMode mode, sd_bus_erro
|
||||||
/* Checks whether applying this transaction means that
|
/* Checks whether applying this transaction means that
|
||||||
* existing jobs would be replaced */
|
* existing jobs would be replaced */
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
|
|
||||||
/* Assume merged */
|
/* Assume merged */
|
||||||
assert(!j->transaction_prev);
|
assert(!j->transaction_prev);
|
||||||
|
@ -568,7 +562,6 @@ static int transaction_is_destructive(Transaction *tr, JobMode mode, sd_bus_erro
|
||||||
|
|
||||||
static void transaction_minimize_impact(Transaction *tr) {
|
static void transaction_minimize_impact(Transaction *tr) {
|
||||||
Job *j;
|
Job *j;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(tr);
|
assert(tr);
|
||||||
|
|
||||||
|
@ -576,7 +569,7 @@ static void transaction_minimize_impact(Transaction *tr) {
|
||||||
* or that stop a running service. */
|
* or that stop a running service. */
|
||||||
|
|
||||||
rescan:
|
rescan:
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
LIST_FOREACH(transaction, j, j) {
|
LIST_FOREACH(transaction, j, j) {
|
||||||
bool stops_running_service, changes_existing_job;
|
bool stops_running_service, changes_existing_job;
|
||||||
|
|
||||||
|
@ -625,7 +618,6 @@ static int transaction_apply(
|
||||||
JobMode mode,
|
JobMode mode,
|
||||||
Set *affected_jobs) {
|
Set *affected_jobs) {
|
||||||
|
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -635,7 +627,7 @@ static int transaction_apply(
|
||||||
|
|
||||||
/* When isolating first kill all installed jobs which
|
/* When isolating first kill all installed jobs which
|
||||||
* aren't part of the new transaction */
|
* aren't part of the new transaction */
|
||||||
HASHMAP_FOREACH(j, m->jobs, i) {
|
HASHMAP_FOREACH(j, m->jobs) {
|
||||||
assert(j->installed);
|
assert(j->installed);
|
||||||
|
|
||||||
if (j->unit->ignore_on_isolate)
|
if (j->unit->ignore_on_isolate)
|
||||||
|
@ -651,7 +643,7 @@ static int transaction_apply(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i) {
|
HASHMAP_FOREACH(j, tr->jobs) {
|
||||||
/* Assume merged */
|
/* Assume merged */
|
||||||
assert(!j->transaction_prev);
|
assert(!j->transaction_prev);
|
||||||
assert(!j->transaction_next);
|
assert(!j->transaction_next);
|
||||||
|
@ -696,7 +688,7 @@ static int transaction_apply(
|
||||||
|
|
||||||
rollback:
|
rollback:
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, tr->jobs, i)
|
HASHMAP_FOREACH(j, tr->jobs)
|
||||||
hashmap_remove(m->jobs, UINT32_TO_PTR(j->id));
|
hashmap_remove(m->jobs, UINT32_TO_PTR(j->id));
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
|
@ -709,7 +701,6 @@ int transaction_activate(
|
||||||
Set *affected_jobs,
|
Set *affected_jobs,
|
||||||
sd_bus_error *e) {
|
sd_bus_error *e) {
|
||||||
|
|
||||||
Iterator i;
|
|
||||||
Job *j;
|
Job *j;
|
||||||
int r;
|
int r;
|
||||||
unsigned generation = 1;
|
unsigned generation = 1;
|
||||||
|
@ -722,7 +713,7 @@ int transaction_activate(
|
||||||
/* Reset the generation counter of all installed jobs. The detection of cycles
|
/* Reset the generation counter of all installed jobs. The detection of cycles
|
||||||
* looks at installed jobs. If they had a non-zero generation from some previous
|
* looks at installed jobs. If they had a non-zero generation from some previous
|
||||||
* walk of the graph, the algorithm would break. */
|
* walk of the graph, the algorithm would break. */
|
||||||
HASHMAP_FOREACH(j, m->jobs, i)
|
HASHMAP_FOREACH(j, m->jobs)
|
||||||
j->generation = 0;
|
j->generation = 0;
|
||||||
|
|
||||||
/* First step: figure out which jobs matter */
|
/* First step: figure out which jobs matter */
|
||||||
|
@ -890,7 +881,6 @@ static void transaction_unlink_job(Transaction *tr, Job *j, bool delete_dependen
|
||||||
}
|
}
|
||||||
|
|
||||||
void transaction_add_propagate_reload_jobs(Transaction *tr, Unit *unit, Job *by, bool ignore_order, sd_bus_error *e) {
|
void transaction_add_propagate_reload_jobs(Transaction *tr, Unit *unit, Job *by, bool ignore_order, sd_bus_error *e) {
|
||||||
Iterator i;
|
|
||||||
JobType nt;
|
JobType nt;
|
||||||
Unit *dep;
|
Unit *dep;
|
||||||
void *v;
|
void *v;
|
||||||
|
@ -899,7 +889,7 @@ void transaction_add_propagate_reload_jobs(Transaction *tr, Unit *unit, Job *by,
|
||||||
assert(tr);
|
assert(tr);
|
||||||
assert(unit);
|
assert(unit);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, dep, unit->dependencies[UNIT_PROPAGATES_RELOAD_TO], i) {
|
HASHMAP_FOREACH_KEY(v, dep, unit->dependencies[UNIT_PROPAGATES_RELOAD_TO]) {
|
||||||
nt = job_type_collapse(JOB_TRY_RELOAD, dep);
|
nt = job_type_collapse(JOB_TRY_RELOAD, dep);
|
||||||
if (nt == JOB_NOP)
|
if (nt == JOB_NOP)
|
||||||
continue;
|
continue;
|
||||||
|
@ -926,7 +916,6 @@ int transaction_add_job_and_dependencies(
|
||||||
sd_bus_error *e) {
|
sd_bus_error *e) {
|
||||||
|
|
||||||
bool is_new;
|
bool is_new;
|
||||||
Iterator i;
|
|
||||||
Unit *dep;
|
Unit *dep;
|
||||||
Job *ret;
|
Job *ret;
|
||||||
void *v;
|
void *v;
|
||||||
|
@ -1006,7 +995,7 @@ int transaction_add_job_and_dependencies(
|
||||||
/* If we are following some other unit, make sure we
|
/* If we are following some other unit, make sure we
|
||||||
* add all dependencies of everybody following. */
|
* add all dependencies of everybody following. */
|
||||||
if (unit_following_set(ret->unit, &following) > 0) {
|
if (unit_following_set(ret->unit, &following) > 0) {
|
||||||
SET_FOREACH(dep, following, i) {
|
SET_FOREACH(dep, following) {
|
||||||
r = transaction_add_job_and_dependencies(tr, type, dep, ret, false, false, false, ignore_order, e);
|
r = transaction_add_job_and_dependencies(tr, type, dep, ret, false, false, false, ignore_order, e);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_unit_full(dep,
|
log_unit_full(dep,
|
||||||
|
@ -1022,7 +1011,7 @@ int transaction_add_job_and_dependencies(
|
||||||
|
|
||||||
/* Finally, recursively add in all dependencies. */
|
/* Finally, recursively add in all dependencies. */
|
||||||
if (IN_SET(type, JOB_START, JOB_RESTART)) {
|
if (IN_SET(type, JOB_START, JOB_RESTART)) {
|
||||||
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_REQUIRES], i) {
|
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_REQUIRES]) {
|
||||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, false, false, ignore_order, e);
|
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, false, false, ignore_order, e);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if (r != -EBADR) /* job type not applicable */
|
if (r != -EBADR) /* job type not applicable */
|
||||||
|
@ -1032,7 +1021,7 @@ int transaction_add_job_and_dependencies(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_BINDS_TO], i) {
|
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_BINDS_TO]) {
|
||||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, false, false, ignore_order, e);
|
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, false, false, ignore_order, e);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if (r != -EBADR) /* job type not applicable */
|
if (r != -EBADR) /* job type not applicable */
|
||||||
|
@ -1042,7 +1031,7 @@ int transaction_add_job_and_dependencies(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_WANTS], i) {
|
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_WANTS]) {
|
||||||
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, false, false, false, ignore_order, e);
|
r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, false, false, false, ignore_order, e);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
/* unit masked, job type not applicable and unit not found are not considered as errors. */
|
/* unit masked, job type not applicable and unit not found are not considered as errors. */
|
||||||
|
@ -1054,7 +1043,7 @@ int transaction_add_job_and_dependencies(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_REQUISITE], i) {
|
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_REQUISITE]) {
|
||||||
r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, true, false, false, ignore_order, e);
|
r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, true, false, false, ignore_order, e);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if (r != -EBADR) /* job type not applicable */
|
if (r != -EBADR) /* job type not applicable */
|
||||||
|
@ -1064,7 +1053,7 @@ int transaction_add_job_and_dependencies(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_CONFLICTS], i) {
|
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_CONFLICTS]) {
|
||||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, true, false, ignore_order, e);
|
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, true, false, ignore_order, e);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if (r != -EBADR) /* job type not applicable */
|
if (r != -EBADR) /* job type not applicable */
|
||||||
|
@ -1074,7 +1063,7 @@ int transaction_add_job_and_dependencies(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_CONFLICTED_BY], i) {
|
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[UNIT_CONFLICTED_BY]) {
|
||||||
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, false, false, false, ignore_order, e);
|
r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, false, false, false, ignore_order, e);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_unit_warning(dep,
|
log_unit_warning(dep,
|
||||||
|
@ -1103,7 +1092,7 @@ int transaction_add_job_and_dependencies(
|
||||||
ptype = type == JOB_RESTART ? JOB_TRY_RESTART : type;
|
ptype = type == JOB_RESTART ? JOB_TRY_RESTART : type;
|
||||||
|
|
||||||
for (j = 0; j < ELEMENTSOF(propagate_deps); j++)
|
for (j = 0; j < ELEMENTSOF(propagate_deps); j++)
|
||||||
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[propagate_deps[j]], i) {
|
HASHMAP_FOREACH_KEY(v, dep, ret->unit->dependencies[propagate_deps[j]]) {
|
||||||
JobType nt;
|
JobType nt;
|
||||||
|
|
||||||
nt = job_type_collapse(ptype, dep);
|
nt = job_type_collapse(ptype, dep);
|
||||||
|
@ -1133,7 +1122,6 @@ fail:
|
||||||
}
|
}
|
||||||
|
|
||||||
int transaction_add_isolate_jobs(Transaction *tr, Manager *m) {
|
int transaction_add_isolate_jobs(Transaction *tr, Manager *m) {
|
||||||
Iterator i;
|
|
||||||
Unit *u;
|
Unit *u;
|
||||||
char *k;
|
char *k;
|
||||||
int r;
|
int r;
|
||||||
|
@ -1141,7 +1129,7 @@ int transaction_add_isolate_jobs(Transaction *tr, Manager *m) {
|
||||||
assert(tr);
|
assert(tr);
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(u, k, m->units, i) {
|
HASHMAP_FOREACH_KEY(u, k, m->units) {
|
||||||
|
|
||||||
/* ignore aliases */
|
/* ignore aliases */
|
||||||
if (u->id != k)
|
if (u->id != k)
|
||||||
|
@ -1167,7 +1155,6 @@ int transaction_add_isolate_jobs(Transaction *tr, Manager *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int transaction_add_triggering_jobs(Transaction *tr, Unit *u) {
|
int transaction_add_triggering_jobs(Transaction *tr, Unit *u) {
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
Unit *trigger;
|
Unit *trigger;
|
||||||
int r;
|
int r;
|
||||||
|
@ -1175,7 +1162,7 @@ int transaction_add_triggering_jobs(Transaction *tr, Unit *u) {
|
||||||
assert(tr);
|
assert(tr);
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, trigger, u->dependencies[UNIT_TRIGGERED_BY], i) {
|
HASHMAP_FOREACH_KEY(v, trigger, u->dependencies[UNIT_TRIGGERED_BY]) {
|
||||||
/* No need to stop inactive jobs */
|
/* No need to stop inactive jobs */
|
||||||
if (UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(trigger)) && !trigger->job)
|
if (UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(trigger)) && !trigger->job)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -510,14 +510,13 @@ void unit_submit_to_stop_when_unneeded_queue(Unit *u) {
|
||||||
|
|
||||||
static void bidi_set_free(Unit *u, Hashmap *h) {
|
static void bidi_set_free(Unit *u, Hashmap *h) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
/* Frees the hashmap and makes sure we are dropped from the inverse pointers */
|
/* Frees the hashmap and makes sure we are dropped from the inverse pointers */
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, h, i) {
|
HASHMAP_FOREACH_KEY(v, other, h) {
|
||||||
for (UnitDependency d = 0; d < _UNIT_DEPENDENCY_MAX; d++)
|
for (UnitDependency d = 0; d < _UNIT_DEPENDENCY_MAX; d++)
|
||||||
hashmap_remove(other->dependencies[d], u);
|
hashmap_remove(other->dependencies[d], u);
|
||||||
|
|
||||||
|
@ -614,7 +613,6 @@ static void unit_done(Unit *u) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void unit_free(Unit *u) {
|
void unit_free(Unit *u) {
|
||||||
Iterator i;
|
|
||||||
char *t;
|
char *t;
|
||||||
|
|
||||||
if (!u)
|
if (!u)
|
||||||
|
@ -638,7 +636,7 @@ void unit_free(Unit *u) {
|
||||||
|
|
||||||
unit_free_requires_mounts_for(u);
|
unit_free_requires_mounts_for(u);
|
||||||
|
|
||||||
SET_FOREACH(t, u->aliases, i)
|
SET_FOREACH(t, u->aliases)
|
||||||
hashmap_remove_value(u->manager->units, t, u);
|
hashmap_remove_value(u->manager->units, t, u);
|
||||||
if (u->id)
|
if (u->id)
|
||||||
hashmap_remove_value(u->manager->units, u->id, u);
|
hashmap_remove_value(u->manager->units, u->id, u);
|
||||||
|
@ -819,7 +817,6 @@ static int hashmap_complete_move(Hashmap **s, Hashmap **other) {
|
||||||
|
|
||||||
static int merge_names(Unit *u, Unit *other) {
|
static int merge_names(Unit *u, Unit *other) {
|
||||||
char *name;
|
char *name;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
@ -838,7 +835,7 @@ static int merge_names(Unit *u, Unit *other) {
|
||||||
TAKE_PTR(other->id);
|
TAKE_PTR(other->id);
|
||||||
other->aliases = set_free_free(other->aliases);
|
other->aliases = set_free_free(other->aliases);
|
||||||
|
|
||||||
SET_FOREACH(name, u->aliases, i)
|
SET_FOREACH(name, u->aliases)
|
||||||
assert_se(hashmap_replace(u->manager->units, name, u) == 0);
|
assert_se(hashmap_replace(u->manager->units, name, u) == 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -866,7 +863,6 @@ static int reserve_dependencies(Unit *u, Unit *other, UnitDependency d) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void merge_dependencies(Unit *u, Unit *other, const char *other_id, UnitDependency d) {
|
static void merge_dependencies(Unit *u, Unit *other, const char *other_id, UnitDependency d) {
|
||||||
Iterator i;
|
|
||||||
Unit *back;
|
Unit *back;
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
@ -878,7 +874,7 @@ static void merge_dependencies(Unit *u, Unit *other, const char *other_id, UnitD
|
||||||
assert(d < _UNIT_DEPENDENCY_MAX);
|
assert(d < _UNIT_DEPENDENCY_MAX);
|
||||||
|
|
||||||
/* Fix backwards pointers. Let's iterate through all dependent units of the other unit. */
|
/* Fix backwards pointers. Let's iterate through all dependent units of the other unit. */
|
||||||
HASHMAP_FOREACH_KEY(v, back, other->dependencies[d], i)
|
HASHMAP_FOREACH_KEY(v, back, other->dependencies[d])
|
||||||
|
|
||||||
/* Let's now iterate through the dependencies of that dependencies of the other units,
|
/* Let's now iterate through the dependencies of that dependencies of the other units,
|
||||||
* looking for pointers back, and let's fix them up, to instead point to 'u'. */
|
* looking for pointers back, and let's fix them up, to instead point to 'u'. */
|
||||||
|
@ -1216,7 +1212,6 @@ static void print_unit_dependency_mask(FILE *f, const char *kind, UnitDependency
|
||||||
|
|
||||||
void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
char *t, **j;
|
char *t, **j;
|
||||||
Iterator i;
|
|
||||||
const char *prefix2;
|
const char *prefix2;
|
||||||
char timestamp[5][FORMAT_TIMESTAMP_MAX], timespan[FORMAT_TIMESPAN_MAX];
|
char timestamp[5][FORMAT_TIMESTAMP_MAX], timespan[FORMAT_TIMESPAN_MAX];
|
||||||
Unit *following;
|
Unit *following;
|
||||||
|
@ -1234,7 +1229,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
"%s-> Unit %s:\n",
|
"%s-> Unit %s:\n",
|
||||||
prefix, u->id);
|
prefix, u->id);
|
||||||
|
|
||||||
SET_FOREACH(t, u->aliases, i)
|
SET_FOREACH(t, u->aliases)
|
||||||
fprintf(f, "%s\tAlias: %s\n", prefix, t);
|
fprintf(f, "%s\tAlias: %s\n", prefix, t);
|
||||||
|
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
|
@ -1321,7 +1316,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
if (r >= 0) {
|
if (r >= 0) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
|
|
||||||
SET_FOREACH(other, following_set, i)
|
SET_FOREACH(other, following_set)
|
||||||
fprintf(f, "%s\tFollowing Set Member: %s\n", prefix, other->id);
|
fprintf(f, "%s\tFollowing Set Member: %s\n", prefix, other->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1373,7 +1368,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
UnitDependencyInfo di;
|
UnitDependencyInfo di;
|
||||||
Unit *other;
|
Unit *other;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(di.data, other, u->dependencies[d], i) {
|
HASHMAP_FOREACH_KEY(di.data, other, u->dependencies[d]) {
|
||||||
bool space = false;
|
bool space = false;
|
||||||
|
|
||||||
fprintf(f, "%s\t%s: %s (", prefix, unit_dependency_to_string(d), other->id);
|
fprintf(f, "%s\t%s: %s (", prefix, unit_dependency_to_string(d), other->id);
|
||||||
|
@ -1389,7 +1384,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||||
UnitDependencyInfo di;
|
UnitDependencyInfo di;
|
||||||
const char *path;
|
const char *path;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(di.data, path, u->requires_mounts_for, i) {
|
HASHMAP_FOREACH_KEY(di.data, path, u->requires_mounts_for) {
|
||||||
bool space = false;
|
bool space = false;
|
||||||
|
|
||||||
fprintf(f, "%s\tRequiresMountsFor: %s (", prefix, path);
|
fprintf(f, "%s\tRequiresMountsFor: %s (", prefix, path);
|
||||||
|
@ -1536,12 +1531,11 @@ static int unit_add_slice_dependencies(Unit *u) {
|
||||||
static int unit_add_mount_dependencies(Unit *u) {
|
static int unit_add_mount_dependencies(Unit *u) {
|
||||||
UnitDependencyInfo di;
|
UnitDependencyInfo di;
|
||||||
const char *path;
|
const char *path;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(di.data, path, u->requires_mounts_for, i) {
|
HASHMAP_FOREACH_KEY(di.data, path, u->requires_mounts_for) {
|
||||||
char prefix[strlen(path) + 1];
|
char prefix[strlen(path) + 1];
|
||||||
|
|
||||||
PATH_FOREACH_PREFIX_MORE(prefix, path) {
|
PATH_FOREACH_PREFIX_MORE(prefix, path) {
|
||||||
|
@ -1804,7 +1798,6 @@ bool unit_shall_confirm_spawn(Unit *u) {
|
||||||
|
|
||||||
static bool unit_verify_deps(Unit *u) {
|
static bool unit_verify_deps(Unit *u) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator j;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
@ -1814,7 +1807,7 @@ static bool unit_verify_deps(Unit *u) {
|
||||||
* processing, but do not have any effect afterwards. We don't check BindsTo= dependencies that are not used in
|
* processing, but do not have any effect afterwards. We don't check BindsTo= dependencies that are not used in
|
||||||
* conjunction with After= as for them any such check would make things entirely racy. */
|
* conjunction with After= as for them any such check would make things entirely racy. */
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BINDS_TO], j) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BINDS_TO]) {
|
||||||
|
|
||||||
if (!hashmap_contains(u->dependencies[UNIT_AFTER], other))
|
if (!hashmap_contains(u->dependencies[UNIT_AFTER], other))
|
||||||
continue;
|
continue;
|
||||||
|
@ -2055,13 +2048,12 @@ bool unit_is_unneeded(Unit *u) {
|
||||||
|
|
||||||
for (size_t j = 0; j < ELEMENTSOF(deps); j++) {
|
for (size_t j = 0; j < ELEMENTSOF(deps); j++) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
/* If a dependent unit has a job queued, is active or transitioning, or is marked for
|
/* If a dependent unit has a job queued, is active or transitioning, or is marked for
|
||||||
* restart, then don't clean this one up. */
|
* restart, then don't clean this one up. */
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[deps[j]], i) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[deps[j]]) {
|
||||||
if (other->job)
|
if (other->job)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -2091,10 +2083,9 @@ static void check_unneeded_dependencies(Unit *u) {
|
||||||
|
|
||||||
for (size_t j = 0; j < ELEMENTSOF(deps); j++) {
|
for (size_t j = 0; j < ELEMENTSOF(deps); j++) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[deps[j]], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[deps[j]])
|
||||||
unit_submit_to_stop_when_unneeded_queue(other);
|
unit_submit_to_stop_when_unneeded_queue(other);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2103,7 +2094,6 @@ static void unit_check_binds_to(Unit *u) {
|
||||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
bool stop = false;
|
bool stop = false;
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -2115,7 +2105,7 @@ static void unit_check_binds_to(Unit *u) {
|
||||||
if (unit_active_state(u) != UNIT_ACTIVE)
|
if (unit_active_state(u) != UNIT_ACTIVE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BINDS_TO], i) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BINDS_TO]) {
|
||||||
if (other->job)
|
if (other->job)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2151,54 +2141,51 @@ static void unit_check_binds_to(Unit *u) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void retroactively_start_dependencies(Unit *u) {
|
static void retroactively_start_dependencies(Unit *u) {
|
||||||
Iterator i;
|
|
||||||
Unit *other;
|
Unit *other;
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
assert(UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u)));
|
assert(UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u)));
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REQUIRES], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_REQUIRES])
|
||||||
if (!hashmap_get(u->dependencies[UNIT_AFTER], other) &&
|
if (!hashmap_get(u->dependencies[UNIT_AFTER], other) &&
|
||||||
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
||||||
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, NULL, NULL, NULL);
|
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, NULL, NULL, NULL);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BINDS_TO], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BINDS_TO])
|
||||||
if (!hashmap_get(u->dependencies[UNIT_AFTER], other) &&
|
if (!hashmap_get(u->dependencies[UNIT_AFTER], other) &&
|
||||||
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
||||||
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, NULL, NULL, NULL);
|
manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, NULL, NULL, NULL);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_WANTS], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_WANTS])
|
||||||
if (!hashmap_get(u->dependencies[UNIT_AFTER], other) &&
|
if (!hashmap_get(u->dependencies[UNIT_AFTER], other) &&
|
||||||
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
|
||||||
manager_add_job(u->manager, JOB_START, other, JOB_FAIL, NULL, NULL, NULL);
|
manager_add_job(u->manager, JOB_START, other, JOB_FAIL, NULL, NULL, NULL);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_CONFLICTS], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_CONFLICTS])
|
||||||
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
||||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL, NULL);
|
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL, NULL);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_CONFLICTED_BY], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_CONFLICTED_BY])
|
||||||
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
||||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL, NULL);
|
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void retroactively_stop_dependencies(Unit *u) {
|
static void retroactively_stop_dependencies(Unit *u) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u)));
|
assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u)));
|
||||||
|
|
||||||
/* Pull down units which are bound to us recursively if enabled */
|
/* Pull down units which are bound to us recursively if enabled */
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BOUND_BY], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_BOUND_BY])
|
||||||
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other)))
|
||||||
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL, NULL);
|
manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void unit_start_on_failure(Unit *u) {
|
void unit_start_on_failure(Unit *u) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -2209,7 +2196,7 @@ void unit_start_on_failure(Unit *u) {
|
||||||
|
|
||||||
log_unit_info(u, "Triggering OnFailure= dependencies.");
|
log_unit_info(u, "Triggering OnFailure= dependencies.");
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_ON_FAILURE], i) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_ON_FAILURE]) {
|
||||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
|
|
||||||
r = manager_add_job(u->manager, JOB_START, other, u->on_failure_job_mode, NULL, &error, NULL);
|
r = manager_add_job(u->manager, JOB_START, other, u->on_failure_job_mode, NULL, &error, NULL);
|
||||||
|
@ -2220,12 +2207,11 @@ void unit_start_on_failure(Unit *u) {
|
||||||
|
|
||||||
void unit_trigger_notify(Unit *u) {
|
void unit_trigger_notify(Unit *u) {
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_TRIGGERED_BY], i)
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_TRIGGERED_BY])
|
||||||
if (UNIT_VTABLE(other)->trigger_notify)
|
if (UNIT_VTABLE(other)->trigger_notify)
|
||||||
UNIT_VTABLE(other)->trigger_notify(other, u);
|
UNIT_VTABLE(other)->trigger_notify(other, u);
|
||||||
}
|
}
|
||||||
|
@ -2820,7 +2806,6 @@ void unit_unwatch_all_pids(Unit *u) {
|
||||||
|
|
||||||
static void unit_tidy_watch_pids(Unit *u) {
|
static void unit_tidy_watch_pids(Unit *u) {
|
||||||
pid_t except1, except2;
|
pid_t except1, except2;
|
||||||
Iterator i;
|
|
||||||
void *e;
|
void *e;
|
||||||
|
|
||||||
assert(u);
|
assert(u);
|
||||||
|
@ -2830,7 +2815,7 @@ static void unit_tidy_watch_pids(Unit *u) {
|
||||||
except1 = unit_main_pid(u);
|
except1 = unit_main_pid(u);
|
||||||
except2 = unit_control_pid(u);
|
except2 = unit_control_pid(u);
|
||||||
|
|
||||||
SET_FOREACH(e, u->pids, i) {
|
SET_FOREACH(e, u->pids) {
|
||||||
pid_t pid = PTR_TO_PID(e);
|
pid_t pid = PTR_TO_PID(e);
|
||||||
|
|
||||||
if (pid == except1 || pid == except2)
|
if (pid == except1 || pid == except2)
|
||||||
|
@ -5102,7 +5087,6 @@ int unit_setup_exec_runtime(Unit *u) {
|
||||||
ExecRuntime **rt;
|
ExecRuntime **rt;
|
||||||
size_t offset;
|
size_t offset;
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
void *v;
|
void *v;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -5115,7 +5099,7 @@ int unit_setup_exec_runtime(Unit *u) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Try to get it from somebody else */
|
/* Try to get it from somebody else */
|
||||||
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_JOINS_NAMESPACE_OF], i) {
|
HASHMAP_FOREACH_KEY(v, other, u->dependencies[UNIT_JOINS_NAMESPACE_OF]) {
|
||||||
r = exec_runtime_acquire(u->manager, NULL, other->id, false, rt);
|
r = exec_runtime_acquire(u->manager, NULL, other->id, false, rt);
|
||||||
if (r == 1)
|
if (r == 1)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -5518,11 +5502,10 @@ void unit_remove_dependencies(Unit *u, UnitDependencyMask mask) {
|
||||||
do {
|
do {
|
||||||
UnitDependencyInfo di;
|
UnitDependencyInfo di;
|
||||||
Unit *other;
|
Unit *other;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
done = true;
|
done = true;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(di.data, other, u->dependencies[d], i) {
|
HASHMAP_FOREACH_KEY(di.data, other, u->dependencies[d]) {
|
||||||
if ((di.origin_mask & ~mask) == di.origin_mask)
|
if ((di.origin_mask & ~mask) == di.origin_mask)
|
||||||
continue;
|
continue;
|
||||||
di.origin_mask &= ~mask;
|
di.origin_mask &= ~mask;
|
||||||
|
|
|
@ -644,10 +644,9 @@ static int add_crypttab_devices(void) {
|
||||||
|
|
||||||
static int add_proc_cmdline_devices(void) {
|
static int add_proc_cmdline_devices(void) {
|
||||||
int r;
|
int r;
|
||||||
Iterator i;
|
|
||||||
crypto_device *d;
|
crypto_device *d;
|
||||||
|
|
||||||
HASHMAP_FOREACH(d, arg_disks, i) {
|
HASHMAP_FOREACH(d, arg_disks) {
|
||||||
_cleanup_free_ char *device = NULL;
|
_cleanup_free_ char *device = NULL;
|
||||||
|
|
||||||
if (!d->create)
|
if (!d->create)
|
||||||
|
|
|
@ -401,13 +401,9 @@ static int should_skip_path(const char *prefix, const char *suffix) {
|
||||||
|
|
||||||
static int process_suffix(const char *suffix, const char *onlyprefix) {
|
static int process_suffix(const char *suffix, const char *onlyprefix) {
|
||||||
const char *p;
|
const char *p;
|
||||||
char *f;
|
char *f, *key;
|
||||||
OrderedHashmap *top, *bottom, *drops;
|
OrderedHashmap *top, *bottom, *drops, *h;
|
||||||
OrderedHashmap *h;
|
int r = 0, k, n_found = 0;
|
||||||
char *key;
|
|
||||||
int r = 0, k;
|
|
||||||
Iterator i, j;
|
|
||||||
int n_found = 0;
|
|
||||||
bool dropins;
|
bool dropins;
|
||||||
|
|
||||||
assert(suffix);
|
assert(suffix);
|
||||||
|
@ -441,7 +437,7 @@ static int process_suffix(const char *suffix, const char *onlyprefix) {
|
||||||
r = k;
|
r = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(f, key, top, i) {
|
ORDERED_HASHMAP_FOREACH_KEY(f, key, top) {
|
||||||
char *o;
|
char *o;
|
||||||
|
|
||||||
o = ordered_hashmap_get(bottom, key);
|
o = ordered_hashmap_get(bottom, key);
|
||||||
|
@ -461,7 +457,7 @@ static int process_suffix(const char *suffix, const char *onlyprefix) {
|
||||||
|
|
||||||
h = ordered_hashmap_get(drops, key);
|
h = ordered_hashmap_get(drops, key);
|
||||||
if (h)
|
if (h)
|
||||||
ORDERED_HASHMAP_FOREACH(o, h, j)
|
ORDERED_HASHMAP_FOREACH(o, h)
|
||||||
if (!onlyprefix || startswith(o, onlyprefix))
|
if (!onlyprefix || startswith(o, onlyprefix))
|
||||||
n_found += notify_override_extended(f, o);
|
n_found += notify_override_extended(f, o);
|
||||||
}
|
}
|
||||||
|
@ -470,7 +466,7 @@ finish:
|
||||||
ordered_hashmap_free_free(top);
|
ordered_hashmap_free_free(top);
|
||||||
ordered_hashmap_free_free(bottom);
|
ordered_hashmap_free_free(bottom);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(h, key, drops, i) {
|
ORDERED_HASHMAP_FOREACH_KEY(h, key, drops) {
|
||||||
ordered_hashmap_free_free(ordered_hashmap_remove(drops, key));
|
ordered_hashmap_free_free(ordered_hashmap_remove(drops, key));
|
||||||
ordered_hashmap_remove(drops, key);
|
ordered_hashmap_remove(drops, key);
|
||||||
free(key);
|
free(key);
|
||||||
|
|
|
@ -758,7 +758,6 @@ static int bus_home_node_enumerator(
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
size_t k = 0;
|
size_t k = 0;
|
||||||
Iterator i;
|
|
||||||
Home *h;
|
Home *h;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -768,7 +767,7 @@ static int bus_home_node_enumerator(
|
||||||
if (!l)
|
if (!l)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_uid, i) {
|
HASHMAP_FOREACH(h, m->homes_by_uid) {
|
||||||
r = bus_home_path(h, l + k);
|
r = bus_home_path(h, l + k);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -25,7 +25,6 @@ static int property_get_auto_login(
|
||||||
sd_bus_error *error) {
|
sd_bus_error *error) {
|
||||||
|
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Iterator i;
|
|
||||||
Home *h;
|
Home *h;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -37,7 +36,7 @@ static int property_get_auto_login(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_name, i) {
|
HASHMAP_FOREACH(h, m->homes_by_name) {
|
||||||
_cleanup_(strv_freep) char **seats = NULL;
|
_cleanup_(strv_freep) char **seats = NULL;
|
||||||
_cleanup_free_ char *home_path = NULL;
|
_cleanup_free_ char *home_path = NULL;
|
||||||
char **s;
|
char **s;
|
||||||
|
@ -151,7 +150,6 @@ static int method_list_homes(
|
||||||
|
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Iterator i;
|
|
||||||
Home *h;
|
Home *h;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -166,7 +164,7 @@ static int method_list_homes(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_uid, i) {
|
HASHMAP_FOREACH(h, m->homes_by_uid) {
|
||||||
_cleanup_free_ char *path = NULL;
|
_cleanup_free_ char *path = NULL;
|
||||||
|
|
||||||
r = bus_home_path(h, &path);
|
r = bus_home_path(h, &path);
|
||||||
|
@ -560,7 +558,6 @@ static int method_lock_all_homes(sd_bus_message *message, void *userdata, sd_bus
|
||||||
_cleanup_(operation_unrefp) Operation *o = NULL;
|
_cleanup_(operation_unrefp) Operation *o = NULL;
|
||||||
bool waiting = false;
|
bool waiting = false;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Iterator i;
|
|
||||||
Home *h;
|
Home *h;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -570,7 +567,7 @@ static int method_lock_all_homes(sd_bus_message *message, void *userdata, sd_bus
|
||||||
* for every suitable home we have and only when all of them completed we send a reply indicating
|
* for every suitable home we have and only when all of them completed we send a reply indicating
|
||||||
* completion. */
|
* completion. */
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_name, i) {
|
HASHMAP_FOREACH(h, m->homes_by_name) {
|
||||||
|
|
||||||
/* Automatically suspend all homes that have at least one client referencing it that asked
|
/* Automatically suspend all homes that have at least one client referencing it that asked
|
||||||
* for "please suspend", and no client that asked for "please do not suspend". */
|
* for "please suspend", and no client that asked for "please do not suspend". */
|
||||||
|
|
|
@ -267,7 +267,6 @@ Manager* manager_free(Manager *m) {
|
||||||
|
|
||||||
int manager_verify_user_record(Manager *m, UserRecord *hr) {
|
int manager_verify_user_record(Manager *m, UserRecord *hr) {
|
||||||
EVP_PKEY *pkey;
|
EVP_PKEY *pkey;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -298,7 +297,7 @@ int manager_verify_user_record(Manager *m, UserRecord *hr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(pkey, m->public_keys, i) {
|
HASHMAP_FOREACH(pkey, m->public_keys) {
|
||||||
r = user_record_verify(hr, pkey);
|
r = user_record_verify(hr, pkey);
|
||||||
switch (r) {
|
switch (r) {
|
||||||
|
|
||||||
|
@ -1606,9 +1605,8 @@ int manager_gc_images(Manager *m) {
|
||||||
manager_revalidate_image(m, h);
|
manager_revalidate_image(m, h);
|
||||||
} else {
|
} else {
|
||||||
/* Gc all */
|
/* Gc all */
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_name, i)
|
HASHMAP_FOREACH(h, m->homes_by_name)
|
||||||
manager_revalidate_image(m, h);
|
manager_revalidate_image(m, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,13 +103,12 @@ int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, VarlinkMet
|
||||||
else if (p.user_name)
|
else if (p.user_name)
|
||||||
h = hashmap_get(m->homes_by_name, p.user_name);
|
h = hashmap_get(m->homes_by_name, p.user_name);
|
||||||
else {
|
else {
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
/* If neither UID nor name was specified, then dump all homes. Do so with varlink_notify()
|
/* If neither UID nor name was specified, then dump all homes. Do so with varlink_notify()
|
||||||
* for all entries but the last, so that clients can stream the results, and easily process
|
* for all entries but the last, so that clients can stream the results, and easily process
|
||||||
* them piecemeal. */
|
* them piecemeal. */
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_name, i) {
|
HASHMAP_FOREACH(h, m->homes_by_name) {
|
||||||
|
|
||||||
if (!home_user_match_lookup_parameters(&p, h))
|
if (!home_user_match_lookup_parameters(&p, h))
|
||||||
continue;
|
continue;
|
||||||
|
@ -219,9 +218,8 @@ int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, VarlinkMe
|
||||||
else if (p.group_name)
|
else if (p.group_name)
|
||||||
h = hashmap_get(m->homes_by_name, p.group_name);
|
h = hashmap_get(m->homes_by_name, p.group_name);
|
||||||
else {
|
else {
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_name, i) {
|
HASHMAP_FOREACH(h, m->homes_by_name) {
|
||||||
|
|
||||||
if (!home_group_match_lookup_parameters(&p, h))
|
if (!home_group_match_lookup_parameters(&p, h))
|
||||||
continue;
|
continue;
|
||||||
|
@ -315,9 +313,8 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
|
||||||
|
|
||||||
} else if (p.group_name) {
|
} else if (p.group_name) {
|
||||||
const char *last = NULL;
|
const char *last = NULL;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_name, i) {
|
HASHMAP_FOREACH(h, m->homes_by_name) {
|
||||||
|
|
||||||
if (!strv_contains(h->record->member_of, p.group_name))
|
if (!strv_contains(h->record->member_of, p.group_name))
|
||||||
continue;
|
continue;
|
||||||
|
@ -337,9 +334,8 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
|
||||||
JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(p.group_name))));
|
JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(p.group_name))));
|
||||||
} else {
|
} else {
|
||||||
const char *last_user_name = NULL, *last_group_name = NULL;
|
const char *last_user_name = NULL, *last_group_name = NULL;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(h, m->homes_by_name, i) {
|
HASHMAP_FOREACH(h, m->homes_by_name) {
|
||||||
char **j;
|
char **j;
|
||||||
|
|
||||||
STRV_FOREACH(j, h->record->member_of) {
|
STRV_FOREACH(j, h->record->member_of) {
|
||||||
|
|
|
@ -562,7 +562,6 @@ static int manager_on_notify(sd_event_source *s, int fd, uint32_t revents, void
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
char *p, *e;
|
char *p, *e;
|
||||||
Transfer *t;
|
Transfer *t;
|
||||||
Iterator i;
|
|
||||||
ssize_t n;
|
ssize_t n;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -585,7 +584,7 @@ static int manager_on_notify(sd_event_source *s, int fd, uint32_t revents, void
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(t, m->transfers, i)
|
HASHMAP_FOREACH(t, m->transfers)
|
||||||
if (ucred->pid == t->pid)
|
if (ucred->pid == t->pid)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -670,13 +669,12 @@ static int manager_new(Manager **ret) {
|
||||||
|
|
||||||
static Transfer *manager_find(Manager *m, TransferType type, const char *remote) {
|
static Transfer *manager_find(Manager *m, TransferType type, const char *remote) {
|
||||||
Transfer *t;
|
Transfer *t;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(type >= 0);
|
assert(type >= 0);
|
||||||
assert(type < _TRANSFER_TYPE_MAX);
|
assert(type < _TRANSFER_TYPE_MAX);
|
||||||
|
|
||||||
HASHMAP_FOREACH(t, m->transfers, i)
|
HASHMAP_FOREACH(t, m->transfers)
|
||||||
if (t->type == type && streq_ptr(t->remote, remote))
|
if (t->type == type && streq_ptr(t->remote, remote))
|
||||||
return t;
|
return t;
|
||||||
|
|
||||||
|
@ -990,7 +988,6 @@ static int method_list_transfers(sd_bus_message *msg, void *userdata, sd_bus_err
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Transfer *t;
|
Transfer *t;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(msg);
|
assert(msg);
|
||||||
|
@ -1004,7 +1001,7 @@ static int method_list_transfers(sd_bus_message *msg, void *userdata, sd_bus_err
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(t, m->transfers, i) {
|
HASHMAP_FOREACH(t, m->transfers) {
|
||||||
|
|
||||||
r = sd_bus_message_append(
|
r = sd_bus_message_append(
|
||||||
reply,
|
reply,
|
||||||
|
@ -1162,13 +1159,12 @@ static int transfer_node_enumerator(
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Transfer *t;
|
Transfer *t;
|
||||||
unsigned k = 0;
|
unsigned k = 0;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
l = new0(char*, hashmap_size(m->transfers) + 1);
|
l = new0(char*, hashmap_size(m->transfers) + 1);
|
||||||
if (!l)
|
if (!l)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
HASHMAP_FOREACH(t, m->transfers, i) {
|
HASHMAP_FOREACH(t, m->transfers) {
|
||||||
|
|
||||||
l[k] = strdup(t->object_path);
|
l[k] = strdup(t->object_path);
|
||||||
if (!l[k])
|
if (!l[k])
|
||||||
|
|
|
@ -450,7 +450,6 @@ int catalog_update(const char* database, const char* root, const char* const* di
|
||||||
ssize_t offset;
|
ssize_t offset;
|
||||||
char *payload;
|
char *payload;
|
||||||
CatalogItem *i;
|
CatalogItem *i;
|
||||||
Iterator j;
|
|
||||||
unsigned n;
|
unsigned n;
|
||||||
int r;
|
int r;
|
||||||
int64_t sz;
|
int64_t sz;
|
||||||
|
@ -482,7 +481,7 @@ int catalog_update(const char* database, const char* root, const char* const* di
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(payload, i, h, j) {
|
ORDERED_HASHMAP_FOREACH_KEY(payload, i, h) {
|
||||||
log_debug("Found " SD_ID128_FORMAT_STR ", language %s",
|
log_debug("Found " SD_ID128_FORMAT_STR ", language %s",
|
||||||
SD_ID128_FORMAT_VAL(i->id),
|
SD_ID128_FORMAT_VAL(i->id),
|
||||||
isempty(i->language) ? "C" : i->language);
|
isempty(i->language) ? "C" : i->language);
|
||||||
|
|
|
@ -1644,14 +1644,13 @@ static int add_units(sd_journal *j) {
|
||||||
|
|
||||||
if (!strv_isempty(patterns)) {
|
if (!strv_isempty(patterns)) {
|
||||||
_cleanup_set_free_free_ Set *units = NULL;
|
_cleanup_set_free_free_ Set *units = NULL;
|
||||||
Iterator it;
|
|
||||||
char *u;
|
char *u;
|
||||||
|
|
||||||
r = get_possible_units(j, SYSTEM_UNITS, patterns, &units);
|
r = get_possible_units(j, SYSTEM_UNITS, patterns, &units);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(u, units, it) {
|
SET_FOREACH(u, units) {
|
||||||
r = add_matches_for_unit(j, u);
|
r = add_matches_for_unit(j, u);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -1689,14 +1688,13 @@ static int add_units(sd_journal *j) {
|
||||||
|
|
||||||
if (!strv_isempty(patterns)) {
|
if (!strv_isempty(patterns)) {
|
||||||
_cleanup_set_free_free_ Set *units = NULL;
|
_cleanup_set_free_free_ Set *units = NULL;
|
||||||
Iterator it;
|
|
||||||
char *u;
|
char *u;
|
||||||
|
|
||||||
r = get_possible_units(j, USER_UNITS, patterns, &units);
|
r = get_possible_units(j, USER_UNITS, patterns, &units);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(u, units, it) {
|
SET_FOREACH(u, units) {
|
||||||
r = add_matches_for_user_unit(j, u, getuid());
|
r = add_matches_for_user_unit(j, u, getuid());
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -1745,10 +1743,9 @@ static int add_priorities(sd_journal *j) {
|
||||||
|
|
||||||
static int add_facilities(sd_journal *j) {
|
static int add_facilities(sd_journal *j) {
|
||||||
void *p;
|
void *p;
|
||||||
Iterator it;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
SET_FOREACH(p, arg_facilities, it) {
|
SET_FOREACH(p, arg_facilities) {
|
||||||
char match[STRLEN("SYSLOG_FACILITY=") + DECIMAL_STR_MAX(int)];
|
char match[STRLEN("SYSLOG_FACILITY=") + DECIMAL_STR_MAX(int)];
|
||||||
|
|
||||||
xsprintf(match, "SYSLOG_FACILITY=%d", PTR_TO_INT(p));
|
xsprintf(match, "SYSLOG_FACILITY=%d", PTR_TO_INT(p));
|
||||||
|
@ -1960,14 +1957,13 @@ static int setup_keys(void) {
|
||||||
|
|
||||||
static int verify(sd_journal *j) {
|
static int verify(sd_journal *j) {
|
||||||
int r = 0;
|
int r = 0;
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
|
|
||||||
log_show_color(true);
|
log_show_color(true);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
int k;
|
int k;
|
||||||
usec_t first = 0, validated = 0, last = 0;
|
usec_t first = 0, validated = 0, last = 0;
|
||||||
|
|
||||||
|
@ -2327,9 +2323,8 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
case ACTION_VACUUM: {
|
case ACTION_VACUUM: {
|
||||||
Directory *d;
|
Directory *d;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(d, j->directories_by_path, i) {
|
HASHMAP_FOREACH(d, j->directories_by_path) {
|
||||||
int q;
|
int q;
|
||||||
|
|
||||||
q = journal_directory_vacuum(d->path, arg_vacuum_size, arg_vacuum_n_files, arg_vacuum_time, NULL, !arg_quiet);
|
q = journal_directory_vacuum(d->path, arg_vacuum_size, arg_vacuum_n_files, arg_vacuum_time, NULL, !arg_quiet);
|
||||||
|
|
|
@ -473,10 +473,9 @@ static int do_rotate(
|
||||||
|
|
||||||
static void server_process_deferred_closes(Server *s) {
|
static void server_process_deferred_closes(Server *s) {
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
/* Perform any deferred closes which aren't still offlining. */
|
/* Perform any deferred closes which aren't still offlining. */
|
||||||
SET_FOREACH(f, s->deferred_closes, i) {
|
SET_FOREACH(f, s->deferred_closes) {
|
||||||
if (journal_file_is_offlining(f))
|
if (journal_file_is_offlining(f))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -609,7 +608,6 @@ static int vacuum_offline_user_journals(Server *s) {
|
||||||
|
|
||||||
void server_rotate(Server *s) {
|
void server_rotate(Server *s) {
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
Iterator i;
|
|
||||||
void *k;
|
void *k;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -620,7 +618,7 @@ void server_rotate(Server *s) {
|
||||||
(void) do_rotate(s, &s->system_journal, "system", s->seal, 0);
|
(void) do_rotate(s, &s->system_journal, "system", s->seal, 0);
|
||||||
|
|
||||||
/* Then, rotate all user journals we have open (keeping them open) */
|
/* Then, rotate all user journals we have open (keeping them open) */
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) {
|
ORDERED_HASHMAP_FOREACH_KEY(f, k, s->user_journals) {
|
||||||
r = do_rotate(s, &f, "user", s->seal, PTR_TO_UID(k));
|
r = do_rotate(s, &f, "user", s->seal, PTR_TO_UID(k));
|
||||||
if (r >= 0)
|
if (r >= 0)
|
||||||
ordered_hashmap_replace(s->user_journals, k, f);
|
ordered_hashmap_replace(s->user_journals, k, f);
|
||||||
|
@ -639,7 +637,6 @@ void server_rotate(Server *s) {
|
||||||
|
|
||||||
void server_sync(Server *s) {
|
void server_sync(Server *s) {
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (s->system_journal) {
|
if (s->system_journal) {
|
||||||
|
@ -648,7 +645,7 @@ void server_sync(Server *s) {
|
||||||
log_warning_errno(r, "Failed to sync system journal, ignoring: %m");
|
log_warning_errno(r, "Failed to sync system journal, ignoring: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, s->user_journals, i) {
|
ORDERED_HASHMAP_FOREACH(f, s->user_journals) {
|
||||||
r = journal_file_set_offline(f, false);
|
r = journal_file_set_offline(f, false);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning_errno(r, "Failed to sync user journal, ignoring: %m");
|
log_warning_errno(r, "Failed to sync user journal, ignoring: %m");
|
||||||
|
@ -2433,7 +2430,6 @@ int server_init(Server *s, const char *namespace) {
|
||||||
void server_maybe_append_tags(Server *s) {
|
void server_maybe_append_tags(Server *s) {
|
||||||
#if HAVE_GCRYPT
|
#if HAVE_GCRYPT
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
Iterator i;
|
|
||||||
usec_t n;
|
usec_t n;
|
||||||
|
|
||||||
n = now(CLOCK_REALTIME);
|
n = now(CLOCK_REALTIME);
|
||||||
|
@ -2441,7 +2437,7 @@ void server_maybe_append_tags(Server *s) {
|
||||||
if (s->system_journal)
|
if (s->system_journal)
|
||||||
journal_file_maybe_append_tag(s->system_journal, n);
|
journal_file_maybe_append_tag(s->system_journal, n);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, s->user_journals, i)
|
ORDERED_HASHMAP_FOREACH(f, s->user_journals)
|
||||||
journal_file_maybe_append_tag(f, n);
|
journal_file_maybe_append_tag(f, n);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -834,13 +834,12 @@ int server_restore_streams(Server *s, FDSet *fds) {
|
||||||
FOREACH_DIRENT(de, d, goto fail) {
|
FOREACH_DIRENT(de, d, goto fail) {
|
||||||
unsigned long st_dev, st_ino;
|
unsigned long st_dev, st_ino;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
Iterator i;
|
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
if (sscanf(de->d_name, "%lu:%lu", &st_dev, &st_ino) != 2)
|
if (sscanf(de->d_name, "%lu:%lu", &st_dev, &st_ino) != 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
FDSET_FOREACH(fd, fds, i) {
|
FDSET_FOREACH(fd, fds) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if (fstat(fd, &st) < 0)
|
if (fstat(fd, &st) < 0)
|
||||||
|
|
|
@ -552,7 +552,6 @@ unsigned mmap_cache_get_missed(MMapCache *m) {
|
||||||
static void mmap_cache_process_sigbus(MMapCache *m) {
|
static void mmap_cache_process_sigbus(MMapCache *m) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
MMapFileDescriptor *f;
|
MMapFileDescriptor *f;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -572,7 +571,7 @@ static void mmap_cache_process_sigbus(MMapCache *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ours = false;
|
ours = false;
|
||||||
HASHMAP_FOREACH(f, m->fds, i) {
|
HASHMAP_FOREACH(f, m->fds) {
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
LIST_FOREACH(by_fd, w, f->windows) {
|
LIST_FOREACH(by_fd, w, f->windows) {
|
||||||
|
@ -601,7 +600,7 @@ static void mmap_cache_process_sigbus(MMapCache *m) {
|
||||||
if (_likely_(!found))
|
if (_likely_(!found))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
HASHMAP_FOREACH(f, m->fds, i) {
|
HASHMAP_FOREACH(f, m->fds) {
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
if (!f->sigbus)
|
if (!f->sigbus)
|
||||||
|
|
|
@ -105,7 +105,6 @@ static int journal_put_error(sd_journal *j, int r, const char *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void detach_location(sd_journal *j) {
|
static void detach_location(sd_journal *j) {
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
|
@ -113,7 +112,7 @@ static void detach_location(sd_journal *j) {
|
||||||
j->current_file = NULL;
|
j->current_file = NULL;
|
||||||
j->current_field = 0;
|
j->current_field = 0;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i)
|
ORDERED_HASHMAP_FOREACH(f, j->files)
|
||||||
journal_file_reset_location(f);
|
journal_file_reset_location(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1859,7 +1858,6 @@ static int add_search_paths(sd_journal *j) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_current_paths(sd_journal *j) {
|
static int add_current_paths(sd_journal *j) {
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
|
@ -1868,7 +1866,7 @@ static int add_current_paths(sd_journal *j) {
|
||||||
/* Simply adds all directories for files we have open as directories. We don't expect errors here, so we
|
/* Simply adds all directories for files we have open as directories. We don't expect errors here, so we
|
||||||
* treat them as fatal. */
|
* treat them as fatal. */
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
_cleanup_free_ char *dir;
|
_cleanup_free_ char *dir;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -2103,7 +2101,6 @@ _public_ int sd_journal_open_directory_fd(sd_journal **ret, int fd, int flags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_public_ int sd_journal_open_files_fd(sd_journal **ret, int fds[], unsigned n_fds, int flags) {
|
_public_ int sd_journal_open_files_fd(sd_journal **ret, int fds[], unsigned n_fds, int flags) {
|
||||||
Iterator iterator;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
_cleanup_(sd_journal_closep) sd_journal *j = NULL;
|
_cleanup_(sd_journal_closep) sd_journal *j = NULL;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
@ -2148,7 +2145,7 @@ _public_ int sd_journal_open_files_fd(sd_journal **ret, int fds[], unsigned n_fd
|
||||||
fail:
|
fail:
|
||||||
/* If we fail, make sure we don't take possession of the files we managed to make use of successfully, and they
|
/* If we fail, make sure we don't take possession of the files we managed to make use of successfully, and they
|
||||||
* remain open */
|
* remain open */
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, iterator)
|
ORDERED_HASHMAP_FOREACH(f, j->files)
|
||||||
f->close_fd = false;
|
f->close_fd = false;
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
|
@ -2566,7 +2563,6 @@ _public_ int sd_journal_get_timeout(sd_journal *j, uint64_t *timeout_usec) {
|
||||||
static void process_q_overflow(sd_journal *j) {
|
static void process_q_overflow(sd_journal *j) {
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
Directory *m;
|
Directory *m;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
|
|
||||||
|
@ -2580,7 +2576,7 @@ static void process_q_overflow(sd_journal *j) {
|
||||||
j->generation++;
|
j->generation++;
|
||||||
(void) reiterate_all_paths(j);
|
(void) reiterate_all_paths(j);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
|
|
||||||
if (f->last_seen_generation == j->generation)
|
if (f->last_seen_generation == j->generation)
|
||||||
continue;
|
continue;
|
||||||
|
@ -2589,7 +2585,7 @@ static void process_q_overflow(sd_journal *j) {
|
||||||
remove_file_real(j, f);
|
remove_file_real(j, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(m, j->directories_by_path, i) {
|
HASHMAP_FOREACH(m, j->directories_by_path) {
|
||||||
|
|
||||||
if (m->last_seen_generation == j->generation)
|
if (m->last_seen_generation == j->generation)
|
||||||
continue;
|
continue;
|
||||||
|
@ -2704,7 +2700,6 @@ _public_ int sd_journal_wait(sd_journal *j, uint64_t timeout_usec) {
|
||||||
assert_return(!journal_pid_changed(j), -ECHILD);
|
assert_return(!journal_pid_changed(j), -ECHILD);
|
||||||
|
|
||||||
if (j->inotify_fd < 0) {
|
if (j->inotify_fd < 0) {
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
|
|
||||||
/* This is the first invocation, hence create the
|
/* This is the first invocation, hence create the
|
||||||
|
@ -2715,7 +2710,7 @@ _public_ int sd_journal_wait(sd_journal *j, uint64_t timeout_usec) {
|
||||||
|
|
||||||
/* Server might have done some vacuuming while we weren't watching.
|
/* Server might have done some vacuuming while we weren't watching.
|
||||||
Get rid of the deleted files now so they don't stay around indefinitely. */
|
Get rid of the deleted files now so they don't stay around indefinitely. */
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
r = journal_file_fstat(f);
|
r = journal_file_fstat(f);
|
||||||
if (r == -EIDRM)
|
if (r == -EIDRM)
|
||||||
remove_file_real(j, f);
|
remove_file_real(j, f);
|
||||||
|
@ -2757,7 +2752,6 @@ _public_ int sd_journal_wait(sd_journal *j, uint64_t timeout_usec) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, uint64_t *to) {
|
_public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, uint64_t *to) {
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
bool first = true;
|
bool first = true;
|
||||||
uint64_t fmin = 0, tmax = 0;
|
uint64_t fmin = 0, tmax = 0;
|
||||||
|
@ -2768,7 +2762,7 @@ _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from,
|
||||||
assert_return(from || to, -EINVAL);
|
assert_return(from || to, -EINVAL);
|
||||||
assert_return(from != to, -EINVAL);
|
assert_return(from != to, -EINVAL);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
usec_t fr, t;
|
usec_t fr, t;
|
||||||
|
|
||||||
r = journal_file_get_cutoff_realtime_usec(f, &fr, &t);
|
r = journal_file_get_cutoff_realtime_usec(f, &fr, &t);
|
||||||
|
@ -2798,7 +2792,6 @@ _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from,
|
||||||
}
|
}
|
||||||
|
|
||||||
_public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t *from, uint64_t *to) {
|
_public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t *from, uint64_t *to) {
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
int r;
|
int r;
|
||||||
|
@ -2808,7 +2801,7 @@ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot
|
||||||
assert_return(from || to, -EINVAL);
|
assert_return(from || to, -EINVAL);
|
||||||
assert_return(from != to, -EINVAL);
|
assert_return(from != to, -EINVAL);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
usec_t fr, t;
|
usec_t fr, t;
|
||||||
|
|
||||||
r = journal_file_get_cutoff_monotonic_usec(f, boot_id, &fr, &t);
|
r = journal_file_get_cutoff_monotonic_usec(f, boot_id, &fr, &t);
|
||||||
|
@ -2837,13 +2830,12 @@ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot
|
||||||
}
|
}
|
||||||
|
|
||||||
void journal_print_header(sd_journal *j) {
|
void journal_print_header(sd_journal *j) {
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
bool newline = false;
|
bool newline = false;
|
||||||
|
|
||||||
assert(j);
|
assert(j);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
if (newline)
|
if (newline)
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
else
|
else
|
||||||
|
@ -2854,7 +2846,6 @@ void journal_print_header(sd_journal *j) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_public_ int sd_journal_get_usage(sd_journal *j, uint64_t *bytes) {
|
_public_ int sd_journal_get_usage(sd_journal *j, uint64_t *bytes) {
|
||||||
Iterator i;
|
|
||||||
JournalFile *f;
|
JournalFile *f;
|
||||||
uint64_t sum = 0;
|
uint64_t sum = 0;
|
||||||
|
|
||||||
|
@ -2862,7 +2853,7 @@ _public_ int sd_journal_get_usage(sd_journal *j, uint64_t *bytes) {
|
||||||
assert_return(!journal_pid_changed(j), -ECHILD);
|
assert_return(!journal_pid_changed(j), -ECHILD);
|
||||||
assert_return(bytes, -EINVAL);
|
assert_return(bytes, -EINVAL);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(f, j->files) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if (fstat(f->fd, &st) < 0)
|
if (fstat(f->fd, &st) < 0)
|
||||||
|
@ -2920,7 +2911,6 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
JournalFile *of;
|
JournalFile *of;
|
||||||
Iterator i;
|
|
||||||
Object *o;
|
Object *o;
|
||||||
const void *odata;
|
const void *odata;
|
||||||
size_t ol;
|
size_t ol;
|
||||||
|
@ -2988,7 +2978,7 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
|
||||||
* object by checking if it exists in the earlier
|
* object by checking if it exists in the earlier
|
||||||
* traversed files. */
|
* traversed files. */
|
||||||
found = false;
|
found = false;
|
||||||
ORDERED_HASHMAP_FOREACH(of, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(of, j->files) {
|
||||||
if (of == j->unique_file)
|
if (of == j->unique_file)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -3060,7 +3050,6 @@ _public_ int sd_journal_enumerate_fields(sd_journal *j, const char **field) {
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
JournalFile *f, *of;
|
JournalFile *f, *of;
|
||||||
Iterator i;
|
|
||||||
uint64_t m;
|
uint64_t m;
|
||||||
Object *o;
|
Object *o;
|
||||||
size_t sz;
|
size_t sz;
|
||||||
|
@ -3137,7 +3126,7 @@ _public_ int sd_journal_enumerate_fields(sd_journal *j, const char **field) {
|
||||||
|
|
||||||
/* Let's see if we already returned this field name before. */
|
/* Let's see if we already returned this field name before. */
|
||||||
found = false;
|
found = false;
|
||||||
ORDERED_HASHMAP_FOREACH(of, j->files, i) {
|
ORDERED_HASHMAP_FOREACH(of, j->files) {
|
||||||
if (of == f)
|
if (of == f)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,6 @@ static void test_catalog_import_badid(void) {
|
||||||
static void test_catalog_import_one(void) {
|
static void test_catalog_import_one(void) {
|
||||||
_cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
|
_cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
|
||||||
char *payload;
|
char *payload;
|
||||||
Iterator j;
|
|
||||||
|
|
||||||
const char *input =
|
const char *input =
|
||||||
"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededed\n" \
|
"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededed\n" \
|
||||||
|
@ -80,7 +79,7 @@ static void test_catalog_import_one(void) {
|
||||||
h = test_import(input, -1, 0);
|
h = test_import(input, -1, 0);
|
||||||
assert_se(ordered_hashmap_size(h) == 1);
|
assert_se(ordered_hashmap_size(h) == 1);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(payload, h, j) {
|
ORDERED_HASHMAP_FOREACH(payload, h) {
|
||||||
printf("expect: %s\n", expect);
|
printf("expect: %s\n", expect);
|
||||||
printf("actual: %s\n", payload);
|
printf("actual: %s\n", payload);
|
||||||
assert_se(streq(expect, payload));
|
assert_se(streq(expect, payload));
|
||||||
|
@ -90,7 +89,6 @@ static void test_catalog_import_one(void) {
|
||||||
static void test_catalog_import_merge(void) {
|
static void test_catalog_import_merge(void) {
|
||||||
_cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
|
_cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
|
||||||
char *payload;
|
char *payload;
|
||||||
Iterator j;
|
|
||||||
|
|
||||||
const char *input =
|
const char *input =
|
||||||
"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededed\n" \
|
"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededed\n" \
|
||||||
|
@ -116,14 +114,13 @@ static void test_catalog_import_merge(void) {
|
||||||
h = test_import(input, -1, 0);
|
h = test_import(input, -1, 0);
|
||||||
assert_se(ordered_hashmap_size(h) == 1);
|
assert_se(ordered_hashmap_size(h) == 1);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(payload, h, j)
|
ORDERED_HASHMAP_FOREACH(payload, h)
|
||||||
assert_se(streq(combined, payload));
|
assert_se(streq(combined, payload));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_catalog_import_merge_no_body(void) {
|
static void test_catalog_import_merge_no_body(void) {
|
||||||
_cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
|
_cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
|
||||||
char *payload;
|
char *payload;
|
||||||
Iterator j;
|
|
||||||
|
|
||||||
const char *input =
|
const char *input =
|
||||||
"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededed\n" \
|
"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededed\n" \
|
||||||
|
@ -148,7 +145,7 @@ static void test_catalog_import_merge_no_body(void) {
|
||||||
h = test_import(input, -1, 0);
|
h = test_import(input, -1, 0);
|
||||||
assert_se(ordered_hashmap_size(h) == 1);
|
assert_se(ordered_hashmap_size(h) == 1);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(payload, h, j)
|
ORDERED_HASHMAP_FOREACH(payload, h)
|
||||||
assert_se(streq(combined, payload));
|
assert_se(streq(combined, payload));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,9 +81,8 @@ static int option_append(uint8_t options[], size_t size, size_t *offset,
|
||||||
OrderedHashmap *s = (OrderedHashmap *) optval;
|
OrderedHashmap *s = (OrderedHashmap *) optval;
|
||||||
struct sd_dhcp_option *p;
|
struct sd_dhcp_option *p;
|
||||||
size_t l = 0;
|
size_t l = 0;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(p, s, i)
|
ORDERED_HASHMAP_FOREACH(p, s)
|
||||||
l += p->length + 2;
|
l += p->length + 2;
|
||||||
|
|
||||||
if (*offset + l + 2 > size)
|
if (*offset + l + 2 > size)
|
||||||
|
@ -94,7 +93,7 @@ static int option_append(uint8_t options[], size_t size, size_t *offset,
|
||||||
|
|
||||||
*offset += 2;
|
*offset += 2;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(p, s, i) {
|
ORDERED_HASHMAP_FOREACH(p, s) {
|
||||||
options[*offset] = p->option;
|
options[*offset] = p->option;
|
||||||
options[*offset + 1] = p->length;
|
options[*offset + 1] = p->length;
|
||||||
memcpy(&options[*offset + 2], p->data, p->length);
|
memcpy(&options[*offset + 2], p->data, p->length);
|
||||||
|
|
|
@ -81,7 +81,6 @@ int dhcp6_option_append(uint8_t **buf, size_t *buflen, uint16_t code,
|
||||||
|
|
||||||
int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHashmap *vendor_options) {
|
int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHashmap *vendor_options) {
|
||||||
sd_dhcp6_option *options;
|
sd_dhcp6_option *options;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(buf);
|
assert(buf);
|
||||||
|
@ -89,7 +88,7 @@ int dhcp6_option_append_vendor_option(uint8_t **buf, size_t *buflen, OrderedHash
|
||||||
assert(buflen);
|
assert(buflen);
|
||||||
assert(vendor_options);
|
assert(vendor_options);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(options, vendor_options, i) {
|
ORDERED_HASHMAP_FOREACH(options, vendor_options) {
|
||||||
_cleanup_free_ uint8_t *p = NULL;
|
_cleanup_free_ uint8_t *p = NULL;
|
||||||
size_t total;
|
size_t total;
|
||||||
|
|
||||||
|
|
|
@ -919,7 +919,6 @@ static int dhcp_client_send_raw(
|
||||||
|
|
||||||
static int client_append_common_discover_request_options(sd_dhcp_client *client, DHCPPacket *packet, size_t *optoffset, size_t optlen) {
|
static int client_append_common_discover_request_options(sd_dhcp_client *client, DHCPPacket *packet, size_t *optoffset, size_t optlen) {
|
||||||
sd_dhcp_option *j;
|
sd_dhcp_option *j;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(client);
|
assert(client);
|
||||||
|
@ -970,7 +969,7 @@ static int client_append_common_discover_request_options(sd_dhcp_client *client,
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(j, client->extra_options, i) {
|
ORDERED_HASHMAP_FOREACH(j, client->extra_options) {
|
||||||
r = dhcp_option_append(&packet->dhcp, optlen, optoffset, 0,
|
r = dhcp_option_append(&packet->dhcp, optlen, optoffset, 0,
|
||||||
j->option, j->length, j->data);
|
j->option, j->length, j->data);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
|
@ -479,7 +479,6 @@ static int server_send_ack(
|
||||||
_cleanup_free_ DHCPPacket *packet = NULL;
|
_cleanup_free_ DHCPPacket *packet = NULL;
|
||||||
be32_t lease_time;
|
be32_t lease_time;
|
||||||
sd_dhcp_option *j;
|
sd_dhcp_option *j;
|
||||||
Iterator i;
|
|
||||||
size_t offset;
|
size_t offset;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -531,7 +530,7 @@ static int server_send_ack(
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(j, server->extra_options, i) {
|
ORDERED_HASHMAP_FOREACH(j, server->extra_options) {
|
||||||
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
|
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
|
||||||
j->option, j->length, j->data);
|
j->option, j->length, j->data);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
|
@ -624,7 +624,6 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
||||||
IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
|
IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
|
||||||
struct sd_dhcp6_option *j;
|
struct sd_dhcp6_option *j;
|
||||||
size_t len, optlen = 512;
|
size_t len, optlen = 512;
|
||||||
Iterator i;
|
|
||||||
uint8_t *opt;
|
uint8_t *opt;
|
||||||
int r;
|
int r;
|
||||||
usec_t elapsed_usec;
|
usec_t elapsed_usec;
|
||||||
|
@ -859,7 +858,7 @@ static int client_send_message(sd_dhcp6_client *client, usec_t time_now) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(j, client->extra_options, i) {
|
ORDERED_HASHMAP_FOREACH(j, client->extra_options) {
|
||||||
r = dhcp6_option_append(&opt, &optlen, j->option, j->length, j->data);
|
r = dhcp6_option_append(&opt, &optlen, j->option, j->length, j->data);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -431,7 +431,6 @@ static int lldp_start_timer(sd_lldp *lldp, sd_lldp_neighbor *neighbor) {
|
||||||
|
|
||||||
_public_ int sd_lldp_get_neighbors(sd_lldp *lldp, sd_lldp_neighbor ***ret) {
|
_public_ int sd_lldp_get_neighbors(sd_lldp *lldp, sd_lldp_neighbor ***ret) {
|
||||||
sd_lldp_neighbor **l = NULL, *n;
|
sd_lldp_neighbor **l = NULL, *n;
|
||||||
Iterator i;
|
|
||||||
int k = 0, r;
|
int k = 0, r;
|
||||||
|
|
||||||
assert_return(lldp, -EINVAL);
|
assert_return(lldp, -EINVAL);
|
||||||
|
@ -452,7 +451,7 @@ _public_ int sd_lldp_get_neighbors(sd_lldp *lldp, sd_lldp_neighbor ***ret) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(n, lldp->neighbor_by_id, i)
|
HASHMAP_FOREACH(n, lldp->neighbor_by_id)
|
||||||
l[k++] = sd_lldp_neighbor_ref(n);
|
l[k++] = sd_lldp_neighbor_ref(n);
|
||||||
|
|
||||||
assert((size_t) k == hashmap_size(lldp->neighbor_by_id));
|
assert((size_t) k == hashmap_size(lldp->neighbor_by_id));
|
||||||
|
|
|
@ -961,9 +961,8 @@ void bus_match_free(struct bus_match_node *node) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (BUS_MATCH_CAN_HASH(node->type)) {
|
if (BUS_MATCH_CAN_HASH(node->type)) {
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(c, node->compare.children, i)
|
HASHMAP_FOREACH(c, node->compare.children)
|
||||||
bus_match_free(c);
|
bus_match_free(c);
|
||||||
|
|
||||||
assert(hashmap_isempty(node->compare.children));
|
assert(hashmap_isempty(node->compare.children));
|
||||||
|
@ -1054,9 +1053,8 @@ void bus_match_dump(struct bus_match_node *node, unsigned level) {
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
|
||||||
if (BUS_MATCH_CAN_HASH(node->type)) {
|
if (BUS_MATCH_CAN_HASH(node->type)) {
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(c, node->compare.children, i)
|
HASHMAP_FOREACH(c, node->compare.children)
|
||||||
bus_match_dump(c, level + 1);
|
bus_match_dump(c, level + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1235,7 +1235,6 @@ static int process_get_managed_objects(
|
||||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
_cleanup_set_free_free_ Set *s = NULL;
|
_cleanup_set_free_free_ Set *s = NULL;
|
||||||
Iterator i;
|
|
||||||
char *path;
|
char *path;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -1265,7 +1264,7 @@ static int process_get_managed_objects(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(path, s, i) {
|
SET_FOREACH(path, s) {
|
||||||
r = object_manager_serialize_path_and_fallbacks(bus, reply, path, &error);
|
r = object_manager_serialize_path_and_fallbacks(bus, reply, path, &error);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return bus_maybe_reply_error(m, r, &error);
|
return bus_maybe_reply_error(m, r, &error);
|
||||||
|
|
|
@ -597,7 +597,6 @@ static int bus_send_hello(sd_bus *bus) {
|
||||||
|
|
||||||
int bus_start_running(sd_bus *bus) {
|
int bus_start_running(sd_bus *bus) {
|
||||||
struct reply_callback *c;
|
struct reply_callback *c;
|
||||||
Iterator i;
|
|
||||||
usec_t n;
|
usec_t n;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -609,7 +608,7 @@ int bus_start_running(sd_bus *bus) {
|
||||||
* adding a fixed value to all entries should not alter the internal order. */
|
* adding a fixed value to all entries should not alter the internal order. */
|
||||||
|
|
||||||
n = now(CLOCK_MONOTONIC);
|
n = now(CLOCK_MONOTONIC);
|
||||||
ORDERED_HASHMAP_FOREACH(c, bus->reply_callbacks, i) {
|
ORDERED_HASHMAP_FOREACH(c, bus->reply_callbacks) {
|
||||||
if (c->timeout_usec == 0)
|
if (c->timeout_usec == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -308,16 +308,15 @@ static bool match_sysattr_value(sd_device *device, const char *sysattr, const ch
|
||||||
static bool match_sysattr(sd_device_enumerator *enumerator, sd_device *device) {
|
static bool match_sysattr(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
const char *sysattr;
|
const char *sysattr;
|
||||||
const char *value;
|
const char *value;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(enumerator);
|
assert(enumerator);
|
||||||
assert(device);
|
assert(device);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(value, sysattr, enumerator->nomatch_sysattr, i)
|
HASHMAP_FOREACH_KEY(value, sysattr, enumerator->nomatch_sysattr)
|
||||||
if (match_sysattr_value(device, sysattr, value))
|
if (match_sysattr_value(device, sysattr, value))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(value, sysattr, enumerator->match_sysattr, i)
|
HASHMAP_FOREACH_KEY(value, sysattr, enumerator->match_sysattr)
|
||||||
if (!match_sysattr_value(device, sysattr, value))
|
if (!match_sysattr_value(device, sysattr, value))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -327,7 +326,6 @@ static bool match_sysattr(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
static bool match_property(sd_device_enumerator *enumerator, sd_device *device) {
|
static bool match_property(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
const char *property;
|
const char *property;
|
||||||
const char *value;
|
const char *value;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(enumerator);
|
assert(enumerator);
|
||||||
assert(device);
|
assert(device);
|
||||||
|
@ -335,7 +333,7 @@ static bool match_property(sd_device_enumerator *enumerator, sd_device *device)
|
||||||
if (hashmap_isempty(enumerator->match_property))
|
if (hashmap_isempty(enumerator->match_property))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(value, property, enumerator->match_property, i) {
|
HASHMAP_FOREACH_KEY(value, property, enumerator->match_property) {
|
||||||
const char *property_dev, *value_dev;
|
const char *property_dev, *value_dev;
|
||||||
|
|
||||||
FOREACH_DEVICE_PROPERTY(device, property_dev, value_dev) {
|
FOREACH_DEVICE_PROPERTY(device, property_dev, value_dev) {
|
||||||
|
@ -358,12 +356,11 @@ static bool match_property(sd_device_enumerator *enumerator, sd_device *device)
|
||||||
|
|
||||||
static bool match_tag(sd_device_enumerator *enumerator, sd_device *device) {
|
static bool match_tag(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
const char *tag;
|
const char *tag;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(enumerator);
|
assert(enumerator);
|
||||||
assert(device);
|
assert(device);
|
||||||
|
|
||||||
SET_FOREACH(tag, enumerator->match_tag, i)
|
SET_FOREACH(tag, enumerator->match_tag)
|
||||||
if (!sd_device_has_tag(device, tag))
|
if (!sd_device_has_tag(device, tag))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -372,7 +369,6 @@ static bool match_tag(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
|
|
||||||
static bool match_parent(sd_device_enumerator *enumerator, sd_device *device) {
|
static bool match_parent(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
const char *syspath_parent, *syspath;
|
const char *syspath_parent, *syspath;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(enumerator);
|
assert(enumerator);
|
||||||
assert(device);
|
assert(device);
|
||||||
|
@ -382,7 +378,7 @@ static bool match_parent(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
|
|
||||||
assert_se(sd_device_get_syspath(device, &syspath) >= 0);
|
assert_se(sd_device_get_syspath(device, &syspath) >= 0);
|
||||||
|
|
||||||
SET_FOREACH(syspath_parent, enumerator->match_parent, i)
|
SET_FOREACH(syspath_parent, enumerator->match_parent)
|
||||||
if (path_startswith(syspath, syspath_parent))
|
if (path_startswith(syspath, syspath_parent))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -391,7 +387,6 @@ static bool match_parent(sd_device_enumerator *enumerator, sd_device *device) {
|
||||||
|
|
||||||
static bool match_sysname(sd_device_enumerator *enumerator, const char *sysname) {
|
static bool match_sysname(sd_device_enumerator *enumerator, const char *sysname) {
|
||||||
const char *sysname_match;
|
const char *sysname_match;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(enumerator);
|
assert(enumerator);
|
||||||
assert(sysname);
|
assert(sysname);
|
||||||
|
@ -399,7 +394,7 @@ static bool match_sysname(sd_device_enumerator *enumerator, const char *sysname)
|
||||||
if (set_isempty(enumerator->match_sysname))
|
if (set_isempty(enumerator->match_sysname))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
SET_FOREACH(sysname_match, enumerator->match_sysname, i)
|
SET_FOREACH(sysname_match, enumerator->match_sysname)
|
||||||
if (fnmatch(sysname_match, sysname, 0) == 0)
|
if (fnmatch(sysname_match, sysname, 0) == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -496,21 +491,20 @@ static int enumerator_scan_dir_and_add_devices(sd_device_enumerator *enumerator,
|
||||||
|
|
||||||
static bool match_subsystem(sd_device_enumerator *enumerator, const char *subsystem) {
|
static bool match_subsystem(sd_device_enumerator *enumerator, const char *subsystem) {
|
||||||
const char *subsystem_match;
|
const char *subsystem_match;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(enumerator);
|
assert(enumerator);
|
||||||
|
|
||||||
if (!subsystem)
|
if (!subsystem)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SET_FOREACH(subsystem_match, enumerator->nomatch_subsystem, i)
|
SET_FOREACH(subsystem_match, enumerator->nomatch_subsystem)
|
||||||
if (fnmatch(subsystem_match, subsystem, 0) == 0)
|
if (fnmatch(subsystem_match, subsystem, 0) == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (set_isempty(enumerator->match_subsystem))
|
if (set_isempty(enumerator->match_subsystem))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
SET_FOREACH(subsystem_match, enumerator->match_subsystem, i)
|
SET_FOREACH(subsystem_match, enumerator->match_subsystem)
|
||||||
if (fnmatch(subsystem_match, subsystem, 0) == 0)
|
if (fnmatch(subsystem_match, subsystem, 0) == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -626,12 +620,11 @@ static int enumerator_scan_devices_tag(sd_device_enumerator *enumerator, const c
|
||||||
|
|
||||||
static int enumerator_scan_devices_tags(sd_device_enumerator *enumerator) {
|
static int enumerator_scan_devices_tags(sd_device_enumerator *enumerator) {
|
||||||
const char *tag;
|
const char *tag;
|
||||||
Iterator i;
|
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
assert(enumerator);
|
assert(enumerator);
|
||||||
|
|
||||||
SET_FOREACH(tag, enumerator->match_tag, i) {
|
SET_FOREACH(tag, enumerator->match_tag) {
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
k = enumerator_scan_devices_tag(enumerator, tag);
|
k = enumerator_scan_devices_tag(enumerator, tag);
|
||||||
|
@ -722,9 +715,8 @@ static int parent_crawl_children(sd_device_enumerator *enumerator, const char *p
|
||||||
static int enumerator_scan_devices_children(sd_device_enumerator *enumerator) {
|
static int enumerator_scan_devices_children(sd_device_enumerator *enumerator) {
|
||||||
const char *path;
|
const char *path;
|
||||||
int r = 0, k;
|
int r = 0, k;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
SET_FOREACH(path, enumerator->match_parent, i) {
|
SET_FOREACH(path, enumerator->match_parent) {
|
||||||
k = parent_add_child(enumerator, path);
|
k = parent_add_child(enumerator, path);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
|
|
@ -353,7 +353,6 @@ DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_device_monitor, sd_device_monitor, devic
|
||||||
|
|
||||||
static int passes_filter(sd_device_monitor *m, sd_device *device) {
|
static int passes_filter(sd_device_monitor *m, sd_device *device) {
|
||||||
const char *tag, *subsystem, *devtype, *s, *d = NULL;
|
const char *tag, *subsystem, *devtype, *s, *d = NULL;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert_return(m, -EINVAL);
|
assert_return(m, -EINVAL);
|
||||||
|
@ -370,7 +369,7 @@ static int passes_filter(sd_device_monitor *m, sd_device *device) {
|
||||||
if (r < 0 && r != -ENOENT)
|
if (r < 0 && r != -ENOENT)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(devtype, subsystem, m->subsystem_filter, i) {
|
HASHMAP_FOREACH_KEY(devtype, subsystem, m->subsystem_filter) {
|
||||||
if (!streq(s, subsystem))
|
if (!streq(s, subsystem))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -390,7 +389,7 @@ tag:
|
||||||
if (set_isempty(m->tag_filter))
|
if (set_isempty(m->tag_filter))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
SET_FOREACH(tag, m->tag_filter, i)
|
SET_FOREACH(tag, m->tag_filter)
|
||||||
if (sd_device_has_tag(device, tag) > 0)
|
if (sd_device_has_tag(device, tag) > 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -631,7 +630,6 @@ _public_ int sd_device_monitor_filter_update(sd_device_monitor *m) {
|
||||||
struct sock_fprog filter;
|
struct sock_fprog filter;
|
||||||
const char *subsystem, *devtype, *tag;
|
const char *subsystem, *devtype, *tag;
|
||||||
unsigned i = 0;
|
unsigned i = 0;
|
||||||
Iterator it;
|
|
||||||
|
|
||||||
assert_return(m, -EINVAL);
|
assert_return(m, -EINVAL);
|
||||||
|
|
||||||
|
@ -655,7 +653,7 @@ _public_ int sd_device_monitor_filter_update(sd_device_monitor *m) {
|
||||||
int tag_matches = set_size(m->tag_filter);
|
int tag_matches = set_size(m->tag_filter);
|
||||||
|
|
||||||
/* add all tags matches */
|
/* add all tags matches */
|
||||||
SET_FOREACH(tag, m->tag_filter, it) {
|
SET_FOREACH(tag, m->tag_filter) {
|
||||||
uint64_t tag_bloom_bits = string_bloom64(tag);
|
uint64_t tag_bloom_bits = string_bloom64(tag);
|
||||||
uint32_t tag_bloom_hi = tag_bloom_bits >> 32;
|
uint32_t tag_bloom_hi = tag_bloom_bits >> 32;
|
||||||
uint32_t tag_bloom_lo = tag_bloom_bits & 0xffffffff;
|
uint32_t tag_bloom_lo = tag_bloom_bits & 0xffffffff;
|
||||||
|
@ -682,7 +680,7 @@ _public_ int sd_device_monitor_filter_update(sd_device_monitor *m) {
|
||||||
|
|
||||||
/* add all subsystem matches */
|
/* add all subsystem matches */
|
||||||
if (!hashmap_isempty(m->subsystem_filter)) {
|
if (!hashmap_isempty(m->subsystem_filter)) {
|
||||||
HASHMAP_FOREACH_KEY(devtype, subsystem, m->subsystem_filter, it) {
|
HASHMAP_FOREACH_KEY(devtype, subsystem, m->subsystem_filter) {
|
||||||
uint32_t hash = string_hash32(subsystem);
|
uint32_t hash = string_hash32(subsystem);
|
||||||
|
|
||||||
/* load device subsystem value in A */
|
/* load device subsystem value in A */
|
||||||
|
|
|
@ -732,7 +732,6 @@ int device_new_from_stat_rdev(sd_device **ret, const struct stat *st) {
|
||||||
|
|
||||||
int device_copy_properties(sd_device *device_dst, sd_device *device_src) {
|
int device_copy_properties(sd_device *device_dst, sd_device *device_src) {
|
||||||
const char *property, *value;
|
const char *property, *value;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(device_dst);
|
assert(device_dst);
|
||||||
|
@ -742,13 +741,13 @@ int device_copy_properties(sd_device *device_dst, sd_device *device_src) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties_db, i) {
|
ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties_db) {
|
||||||
r = device_add_property_aux(device_dst, property, value, true);
|
r = device_add_property_aux(device_dst, property, value, true);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties, i) {
|
ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties) {
|
||||||
r = device_add_property_aux(device_dst, property, value, false);
|
r = device_add_property_aux(device_dst, property, value, false);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -921,7 +920,6 @@ int device_update_db(sd_device *device) {
|
||||||
|
|
||||||
if (has_info) {
|
if (has_info) {
|
||||||
const char *property, *value, *tag;
|
const char *property, *value, *tag;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
if (major(device->devnum) > 0) {
|
if (major(device->devnum) > 0) {
|
||||||
const char *devlink;
|
const char *devlink;
|
||||||
|
@ -939,13 +937,13 @@ int device_update_db(sd_device *device) {
|
||||||
if (device->usec_initialized > 0)
|
if (device->usec_initialized > 0)
|
||||||
fprintf(f, "I:"USEC_FMT"\n", device->usec_initialized);
|
fprintf(f, "I:"USEC_FMT"\n", device->usec_initialized);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH_KEY(value, property, device->properties_db, i)
|
ORDERED_HASHMAP_FOREACH_KEY(value, property, device->properties_db)
|
||||||
fprintf(f, "E:%s=%s\n", property, value);
|
fprintf(f, "E:%s=%s\n", property, value);
|
||||||
|
|
||||||
FOREACH_DEVICE_TAG(device, tag)
|
FOREACH_DEVICE_TAG(device, tag)
|
||||||
fprintf(f, "G:%s\n", tag); /* Any tag */
|
fprintf(f, "G:%s\n", tag); /* Any tag */
|
||||||
|
|
||||||
SET_FOREACH(tag, device->current_tags, i)
|
SET_FOREACH(tag, device->current_tags)
|
||||||
fprintf(f, "Q:%s\n", tag); /* Current tag */
|
fprintf(f, "Q:%s\n", tag); /* Current tag */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1502,7 +1502,6 @@ static char *join_string_set(Set *s) {
|
||||||
size_t ret_allocated = 0, ret_len;
|
size_t ret_allocated = 0, ret_len;
|
||||||
_cleanup_free_ char *ret = NULL;
|
_cleanup_free_ char *ret = NULL;
|
||||||
const char *tag;
|
const char *tag;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
if (!GREEDY_REALLOC(ret, ret_allocated, 2))
|
if (!GREEDY_REALLOC(ret, ret_allocated, 2))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1510,7 +1509,7 @@ static char *join_string_set(Set *s) {
|
||||||
strcpy(ret, ":");
|
strcpy(ret, ":");
|
||||||
ret_len = 1;
|
ret_len = 1;
|
||||||
|
|
||||||
SET_FOREACH(tag, s, i) {
|
SET_FOREACH(tag, s) {
|
||||||
char *e;
|
char *e;
|
||||||
|
|
||||||
if (!GREEDY_REALLOC(ret, ret_allocated, ret_len + strlen(tag) + 2))
|
if (!GREEDY_REALLOC(ret, ret_allocated, ret_len + strlen(tag) + 2))
|
||||||
|
|
|
@ -2870,7 +2870,6 @@ static int process_timer(
|
||||||
|
|
||||||
static int process_child(sd_event *e) {
|
static int process_child(sd_event *e) {
|
||||||
sd_event_source *s;
|
sd_event_source *s;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(e);
|
assert(e);
|
||||||
|
@ -2895,7 +2894,7 @@ static int process_child(sd_event *e) {
|
||||||
the callback still sees the process as a zombie.
|
the callback still sees the process as a zombie.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
HASHMAP_FOREACH(s, e->child_sources, i) {
|
HASHMAP_FOREACH(s, e->child_sources) {
|
||||||
assert(s->type == SOURCE_CHILD);
|
assert(s->type == SOURCE_CHILD);
|
||||||
|
|
||||||
if (s->pending)
|
if (s->pending)
|
||||||
|
@ -3100,12 +3099,11 @@ static int event_inotify_data_process(sd_event *e, struct inotify_data *d) {
|
||||||
|
|
||||||
if (d->buffer.ev.mask & IN_Q_OVERFLOW) {
|
if (d->buffer.ev.mask & IN_Q_OVERFLOW) {
|
||||||
struct inode_data *inode_data;
|
struct inode_data *inode_data;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
/* The queue overran, let's pass this event to all event sources connected to this inotify
|
/* The queue overran, let's pass this event to all event sources connected to this inotify
|
||||||
* object */
|
* object */
|
||||||
|
|
||||||
HASHMAP_FOREACH(inode_data, d->inodes, i) {
|
HASHMAP_FOREACH(inode_data, d->inodes) {
|
||||||
sd_event_source *s;
|
sd_event_source *s;
|
||||||
|
|
||||||
LIST_FOREACH(inotify.by_inode_data, s, inode_data->event_sources) {
|
LIST_FOREACH(inotify.by_inode_data, s, inode_data->event_sources) {
|
||||||
|
@ -3203,12 +3201,11 @@ static int source_dispatch(sd_event_source *s) {
|
||||||
|
|
||||||
if (s->type != SOURCE_POST) {
|
if (s->type != SOURCE_POST) {
|
||||||
sd_event_source *z;
|
sd_event_source *z;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
/* If we execute a non-post source, let's mark all
|
/* If we execute a non-post source, let's mark all
|
||||||
* post sources as pending */
|
* post sources as pending */
|
||||||
|
|
||||||
SET_FOREACH(z, s->event->post_sources, i) {
|
SET_FOREACH(z, s->event->post_sources) {
|
||||||
if (z->enabled == SD_EVENT_OFF)
|
if (z->enabled == SD_EVENT_OFF)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,6 @@ struct udev_list_entry *udev_list_get_entry(struct udev_list *list) {
|
||||||
else {
|
else {
|
||||||
_cleanup_free_ struct udev_list_entry **buf = NULL;
|
_cleanup_free_ struct udev_list_entry **buf = NULL;
|
||||||
struct udev_list_entry *entry, **p;
|
struct udev_list_entry *entry, **p;
|
||||||
Iterator i;
|
|
||||||
size_t j;
|
size_t j;
|
||||||
|
|
||||||
buf = new(struct udev_list_entry *, n);
|
buf = new(struct udev_list_entry *, n);
|
||||||
|
@ -165,7 +164,7 @@ struct udev_list_entry *udev_list_get_entry(struct udev_list *list) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
p = buf;
|
p = buf;
|
||||||
HASHMAP_FOREACH(entry, list->unique_entries, i)
|
HASHMAP_FOREACH(entry, list->unique_entries)
|
||||||
*p++ = entry;
|
*p++ = entry;
|
||||||
|
|
||||||
typesafe_qsort(buf, n, udev_list_entry_compare_func);
|
typesafe_qsort(buf, n, udev_list_entry_compare_func);
|
||||||
|
|
|
@ -168,7 +168,6 @@ int devnode_acl_all(const char *seat,
|
||||||
_cleanup_closedir_ DIR *dir = NULL;
|
_cleanup_closedir_ DIR *dir = NULL;
|
||||||
struct dirent *dent;
|
struct dirent *dent;
|
||||||
sd_device *d;
|
sd_device *d;
|
||||||
Iterator i;
|
|
||||||
char *n;
|
char *n;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -239,7 +238,7 @@ int devnode_acl_all(const char *seat,
|
||||||
}
|
}
|
||||||
|
|
||||||
r = 0;
|
r = 0;
|
||||||
SET_FOREACH(n, nodes, i) {
|
SET_FOREACH(n, nodes) {
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"→"UID_FMT"%s%s)",
|
log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"→"UID_FMT"%s%s)",
|
||||||
|
|
|
@ -391,13 +391,12 @@ int manager_get_idle_hint(Manager *m, dual_timestamp *t) {
|
||||||
Session *s;
|
Session *s;
|
||||||
bool idle_hint;
|
bool idle_hint;
|
||||||
dual_timestamp ts = DUAL_TIMESTAMP_NULL;
|
dual_timestamp ts = DUAL_TIMESTAMP_NULL;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false, false, 0, NULL);
|
idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false, false, 0, NULL);
|
||||||
|
|
||||||
HASHMAP_FOREACH(s, m->sessions, i) {
|
HASHMAP_FOREACH(s, m->sessions) {
|
||||||
dual_timestamp k;
|
dual_timestamp k;
|
||||||
int ih;
|
int ih;
|
||||||
|
|
||||||
|
@ -547,10 +546,9 @@ int manager_spawn_autovt(Manager *m, unsigned vtnr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool manager_is_lid_closed(Manager *m) {
|
bool manager_is_lid_closed(Manager *m) {
|
||||||
Iterator i;
|
|
||||||
Button *b;
|
Button *b;
|
||||||
|
|
||||||
HASHMAP_FOREACH(b, m->buttons, i)
|
HASHMAP_FOREACH(b, m->buttons)
|
||||||
if (b->lid_closed)
|
if (b->lid_closed)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -558,10 +556,9 @@ bool manager_is_lid_closed(Manager *m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool manager_is_docked(Manager *m) {
|
static bool manager_is_docked(Manager *m) {
|
||||||
Iterator i;
|
|
||||||
Button *b;
|
Button *b;
|
||||||
|
|
||||||
HASHMAP_FOREACH(b, m->buttons, i)
|
HASHMAP_FOREACH(b, m->buttons)
|
||||||
if (b->docked)
|
if (b->docked)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -516,7 +516,6 @@ static int method_list_sessions(sd_bus_message *message, void *userdata, sd_bus_
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Session *session;
|
Session *session;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -530,7 +529,7 @@ static int method_list_sessions(sd_bus_message *message, void *userdata, sd_bus_
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(session, m->sessions, i) {
|
HASHMAP_FOREACH(session, m->sessions) {
|
||||||
_cleanup_free_ char *p = NULL;
|
_cleanup_free_ char *p = NULL;
|
||||||
|
|
||||||
p = session_bus_path(session);
|
p = session_bus_path(session);
|
||||||
|
@ -558,7 +557,6 @@ static int method_list_users(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
User *user;
|
User *user;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -572,7 +570,7 @@ static int method_list_users(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(user, m->users, i) {
|
HASHMAP_FOREACH(user, m->users) {
|
||||||
_cleanup_free_ char *p = NULL;
|
_cleanup_free_ char *p = NULL;
|
||||||
|
|
||||||
p = user_bus_path(user);
|
p = user_bus_path(user);
|
||||||
|
@ -598,7 +596,6 @@ static int method_list_seats(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Seat *seat;
|
Seat *seat;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -612,7 +609,7 @@ static int method_list_seats(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(seat, m->seats, i) {
|
HASHMAP_FOREACH(seat, m->seats) {
|
||||||
_cleanup_free_ char *p = NULL;
|
_cleanup_free_ char *p = NULL;
|
||||||
|
|
||||||
p = seat_bus_path(seat);
|
p = seat_bus_path(seat);
|
||||||
|
@ -635,7 +632,6 @@ static int method_list_inhibitors(sd_bus_message *message, void *userdata, sd_bu
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Inhibitor *inhibitor;
|
Inhibitor *inhibitor;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -649,7 +645,7 @@ static int method_list_inhibitors(sd_bus_message *message, void *userdata, sd_bu
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(inhibitor, m->inhibitors, i) {
|
HASHMAP_FOREACH(inhibitor, m->inhibitors) {
|
||||||
|
|
||||||
r = sd_bus_message_append(reply, "(ssssuu)",
|
r = sd_bus_message_append(reply, "(ssssuu)",
|
||||||
strempty(inhibit_what_to_string(inhibitor->what)),
|
strempty(inhibit_what_to_string(inhibitor->what)),
|
||||||
|
@ -1499,13 +1495,12 @@ static int have_multiple_sessions(
|
||||||
uid_t uid) {
|
uid_t uid) {
|
||||||
|
|
||||||
Session *session;
|
Session *session;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
/* Check for other users' sessions. Greeter sessions do not
|
/* Check for other users' sessions. Greeter sessions do not
|
||||||
* count, and non-login sessions do not count either. */
|
* count, and non-login sessions do not count either. */
|
||||||
HASHMAP_FOREACH(session, m->sessions, i)
|
HASHMAP_FOREACH(session, m->sessions)
|
||||||
if (session->class == SESSION_USER &&
|
if (session->class == SESSION_USER &&
|
||||||
session->user->user_record->uid != uid)
|
session->user->user_record->uid != uid)
|
||||||
return true;
|
return true;
|
||||||
|
@ -3900,7 +3895,6 @@ int match_properties_changed(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Session *session;
|
Session *session;
|
||||||
Iterator i;
|
|
||||||
int b, r;
|
int b, r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -3918,7 +3912,7 @@ int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error
|
||||||
/* systemd finished reloading, let's recheck all our sessions */
|
/* systemd finished reloading, let's recheck all our sessions */
|
||||||
log_debug("System manager has been reloaded, rechecking sessions...");
|
log_debug("System manager has been reloaded, rechecking sessions...");
|
||||||
|
|
||||||
HASHMAP_FOREACH(session, m->sessions, i)
|
HASHMAP_FOREACH(session, m->sessions)
|
||||||
session_add_to_gc_queue(session);
|
session_add_to_gc_queue(session);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -372,12 +372,11 @@ bool inhibitor_is_orphan(Inhibitor *i) {
|
||||||
|
|
||||||
InhibitWhat manager_inhibit_what(Manager *m, InhibitMode mm) {
|
InhibitWhat manager_inhibit_what(Manager *m, InhibitMode mm) {
|
||||||
Inhibitor *i;
|
Inhibitor *i;
|
||||||
Iterator j;
|
|
||||||
InhibitWhat what = 0;
|
InhibitWhat what = 0;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH(i, m->inhibitors, j)
|
HASHMAP_FOREACH(i, m->inhibitors)
|
||||||
if (i->mode == mm && i->started)
|
if (i->mode == mm && i->started)
|
||||||
what |= i->what;
|
what |= i->what;
|
||||||
|
|
||||||
|
@ -413,14 +412,13 @@ bool manager_is_inhibited(
|
||||||
Inhibitor **offending) {
|
Inhibitor **offending) {
|
||||||
|
|
||||||
Inhibitor *i;
|
Inhibitor *i;
|
||||||
Iterator j;
|
|
||||||
struct dual_timestamp ts = DUAL_TIMESTAMP_NULL;
|
struct dual_timestamp ts = DUAL_TIMESTAMP_NULL;
|
||||||
bool inhibited = false;
|
bool inhibited = false;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(w > 0 && w < _INHIBIT_WHAT_MAX);
|
assert(w > 0 && w < _INHIBIT_WHAT_MAX);
|
||||||
|
|
||||||
HASHMAP_FOREACH(i, m->inhibitors, j) {
|
HASHMAP_FOREACH(i, m->inhibitors) {
|
||||||
if (!i->started)
|
if (!i->started)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -345,14 +345,13 @@ static int seat_node_enumerator(sd_bus *bus, const char *path, void *userdata, c
|
||||||
sd_bus_message *message;
|
sd_bus_message *message;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Seat *seat;
|
Seat *seat;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
assert(path);
|
assert(path);
|
||||||
assert(nodes);
|
assert(nodes);
|
||||||
|
|
||||||
HASHMAP_FOREACH(seat, m->seats, i) {
|
HASHMAP_FOREACH(seat, m->seats) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = seat_bus_path(seat);
|
p = seat_bus_path(seat);
|
||||||
|
|
|
@ -635,14 +635,13 @@ static int session_node_enumerator(sd_bus *bus, const char *path, void *userdata
|
||||||
sd_bus_message *message;
|
sd_bus_message *message;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Session *session;
|
Session *session;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
assert(path);
|
assert(path);
|
||||||
assert(nodes);
|
assert(nodes);
|
||||||
|
|
||||||
HASHMAP_FOREACH(session, m->sessions, i) {
|
HASHMAP_FOREACH(session, m->sessions) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = session_bus_path(session);
|
p = session_bus_path(session);
|
||||||
|
@ -753,12 +752,11 @@ int session_send_lock(Session *s, bool lock) {
|
||||||
|
|
||||||
int session_send_lock_all(Manager *m, bool lock) {
|
int session_send_lock_all(Manager *m, bool lock) {
|
||||||
Session *session;
|
Session *session;
|
||||||
Iterator i;
|
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH(session, m->sessions, i) {
|
HASHMAP_FOREACH(session, m->sessions) {
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
k = session_send_lock(session, lock);
|
k = session_send_lock(session, lock);
|
||||||
|
|
|
@ -408,7 +408,6 @@ void session_device_free(SessionDevice *sd) {
|
||||||
|
|
||||||
void session_device_complete_pause(SessionDevice *sd) {
|
void session_device_complete_pause(SessionDevice *sd) {
|
||||||
SessionDevice *iter;
|
SessionDevice *iter;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
if (!sd->active)
|
if (!sd->active)
|
||||||
return;
|
return;
|
||||||
|
@ -416,7 +415,7 @@ void session_device_complete_pause(SessionDevice *sd) {
|
||||||
session_device_stop(sd);
|
session_device_stop(sd);
|
||||||
|
|
||||||
/* if not all devices are paused, wait for further completion events */
|
/* if not all devices are paused, wait for further completion events */
|
||||||
HASHMAP_FOREACH(iter, sd->session->devices, i)
|
HASHMAP_FOREACH(iter, sd->session->devices)
|
||||||
if (iter->active)
|
if (iter->active)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -426,11 +425,10 @@ void session_device_complete_pause(SessionDevice *sd) {
|
||||||
|
|
||||||
void session_device_resume_all(Session *s) {
|
void session_device_resume_all(Session *s) {
|
||||||
SessionDevice *sd;
|
SessionDevice *sd;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
HASHMAP_FOREACH(sd, s->devices, i) {
|
HASHMAP_FOREACH(sd, s->devices) {
|
||||||
if (sd->active)
|
if (sd->active)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -445,11 +443,10 @@ void session_device_resume_all(Session *s) {
|
||||||
|
|
||||||
void session_device_pause_all(Session *s) {
|
void session_device_pause_all(Session *s) {
|
||||||
SessionDevice *sd;
|
SessionDevice *sd;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
HASHMAP_FOREACH(sd, s->devices, i) {
|
HASHMAP_FOREACH(sd, s->devices) {
|
||||||
if (!sd->active)
|
if (!sd->active)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -461,11 +458,10 @@ void session_device_pause_all(Session *s) {
|
||||||
unsigned session_device_try_pause_all(Session *s) {
|
unsigned session_device_try_pause_all(Session *s) {
|
||||||
unsigned num_pending = 0;
|
unsigned num_pending = 0;
|
||||||
SessionDevice *sd;
|
SessionDevice *sd;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
HASHMAP_FOREACH(sd, s->devices, i) {
|
HASHMAP_FOREACH(sd, s->devices) {
|
||||||
if (!sd->active)
|
if (!sd->active)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -189,11 +189,10 @@ int session_set_leader(Session *s, pid_t pid) {
|
||||||
|
|
||||||
static void session_save_devices(Session *s, FILE *f) {
|
static void session_save_devices(Session *s, FILE *f) {
|
||||||
SessionDevice *sd;
|
SessionDevice *sd;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
if (!hashmap_isempty(s->devices)) {
|
if (!hashmap_isempty(s->devices)) {
|
||||||
fprintf(f, "DEVICES=");
|
fprintf(f, "DEVICES=");
|
||||||
HASHMAP_FOREACH(sd, s->devices, i)
|
HASHMAP_FOREACH(sd, s->devices)
|
||||||
fprintf(f, "%u:%u ", major(sd->dev), minor(sd->dev));
|
fprintf(f, "%u:%u ", major(sd->dev), minor(sd->dev));
|
||||||
fprintf(f, "\n");
|
fprintf(f, "\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -319,14 +319,13 @@ static int user_node_enumerator(sd_bus *bus, const char *path, void *userdata, c
|
||||||
sd_bus_message *message;
|
sd_bus_message *message;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
User *user;
|
User *user;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
assert(path);
|
assert(path);
|
||||||
assert(nodes);
|
assert(nodes);
|
||||||
|
|
||||||
HASHMAP_FOREACH(user, m->users, i) {
|
HASHMAP_FOREACH(user, m->users) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = user_bus_path(user);
|
p = user_bus_path(user);
|
||||||
|
|
|
@ -1032,7 +1032,6 @@ static int manager_startup(Manager *m) {
|
||||||
User *user;
|
User *user;
|
||||||
Button *button;
|
Button *button;
|
||||||
Inhibitor *inhibitor;
|
Inhibitor *inhibitor;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
|
@ -1102,16 +1101,16 @@ static int manager_startup(Manager *m) {
|
||||||
manager_read_utmp(m);
|
manager_read_utmp(m);
|
||||||
|
|
||||||
/* And start everything */
|
/* And start everything */
|
||||||
HASHMAP_FOREACH(seat, m->seats, i)
|
HASHMAP_FOREACH(seat, m->seats)
|
||||||
(void) seat_start(seat);
|
(void) seat_start(seat);
|
||||||
|
|
||||||
HASHMAP_FOREACH(user, m->users, i)
|
HASHMAP_FOREACH(user, m->users)
|
||||||
(void) user_start(user);
|
(void) user_start(user);
|
||||||
|
|
||||||
HASHMAP_FOREACH(session, m->sessions, i)
|
HASHMAP_FOREACH(session, m->sessions)
|
||||||
(void) session_start(session, NULL, NULL);
|
(void) session_start(session, NULL, NULL);
|
||||||
|
|
||||||
HASHMAP_FOREACH(inhibitor, m->inhibitors, i) {
|
HASHMAP_FOREACH(inhibitor, m->inhibitors) {
|
||||||
(void) inhibitor_start(inhibitor);
|
(void) inhibitor_start(inhibitor);
|
||||||
|
|
||||||
/* Let's see if the inhibitor is dead now, then remove it */
|
/* Let's see if the inhibitor is dead now, then remove it */
|
||||||
|
@ -1121,7 +1120,7 @@ static int manager_startup(Manager *m) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(button, m->buttons, i)
|
HASHMAP_FOREACH(button, m->buttons)
|
||||||
button_check_switches(button);
|
button_check_switches(button);
|
||||||
|
|
||||||
manager_dispatch_idle_action(NULL, 0, m);
|
manager_dispatch_idle_action(NULL, 0, m);
|
||||||
|
|
|
@ -442,7 +442,6 @@ static int image_node_enumerator(sd_bus *bus, const char *path, void *userdata,
|
||||||
_cleanup_hashmap_free_ Hashmap *images = NULL;
|
_cleanup_hashmap_free_ Hashmap *images = NULL;
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Image *image;
|
Image *image;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
@ -457,7 +456,7 @@ static int image_node_enumerator(sd_bus *bus, const char *path, void *userdata,
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(image, images, i) {
|
HASHMAP_FOREACH(image, images) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = image_bus_path(image->name);
|
p = image_bus_path(image->name);
|
||||||
|
|
|
@ -1382,14 +1382,13 @@ static int machine_node_enumerator(sd_bus *bus, const char *path, void *userdata
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Machine *machine = NULL;
|
Machine *machine = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
assert(path);
|
assert(path);
|
||||||
assert(nodes);
|
assert(nodes);
|
||||||
|
|
||||||
HASHMAP_FOREACH(machine, m->machines, i) {
|
HASHMAP_FOREACH(machine, m->machines) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = machine_bus_path(machine);
|
p = machine_bus_path(machine);
|
||||||
|
|
|
@ -38,7 +38,6 @@ int manager_enqueue_nscd_cache_flush(Manager *m) {
|
||||||
|
|
||||||
int manager_find_machine_for_uid(Manager *m, uid_t uid, Machine **ret_machine, uid_t *ret_internal_uid) {
|
int manager_find_machine_for_uid(Manager *m, uid_t uid, Machine **ret_machine, uid_t *ret_internal_uid) {
|
||||||
Machine *machine;
|
Machine *machine;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -47,7 +46,7 @@ int manager_find_machine_for_uid(Manager *m, uid_t uid, Machine **ret_machine, u
|
||||||
/* Finds the machine for the specified host UID and returns it along with the UID translated into the
|
/* Finds the machine for the specified host UID and returns it along with the UID translated into the
|
||||||
* internal UID inside the machine */
|
* internal UID inside the machine */
|
||||||
|
|
||||||
HASHMAP_FOREACH(machine, m->machines, i) {
|
HASHMAP_FOREACH(machine, m->machines) {
|
||||||
uid_t converted;
|
uid_t converted;
|
||||||
|
|
||||||
r = machine_owns_uid(machine, uid, &converted);
|
r = machine_owns_uid(machine, uid, &converted);
|
||||||
|
@ -74,13 +73,12 @@ int manager_find_machine_for_uid(Manager *m, uid_t uid, Machine **ret_machine, u
|
||||||
|
|
||||||
int manager_find_machine_for_gid(Manager *m, gid_t gid, Machine **ret_machine, gid_t *ret_internal_gid) {
|
int manager_find_machine_for_gid(Manager *m, gid_t gid, Machine **ret_machine, gid_t *ret_internal_gid) {
|
||||||
Machine *machine;
|
Machine *machine;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(gid_is_valid(gid));
|
assert(gid_is_valid(gid));
|
||||||
|
|
||||||
HASHMAP_FOREACH(machine, m->machines, i) {
|
HASHMAP_FOREACH(machine, m->machines) {
|
||||||
gid_t converted;
|
gid_t converted;
|
||||||
|
|
||||||
r = machine_owns_gid(machine, gid, &converted);
|
r = machine_owns_gid(machine, gid, &converted);
|
||||||
|
|
|
@ -185,7 +185,6 @@ static int method_list_machines(sd_bus_message *message, void *userdata, sd_bus_
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Machine *machine;
|
Machine *machine;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -199,7 +198,7 @@ static int method_list_machines(sd_bus_message *message, void *userdata, sd_bus_
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return sd_bus_error_set_errno(error, r);
|
return sd_bus_error_set_errno(error, r);
|
||||||
|
|
||||||
HASHMAP_FOREACH(machine, m->machines, i) {
|
HASHMAP_FOREACH(machine, m->machines) {
|
||||||
_cleanup_free_ char *p = NULL;
|
_cleanup_free_ char *p = NULL;
|
||||||
|
|
||||||
p = machine_bus_path(machine);
|
p = machine_bus_path(machine);
|
||||||
|
@ -474,7 +473,6 @@ static int method_list_images(sd_bus_message *message, void *userdata, sd_bus_er
|
||||||
_cleanup_hashmap_free_ Hashmap *images = NULL;
|
_cleanup_hashmap_free_ Hashmap *images = NULL;
|
||||||
_unused_ Manager *m = userdata;
|
_unused_ Manager *m = userdata;
|
||||||
Image *image;
|
Image *image;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -496,7 +494,7 @@ static int method_list_images(sd_bus_message *message, void *userdata, sd_bus_er
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(image, images, i) {
|
HASHMAP_FOREACH(image, images) {
|
||||||
_cleanup_free_ char *p = NULL;
|
_cleanup_free_ char *p = NULL;
|
||||||
|
|
||||||
p = image_bus_path(image->name);
|
p = image_bus_path(image->name);
|
||||||
|
@ -749,7 +747,6 @@ static int method_clean_pool(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
_cleanup_hashmap_free_ Hashmap *images = NULL;
|
_cleanup_hashmap_free_ Hashmap *images = NULL;
|
||||||
bool success = true;
|
bool success = true;
|
||||||
Image *image;
|
Image *image;
|
||||||
Iterator i;
|
|
||||||
ssize_t l;
|
ssize_t l;
|
||||||
|
|
||||||
errno_pipe_fd[0] = safe_close(errno_pipe_fd[0]);
|
errno_pipe_fd[0] = safe_close(errno_pipe_fd[0]);
|
||||||
|
@ -770,7 +767,7 @@ static int method_clean_pool(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
goto child_fail;
|
goto child_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(image, images, i) {
|
HASHMAP_FOREACH(image, images) {
|
||||||
|
|
||||||
/* We can't remove vendor images (i.e. those in /usr) */
|
/* We can't remove vendor images (i.e. those in /usr) */
|
||||||
if (IMAGE_IS_VENDOR(image))
|
if (IMAGE_IS_VENDOR(image))
|
||||||
|
@ -1421,7 +1418,6 @@ int match_unit_removed(sd_bus_message *message, void *userdata, sd_bus_error *er
|
||||||
int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Machine *machine;
|
Machine *machine;
|
||||||
Iterator i;
|
|
||||||
int b, r;
|
int b, r;
|
||||||
|
|
||||||
assert(message);
|
assert(message);
|
||||||
|
@ -1438,7 +1434,7 @@ int match_reloading(sd_bus_message *message, void *userdata, sd_bus_error *error
|
||||||
/* systemd finished reloading, let's recheck all our machines */
|
/* systemd finished reloading, let's recheck all our machines */
|
||||||
log_debug("System manager has been reloaded, rechecking machines...");
|
log_debug("System manager has been reloaded, rechecking machines...");
|
||||||
|
|
||||||
HASHMAP_FOREACH(machine, m->machines, i)
|
HASHMAP_FOREACH(machine, m->machines)
|
||||||
machine_add_to_gc_queue(machine);
|
machine_add_to_gc_queue(machine);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -265,7 +265,6 @@ static void manager_gc(Manager *m, bool drop_not_started) {
|
||||||
|
|
||||||
static int manager_startup(Manager *m) {
|
static int manager_startup(Manager *m) {
|
||||||
Machine *machine;
|
Machine *machine;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -287,7 +286,7 @@ static int manager_startup(Manager *m) {
|
||||||
manager_gc(m, false);
|
manager_gc(m, false);
|
||||||
|
|
||||||
/* And start everything */
|
/* And start everything */
|
||||||
HASHMAP_FOREACH(machine, m->machines, i)
|
HASHMAP_FOREACH(machine, m->machines)
|
||||||
machine_start(machine, NULL, NULL);
|
machine_start(machine, NULL, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -83,7 +83,6 @@ static int context_save(Context *context) {
|
||||||
Network *network;
|
Network *network;
|
||||||
NetDev *netdev;
|
NetDev *netdev;
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
int k, r;
|
int k, r;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
|
@ -93,19 +92,19 @@ static int context_save(Context *context) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to create directory " NETWORKD_UNIT_DIRECTORY ": %m");
|
return log_error_errno(r, "Failed to create directory " NETWORKD_UNIT_DIRECTORY ": %m");
|
||||||
|
|
||||||
HASHMAP_FOREACH(network, context->networks_by_name, i) {
|
HASHMAP_FOREACH(network, context->networks_by_name) {
|
||||||
k = network_save(network, p);
|
k = network_save(network, p);
|
||||||
if (k < 0 && r >= 0)
|
if (k < 0 && r >= 0)
|
||||||
r = k;
|
r = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(netdev, context->netdevs_by_name, i) {
|
HASHMAP_FOREACH(netdev, context->netdevs_by_name) {
|
||||||
k = netdev_save(netdev, p);
|
k = netdev_save(netdev, p);
|
||||||
if (k < 0 && r >= 0)
|
if (k < 0 && r >= 0)
|
||||||
r = k;
|
r = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, context->links_by_name, i) {
|
HASHMAP_FOREACH(link, context->links_by_name) {
|
||||||
k = link_save(link, p);
|
k = link_save(link, p);
|
||||||
if (k < 0 && r >= 0)
|
if (k < 0 && r >= 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
|
|
@ -957,7 +957,6 @@ int parse_cmdline_item(const char *key, const char *value, void *data) {
|
||||||
int context_merge_networks(Context *context) {
|
int context_merge_networks(Context *context) {
|
||||||
Network *all, *network;
|
Network *all, *network;
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(context);
|
assert(context);
|
||||||
|
@ -974,7 +973,7 @@ int context_merge_networks(Context *context) {
|
||||||
if (hashmap_size(context->networks_by_name) <= 1)
|
if (hashmap_size(context->networks_by_name) <= 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
HASHMAP_FOREACH(network, context->networks_by_name, i) {
|
HASHMAP_FOREACH(network, context->networks_by_name) {
|
||||||
if (network == all)
|
if (network == all)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -201,7 +201,6 @@ static int netdev_bond_fill_message_create(NetDev *netdev, Link *link, sd_netlin
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b->arp_interval > 0 && !ordered_set_isempty(b->arp_ip_targets)) {
|
if (b->arp_interval > 0 && !ordered_set_isempty(b->arp_ip_targets)) {
|
||||||
Iterator i;
|
|
||||||
void *val;
|
void *val;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
|
@ -209,7 +208,7 @@ static int netdev_bond_fill_message_create(NetDev *netdev, Link *link, sd_netlin
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_netdev_error_errno(netdev, r, "Could not open contaniner IFLA_BOND_ARP_IP_TARGET : %m");
|
return log_netdev_error_errno(netdev, r, "Could not open contaniner IFLA_BOND_ARP_IP_TARGET : %m");
|
||||||
|
|
||||||
ORDERED_SET_FOREACH(val, b->arp_ip_targets, i) {
|
ORDERED_SET_FOREACH(val, b->arp_ip_targets) {
|
||||||
r = sd_netlink_message_append_u32(m, n++, PTR_TO_UINT32(val));
|
r = sd_netlink_message_append_u32(m, n++, PTR_TO_UINT32(val));
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ARP_ALL_TARGETS attribute: %m");
|
return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ARP_ALL_TARGETS attribute: %m");
|
||||||
|
|
|
@ -275,7 +275,6 @@ static int l2tp_acquire_local_address_one(L2tpTunnel *t, Address *a, union in_ad
|
||||||
|
|
||||||
static int l2tp_acquire_local_address(L2tpTunnel *t, Link *link, union in_addr_union *ret) {
|
static int l2tp_acquire_local_address(L2tpTunnel *t, Link *link, union in_addr_union *ret) {
|
||||||
Address *a;
|
Address *a;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(t);
|
assert(t);
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -288,11 +287,11 @@ static int l2tp_acquire_local_address(L2tpTunnel *t, Link *link, union in_addr_u
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(a, link->addresses, i)
|
SET_FOREACH(a, link->addresses)
|
||||||
if (l2tp_acquire_local_address_one(t, a, ret) >= 0)
|
if (l2tp_acquire_local_address_one(t, a, ret) >= 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
SET_FOREACH(a, link->addresses_foreign, i)
|
SET_FOREACH(a, link->addresses_foreign)
|
||||||
if (l2tp_acquire_local_address_one(t, a, ret) >= 0)
|
if (l2tp_acquire_local_address_one(t, a, ret) >= 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -348,7 +347,6 @@ static int l2tp_create_session(NetDev *netdev, L2tpSession *session) {
|
||||||
static int l2tp_create_tunnel_handler(sd_netlink *rtnl, sd_netlink_message *m, NetDev *netdev) {
|
static int l2tp_create_tunnel_handler(sd_netlink *rtnl, sd_netlink_message *m, NetDev *netdev) {
|
||||||
L2tpSession *session;
|
L2tpSession *session;
|
||||||
L2tpTunnel *t;
|
L2tpTunnel *t;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(netdev);
|
assert(netdev);
|
||||||
|
@ -370,7 +368,7 @@ static int l2tp_create_tunnel_handler(sd_netlink *rtnl, sd_netlink_message *m, N
|
||||||
|
|
||||||
log_netdev_debug(netdev, "L2TP tunnel is created");
|
log_netdev_debug(netdev, "L2TP tunnel is created");
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(session, t->sessions_by_section, i)
|
ORDERED_HASHMAP_FOREACH(session, t->sessions_by_section)
|
||||||
(void) l2tp_create_session(netdev, session);
|
(void) l2tp_create_session(netdev, session);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -677,7 +675,6 @@ static int l2tp_session_verify(L2tpSession *session) {
|
||||||
static int netdev_l2tp_tunnel_verify(NetDev *netdev, const char *filename) {
|
static int netdev_l2tp_tunnel_verify(NetDev *netdev, const char *filename) {
|
||||||
L2tpTunnel *t;
|
L2tpTunnel *t;
|
||||||
L2tpSession *session;
|
L2tpSession *session;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(netdev);
|
assert(netdev);
|
||||||
assert(filename);
|
assert(filename);
|
||||||
|
@ -701,7 +698,7 @@ static int netdev_l2tp_tunnel_verify(NetDev *netdev, const char *filename) {
|
||||||
"%s: L2TP tunnel without tunnel IDs configured. Ignoring",
|
"%s: L2TP tunnel without tunnel IDs configured. Ignoring",
|
||||||
filename);
|
filename);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(session, t->sessions_by_section, i)
|
ORDERED_HASHMAP_FOREACH(session, t->sessions_by_section)
|
||||||
if (l2tp_session_verify(session) < 0)
|
if (l2tp_session_verify(session) < 0)
|
||||||
l2tp_session_free(session);
|
l2tp_session_free(session);
|
||||||
|
|
||||||
|
|
|
@ -494,7 +494,6 @@ static int netdev_macsec_configure_transmit_association(NetDev *netdev, Transmit
|
||||||
static int netdev_macsec_configure(NetDev *netdev, Link *link, sd_netlink_message *m) {
|
static int netdev_macsec_configure(NetDev *netdev, Link *link, sd_netlink_message *m) {
|
||||||
TransmitAssociation *a;
|
TransmitAssociation *a;
|
||||||
ReceiveChannel *c;
|
ReceiveChannel *c;
|
||||||
Iterator i;
|
|
||||||
MACsec *s;
|
MACsec *s;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -502,13 +501,13 @@ static int netdev_macsec_configure(NetDev *netdev, Link *link, sd_netlink_messag
|
||||||
s = MACSEC(netdev);
|
s = MACSEC(netdev);
|
||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(a, s->transmit_associations_by_section, i) {
|
ORDERED_HASHMAP_FOREACH(a, s->transmit_associations_by_section) {
|
||||||
r = netdev_macsec_configure_transmit_association(netdev, a);
|
r = netdev_macsec_configure_transmit_association(netdev, a);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(c, s->receive_channels, i) {
|
ORDERED_HASHMAP_FOREACH(c, s->receive_channels) {
|
||||||
r = netdev_macsec_configure_receive_channel(netdev, c);
|
r = netdev_macsec_configure_receive_channel(netdev, c);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -1148,7 +1147,6 @@ static int netdev_macsec_verify(NetDev *netdev, const char *filename) {
|
||||||
TransmitAssociation *a;
|
TransmitAssociation *a;
|
||||||
ReceiveAssociation *n;
|
ReceiveAssociation *n;
|
||||||
ReceiveChannel *c;
|
ReceiveChannel *c;
|
||||||
Iterator i;
|
|
||||||
uint8_t an, encoding_an;
|
uint8_t an, encoding_an;
|
||||||
bool use_for_encoding;
|
bool use_for_encoding;
|
||||||
int r;
|
int r;
|
||||||
|
@ -1157,7 +1155,7 @@ static int netdev_macsec_verify(NetDev *netdev, const char *filename) {
|
||||||
assert(v);
|
assert(v);
|
||||||
assert(filename);
|
assert(filename);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(c, v->receive_channels_by_section, i) {
|
ORDERED_HASHMAP_FOREACH(c, v->receive_channels_by_section) {
|
||||||
r = macsec_receive_channel_verify(c);
|
r = macsec_receive_channel_verify(c);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
macsec_receive_channel_free(c);
|
macsec_receive_channel_free(c);
|
||||||
|
@ -1166,7 +1164,7 @@ static int netdev_macsec_verify(NetDev *netdev, const char *filename) {
|
||||||
an = 0;
|
an = 0;
|
||||||
use_for_encoding = false;
|
use_for_encoding = false;
|
||||||
encoding_an = 0;
|
encoding_an = 0;
|
||||||
ORDERED_HASHMAP_FOREACH(a, v->transmit_associations_by_section, i) {
|
ORDERED_HASHMAP_FOREACH(a, v->transmit_associations_by_section) {
|
||||||
r = macsec_transmit_association_verify(a);
|
r = macsec_transmit_association_verify(a);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
macsec_transmit_association_free(a);
|
macsec_transmit_association_free(a);
|
||||||
|
@ -1201,7 +1199,7 @@ static int netdev_macsec_verify(NetDev *netdev, const char *filename) {
|
||||||
assert(encoding_an < MACSEC_MAX_ASSOCIATION_NUMBER);
|
assert(encoding_an < MACSEC_MAX_ASSOCIATION_NUMBER);
|
||||||
v->encoding_an = encoding_an;
|
v->encoding_an = encoding_an;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(n, v->receive_associations_by_section, i) {
|
ORDERED_HASHMAP_FOREACH(n, v->receive_associations_by_section) {
|
||||||
r = macsec_receive_association_verify(n);
|
r = macsec_receive_association_verify(n);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
macsec_receive_association_free(n);
|
macsec_receive_association_free(n);
|
||||||
|
|
|
@ -24,7 +24,6 @@ static int netdev_macvlan_fill_message_create(NetDev *netdev, Link *link, sd_net
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
if (m->mode == NETDEV_MACVLAN_MODE_SOURCE && !set_isempty(m->match_source_mac)) {
|
if (m->mode == NETDEV_MACVLAN_MODE_SOURCE && !set_isempty(m->match_source_mac)) {
|
||||||
Iterator i;
|
|
||||||
const struct ether_addr *mac_addr;
|
const struct ether_addr *mac_addr;
|
||||||
|
|
||||||
r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_MACADDR_MODE, MACVLAN_MACADDR_SET);
|
r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_MACADDR_MODE, MACVLAN_MACADDR_SET);
|
||||||
|
@ -35,7 +34,7 @@ static int netdev_macvlan_fill_message_create(NetDev *netdev, Link *link, sd_net
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_netdev_error_errno(netdev, r, "Could not open IFLA_MACVLAN_MACADDR_DATA container: %m");
|
return log_netdev_error_errno(netdev, r, "Could not open IFLA_MACVLAN_MACADDR_DATA container: %m");
|
||||||
|
|
||||||
SET_FOREACH(mac_addr, m->match_source_mac, i) {
|
SET_FOREACH(mac_addr, m->match_source_mac) {
|
||||||
r = sd_netlink_message_append_ether_addr(req, IFLA_MACVLAN_MACADDR, mac_addr);
|
r = sd_netlink_message_append_ether_addr(req, IFLA_MACVLAN_MACADDR, mac_addr);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MACADDR attribute: %m");
|
return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MACADDR attribute: %m");
|
||||||
|
|
|
@ -395,14 +395,13 @@ static void resolve_endpoints(NetDev *netdev) {
|
||||||
};
|
};
|
||||||
WireguardPeer *peer;
|
WireguardPeer *peer;
|
||||||
Wireguard *w;
|
Wireguard *w;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(netdev);
|
assert(netdev);
|
||||||
w = WIREGUARD(netdev);
|
w = WIREGUARD(netdev);
|
||||||
assert(w);
|
assert(w);
|
||||||
|
|
||||||
SET_FOREACH(peer, w->peers_with_unresolved_endpoint, i) {
|
SET_FOREACH(peer, w->peers_with_unresolved_endpoint) {
|
||||||
r = resolve_getaddrinfo(netdev->manager->resolve,
|
r = resolve_getaddrinfo(netdev->manager->resolve,
|
||||||
NULL,
|
NULL,
|
||||||
peer->endpoint_host,
|
peer->endpoint_host,
|
||||||
|
|
|
@ -2477,7 +2477,6 @@ static int link_up_down(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
|
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
|
||||||
_cleanup_set_free_ Set *indexes = NULL;
|
_cleanup_set_free_ Set *indexes = NULL;
|
||||||
int index, r, i;
|
int index, r, i;
|
||||||
Iterator j;
|
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
r = sd_netlink_open(&rtnl);
|
r = sd_netlink_open(&rtnl);
|
||||||
|
@ -2498,7 +2497,7 @@ static int link_up_down(int argc, char *argv[], void *userdata) {
|
||||||
return log_oom();
|
return log_oom();
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(p, indexes, j) {
|
SET_FOREACH(p, indexes) {
|
||||||
index = PTR_TO_INT(p);
|
index = PTR_TO_INT(p);
|
||||||
r = link_up_down_send_message(rtnl, argv[0], index);
|
r = link_up_down_send_message(rtnl, argv[0], index);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
|
@ -2516,7 +2515,6 @@ static int link_delete(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
|
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
|
||||||
_cleanup_set_free_ Set *indexes = NULL;
|
_cleanup_set_free_ Set *indexes = NULL;
|
||||||
int index, r, i;
|
int index, r, i;
|
||||||
Iterator j;
|
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
r = sd_netlink_open(&rtnl);
|
r = sd_netlink_open(&rtnl);
|
||||||
|
@ -2537,7 +2535,7 @@ static int link_delete(int argc, char *argv[], void *userdata) {
|
||||||
return log_oom();
|
return log_oom();
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(p, indexes, j) {
|
SET_FOREACH(p, indexes) {
|
||||||
index = PTR_TO_INT(p);
|
index = PTR_TO_INT(p);
|
||||||
r = link_delete_send_message(rtnl, index);
|
r = link_delete_send_message(rtnl, index);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
|
@ -2641,7 +2639,6 @@ static int verb_reconfigure(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
|
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
|
||||||
_cleanup_set_free_ Set *indexes = NULL;
|
_cleanup_set_free_ Set *indexes = NULL;
|
||||||
int index, i, r;
|
int index, i, r;
|
||||||
Iterator j;
|
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
r = sd_bus_open_system(&bus);
|
r = sd_bus_open_system(&bus);
|
||||||
|
@ -2662,7 +2659,7 @@ static int verb_reconfigure(int argc, char *argv[], void *userdata) {
|
||||||
return log_oom();
|
return log_oom();
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(p, indexes, j) {
|
SET_FOREACH(p, indexes) {
|
||||||
index = PTR_TO_INT(p);
|
index = PTR_TO_INT(p);
|
||||||
r = bus_call_method(bus, bus_network_mgr, "ReconfigureLink", &error, NULL, "i", index);
|
r = bus_call_method(bus, bus_network_mgr, "ReconfigureLink", &error, NULL, "i", index);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
|
|
|
@ -75,19 +75,17 @@ static bool address_pool_prefix_is_taken(
|
||||||
const union in_addr_union *u,
|
const union in_addr_union *u,
|
||||||
unsigned prefixlen) {
|
unsigned prefixlen) {
|
||||||
|
|
||||||
Iterator i;
|
|
||||||
Link *l;
|
Link *l;
|
||||||
Network *n;
|
Network *n;
|
||||||
|
|
||||||
assert(p);
|
assert(p);
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
HASHMAP_FOREACH(l, p->manager->links, i) {
|
HASHMAP_FOREACH(l, p->manager->links) {
|
||||||
Address *a;
|
Address *a;
|
||||||
Iterator j;
|
|
||||||
|
|
||||||
/* Don't clash with assigned addresses */
|
/* Don't clash with assigned addresses */
|
||||||
SET_FOREACH(a, l->addresses, j) {
|
SET_FOREACH(a, l->addresses) {
|
||||||
if (a->family != p->family)
|
if (a->family != p->family)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -106,7 +104,7 @@ static bool address_pool_prefix_is_taken(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* And don't clash with configured but un-assigned addresses either */
|
/* And don't clash with configured but un-assigned addresses either */
|
||||||
ORDERED_HASHMAP_FOREACH(n, p->manager->networks, i) {
|
ORDERED_HASHMAP_FOREACH(n, p->manager->networks) {
|
||||||
Address *a;
|
Address *a;
|
||||||
|
|
||||||
LIST_FOREACH(addresses, a, n->static_addresses) {
|
LIST_FOREACH(addresses, a, n->static_addresses) {
|
||||||
|
|
|
@ -125,7 +125,6 @@ void address_free(Address *address) {
|
||||||
|
|
||||||
if (address->link && !address->acd) {
|
if (address->link && !address->acd) {
|
||||||
NDiscAddress *n;
|
NDiscAddress *n;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
set_remove(address->link->addresses, address);
|
set_remove(address->link->addresses, address);
|
||||||
set_remove(address->link->addresses_foreign, address);
|
set_remove(address->link->addresses_foreign, address);
|
||||||
|
@ -138,7 +137,7 @@ void address_free(Address *address) {
|
||||||
set_remove(address->link->dhcp6_addresses_old, address);
|
set_remove(address->link->dhcp6_addresses_old, address);
|
||||||
set_remove(address->link->dhcp6_pd_addresses, address);
|
set_remove(address->link->dhcp6_pd_addresses, address);
|
||||||
set_remove(address->link->dhcp6_pd_addresses_old, address);
|
set_remove(address->link->dhcp6_pd_addresses_old, address);
|
||||||
SET_FOREACH(n, address->link->ndisc_addresses, i)
|
SET_FOREACH(n, address->link->ndisc_addresses)
|
||||||
if (n->address == address)
|
if (n->address == address)
|
||||||
free(set_remove(address->link->ndisc_addresses, n));
|
free(set_remove(address->link->ndisc_addresses, n));
|
||||||
|
|
||||||
|
@ -455,9 +454,8 @@ int address_get(Link *link,
|
||||||
|
|
||||||
static bool address_exists_internal(Set *addresses, int family, const union in_addr_union *in_addr) {
|
static bool address_exists_internal(Set *addresses, int family, const union in_addr_union *in_addr) {
|
||||||
Address *address;
|
Address *address;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
SET_FOREACH(address, addresses, i) {
|
SET_FOREACH(address, addresses) {
|
||||||
if (address->family != family)
|
if (address->family != family)
|
||||||
continue;
|
continue;
|
||||||
if (in_addr_equal(address->family, &address->in_addr, in_addr))
|
if (in_addr_equal(address->family, &address->in_addr, in_addr))
|
||||||
|
|
|
@ -22,7 +22,6 @@ static int property_get_leases(
|
||||||
Link *l = userdata;
|
Link *l = userdata;
|
||||||
sd_dhcp_server *s;
|
sd_dhcp_server *s;
|
||||||
DHCPLease *lease;
|
DHCPLease *lease;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(reply);
|
assert(reply);
|
||||||
|
@ -36,7 +35,7 @@ static int property_get_leases(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(lease, s->leases_by_client_id, i) {
|
HASHMAP_FOREACH(lease, s->leases_by_client_id) {
|
||||||
r = sd_bus_message_open_container(reply, 'r', "uayayayayt");
|
r = sd_bus_message_open_container(reply, 'r', "uayayayayt");
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -228,7 +228,6 @@ int dhcp4_server_configure(Link *link) {
|
||||||
sd_dhcp_option *p;
|
sd_dhcp_option *p;
|
||||||
Link *uplink = NULL;
|
Link *uplink = NULL;
|
||||||
Address *address;
|
Address *address;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
address = link_find_dhcp_server_address(link);
|
address = link_find_dhcp_server_address(link);
|
||||||
|
@ -322,7 +321,7 @@ int dhcp4_server_configure(Link *link) {
|
||||||
return log_link_error_errno(link, r, "Failed to set timezone for DHCP server: %m");
|
return log_link_error_errno(link, r, "Failed to set timezone for DHCP server: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(p, link->network->dhcp_server_send_options, i) {
|
ORDERED_HASHMAP_FOREACH(p, link->network->dhcp_server_send_options) {
|
||||||
r = sd_dhcp_server_add_option(link->dhcp_server, p);
|
r = sd_dhcp_server_add_option(link->dhcp_server, p);
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
continue;
|
continue;
|
||||||
|
@ -330,7 +329,7 @@ int dhcp4_server_configure(Link *link) {
|
||||||
return log_link_error_errno(link, r, "Failed to set DHCPv4 option: %m");
|
return log_link_error_errno(link, r, "Failed to set DHCPv4 option: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(p, link->network->dhcp_server_send_vendor_options, i) {
|
ORDERED_HASHMAP_FOREACH(p, link->network->dhcp_server_send_vendor_options) {
|
||||||
r = sd_dhcp_server_add_vendor_option(link->dhcp_server, p);
|
r = sd_dhcp_server_add_vendor_option(link->dhcp_server, p);
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -25,7 +25,6 @@ static int dhcp4_remove_all(Link *link);
|
||||||
|
|
||||||
static int dhcp4_release_old_lease(Link *link) {
|
static int dhcp4_release_old_lease(Link *link) {
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int k, r = 0;
|
int k, r = 0;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -37,7 +36,7 @@ static int dhcp4_release_old_lease(Link *link) {
|
||||||
|
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
SET_FOREACH(route, link->dhcp_routes_old, i) {
|
SET_FOREACH(route, link->dhcp_routes_old) {
|
||||||
k = route_remove(route, link, NULL);
|
k = route_remove(route, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -507,12 +506,11 @@ static int dhcp4_remove_address_handler(sd_netlink *rtnl, sd_netlink_message *m,
|
||||||
|
|
||||||
static int dhcp4_remove_all(Link *link) {
|
static int dhcp4_remove_all(Link *link) {
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int k, r = 0;
|
int k, r = 0;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
|
||||||
SET_FOREACH(route, link->dhcp_routes, i) {
|
SET_FOREACH(route, link->dhcp_routes) {
|
||||||
k = route_remove(route, link, dhcp4_remove_route_handler);
|
k = route_remove(route, link, dhcp4_remove_route_handler);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -1245,7 +1243,6 @@ int dhcp4_set_client_identifier(Link *link) {
|
||||||
int dhcp4_configure(Link *link) {
|
int dhcp4_configure(Link *link) {
|
||||||
sd_dhcp_option *send_option;
|
sd_dhcp_option *send_option;
|
||||||
void *request_options;
|
void *request_options;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -1337,7 +1334,7 @@ int dhcp4_configure(Link *link) {
|
||||||
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for timezone: %m");
|
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for timezone: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(request_options, link->network->dhcp_request_options, i) {
|
SET_FOREACH(request_options, link->network->dhcp_request_options) {
|
||||||
uint32_t option = PTR_TO_UINT32(request_options);
|
uint32_t option = PTR_TO_UINT32(request_options);
|
||||||
|
|
||||||
r = sd_dhcp_client_set_request_option(link->dhcp_client, option);
|
r = sd_dhcp_client_set_request_option(link->dhcp_client, option);
|
||||||
|
@ -1349,7 +1346,7 @@ int dhcp4_configure(Link *link) {
|
||||||
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for '%u': %m", option);
|
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set request flag for '%u': %m", option);
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp_client_send_options, i) {
|
ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp_client_send_options) {
|
||||||
r = sd_dhcp_client_add_option(link->dhcp_client, send_option);
|
r = sd_dhcp_client_add_option(link->dhcp_client, send_option);
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1357,7 +1354,7 @@ int dhcp4_configure(Link *link) {
|
||||||
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set send option: %m");
|
return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set send option: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp_client_send_vendor_options, i) {
|
ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp_client_send_vendor_options) {
|
||||||
r = sd_dhcp_client_add_vendor_option(link->dhcp_client, send_option);
|
r = sd_dhcp_client_add_vendor_option(link->dhcp_client, send_option);
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -108,13 +108,12 @@ static int dhcp6_pd_remove_old(Link *link, bool force);
|
||||||
|
|
||||||
static int dhcp6_pd_address_callback(Address *address) {
|
static int dhcp6_pd_address_callback(Address *address) {
|
||||||
Address *a;
|
Address *a;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(address);
|
assert(address);
|
||||||
assert(address->link);
|
assert(address->link);
|
||||||
|
|
||||||
/* Make this called only once */
|
/* Make this called only once */
|
||||||
SET_FOREACH(a, address->link->dhcp6_pd_addresses, i)
|
SET_FOREACH(a, address->link->dhcp6_pd_addresses)
|
||||||
a->callback = NULL;
|
a->callback = NULL;
|
||||||
|
|
||||||
return dhcp6_pd_remove_old(address->link, true);
|
return dhcp6_pd_remove_old(address->link, true);
|
||||||
|
@ -123,7 +122,6 @@ static int dhcp6_pd_address_callback(Address *address) {
|
||||||
static int dhcp6_pd_remove_old(Link *link, bool force) {
|
static int dhcp6_pd_remove_old(Link *link, bool force) {
|
||||||
Address *address;
|
Address *address;
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int k, r = 0;
|
int k, r = 0;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -138,14 +136,14 @@ static int dhcp6_pd_remove_old(Link *link, bool force) {
|
||||||
if (!force) {
|
if (!force) {
|
||||||
bool set_callback = !set_isempty(link->dhcp6_pd_addresses);
|
bool set_callback = !set_isempty(link->dhcp6_pd_addresses);
|
||||||
|
|
||||||
SET_FOREACH(address, link->dhcp6_pd_addresses, i)
|
SET_FOREACH(address, link->dhcp6_pd_addresses)
|
||||||
if (address_is_ready(address)) {
|
if (address_is_ready(address)) {
|
||||||
set_callback = false;
|
set_callback = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set_callback) {
|
if (set_callback) {
|
||||||
SET_FOREACH(address, link->dhcp6_pd_addresses, i)
|
SET_FOREACH(address, link->dhcp6_pd_addresses)
|
||||||
address->callback = dhcp6_pd_address_callback;
|
address->callback = dhcp6_pd_address_callback;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +153,7 @@ static int dhcp6_pd_remove_old(Link *link, bool force) {
|
||||||
|
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
SET_FOREACH(route, link->dhcp6_pd_routes_old, i) {
|
SET_FOREACH(route, link->dhcp6_pd_routes_old) {
|
||||||
k = route_remove(route, link, NULL);
|
k = route_remove(route, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -164,7 +162,7 @@ static int dhcp6_pd_remove_old(Link *link, bool force) {
|
||||||
dhcp6_pd_free(hashmap_get(link->manager->dhcp6_prefixes, &route->dst.in6));
|
dhcp6_pd_free(hashmap_get(link->manager->dhcp6_prefixes, &route->dst.in6));
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(address, link->dhcp6_pd_addresses_old, i) {
|
SET_FOREACH(address, link->dhcp6_pd_addresses_old) {
|
||||||
k = address_remove(address, link, NULL);
|
k = address_remove(address, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -176,7 +174,6 @@ static int dhcp6_pd_remove_old(Link *link, bool force) {
|
||||||
int dhcp6_pd_remove(Link *link) {
|
int dhcp6_pd_remove(Link *link) {
|
||||||
Address *address;
|
Address *address;
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int k, r = 0;
|
int k, r = 0;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -196,7 +193,7 @@ int dhcp6_pd_remove(Link *link) {
|
||||||
|
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
SET_FOREACH(route, link->dhcp6_pd_routes, i) {
|
SET_FOREACH(route, link->dhcp6_pd_routes) {
|
||||||
k = route_remove(route, link, NULL);
|
k = route_remove(route, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -205,7 +202,7 @@ int dhcp6_pd_remove(Link *link) {
|
||||||
dhcp6_pd_free(hashmap_get(link->manager->dhcp6_prefixes, &route->dst.in6));
|
dhcp6_pd_free(hashmap_get(link->manager->dhcp6_prefixes, &route->dst.in6));
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(address, link->dhcp6_pd_addresses, i) {
|
SET_FOREACH(address, link->dhcp6_pd_addresses) {
|
||||||
k = address_remove(address, link, NULL);
|
k = address_remove(address, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -517,7 +514,6 @@ static void dhcp6_pd_prefix_distribute(Link *dhcp6_link,
|
||||||
uint32_t lifetime_valid,
|
uint32_t lifetime_valid,
|
||||||
bool assign_preferred_subnet_id) {
|
bool assign_preferred_subnet_id) {
|
||||||
|
|
||||||
Iterator i;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -526,7 +522,7 @@ static void dhcp6_pd_prefix_distribute(Link *dhcp6_link,
|
||||||
assert(masked_pd_prefix);
|
assert(masked_pd_prefix);
|
||||||
assert(pd_prefix_len <= 64);
|
assert(pd_prefix_len <= 64);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, dhcp6_link->manager->links, i) {
|
HASHMAP_FOREACH(link, dhcp6_link->manager->links) {
|
||||||
_cleanup_free_ char *assigned_buf = NULL;
|
_cleanup_free_ char *assigned_buf = NULL;
|
||||||
union in_addr_union assigned_prefix;
|
union in_addr_union assigned_prefix;
|
||||||
|
|
||||||
|
@ -636,13 +632,12 @@ static int dhcp6_pd_finalize(Link *link) {
|
||||||
|
|
||||||
static void dhcp6_pd_prefix_lost(Link *dhcp6_link) {
|
static void dhcp6_pd_prefix_lost(Link *dhcp6_link) {
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(dhcp6_link);
|
assert(dhcp6_link);
|
||||||
assert(dhcp6_link->manager);
|
assert(dhcp6_link->manager);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, dhcp6_link->manager->links, i) {
|
HASHMAP_FOREACH(link, dhcp6_link->manager->links) {
|
||||||
if (link == dhcp6_link)
|
if (link == dhcp6_link)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -659,13 +654,12 @@ static int dhcp6_remove_old(Link *link, bool force);
|
||||||
|
|
||||||
static int dhcp6_address_callback(Address *address) {
|
static int dhcp6_address_callback(Address *address) {
|
||||||
Address *a;
|
Address *a;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(address);
|
assert(address);
|
||||||
assert(address->link);
|
assert(address->link);
|
||||||
|
|
||||||
/* Make this called only once */
|
/* Make this called only once */
|
||||||
SET_FOREACH(a, address->link->dhcp6_addresses, i)
|
SET_FOREACH(a, address->link->dhcp6_addresses)
|
||||||
a->callback = NULL;
|
a->callback = NULL;
|
||||||
|
|
||||||
return dhcp6_remove_old(address->link, true);
|
return dhcp6_remove_old(address->link, true);
|
||||||
|
@ -674,7 +668,6 @@ static int dhcp6_address_callback(Address *address) {
|
||||||
static int dhcp6_remove_old(Link *link, bool force) {
|
static int dhcp6_remove_old(Link *link, bool force) {
|
||||||
Address *address;
|
Address *address;
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int k, r = 0;
|
int k, r = 0;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -688,14 +681,14 @@ static int dhcp6_remove_old(Link *link, bool force) {
|
||||||
if (!force) {
|
if (!force) {
|
||||||
bool set_callback = !set_isempty(link->dhcp6_addresses);
|
bool set_callback = !set_isempty(link->dhcp6_addresses);
|
||||||
|
|
||||||
SET_FOREACH(address, link->dhcp6_addresses, i)
|
SET_FOREACH(address, link->dhcp6_addresses)
|
||||||
if (address_is_ready(address)) {
|
if (address_is_ready(address)) {
|
||||||
set_callback = false;
|
set_callback = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set_callback) {
|
if (set_callback) {
|
||||||
SET_FOREACH(address, link->dhcp6_addresses, i)
|
SET_FOREACH(address, link->dhcp6_addresses)
|
||||||
address->callback = dhcp6_address_callback;
|
address->callback = dhcp6_address_callback;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -705,13 +698,13 @@ static int dhcp6_remove_old(Link *link, bool force) {
|
||||||
|
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
SET_FOREACH(route, link->dhcp6_routes_old, i) {
|
SET_FOREACH(route, link->dhcp6_routes_old) {
|
||||||
k = route_remove(route, link, NULL);
|
k = route_remove(route, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(address, link->dhcp6_addresses_old, i) {
|
SET_FOREACH(address, link->dhcp6_addresses_old) {
|
||||||
k = address_remove(address, link, NULL);
|
k = address_remove(address, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -723,7 +716,6 @@ static int dhcp6_remove_old(Link *link, bool force) {
|
||||||
static int dhcp6_remove(Link *link) {
|
static int dhcp6_remove(Link *link) {
|
||||||
Address *address;
|
Address *address;
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int k, r = 0;
|
int k, r = 0;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -742,13 +734,13 @@ static int dhcp6_remove(Link *link) {
|
||||||
|
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
SET_FOREACH(route, link->dhcp6_routes, i) {
|
SET_FOREACH(route, link->dhcp6_routes) {
|
||||||
k = route_remove(route, link, NULL);
|
k = route_remove(route, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(address, link->dhcp6_addresses, i) {
|
SET_FOREACH(address, link->dhcp6_addresses) {
|
||||||
k = address_remove(address, link, NULL);
|
k = address_remove(address, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -846,14 +838,13 @@ static int dhcp6_set_unreachable_route(Link *link, const union in_addr_union *ad
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dhcp6_pd_prefix_acquired(Link *dhcp6_link) {
|
static int dhcp6_pd_prefix_acquired(Link *dhcp6_link) {
|
||||||
Iterator i;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(dhcp6_link);
|
assert(dhcp6_link);
|
||||||
assert(dhcp6_link->dhcp6_lease);
|
assert(dhcp6_link->dhcp6_lease);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, dhcp6_link->manager->links, i) {
|
HASHMAP_FOREACH(link, dhcp6_link->manager->links) {
|
||||||
if (link == dhcp6_link)
|
if (link == dhcp6_link)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -918,7 +909,7 @@ static int dhcp6_pd_prefix_acquired(Link *dhcp6_link) {
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, dhcp6_link->manager->links, i) {
|
HASHMAP_FOREACH(link, dhcp6_link->manager->links) {
|
||||||
if (link == dhcp6_link)
|
if (link == dhcp6_link)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1230,7 +1221,6 @@ int dhcp6_request_address(Link *link, int ir) {
|
||||||
|
|
||||||
int dhcp6_request_prefix_delegation(Link *link) {
|
int dhcp6_request_prefix_delegation(Link *link) {
|
||||||
Link *l;
|
Link *l;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
assert(link->manager);
|
assert(link->manager);
|
||||||
|
@ -1240,7 +1230,7 @@ int dhcp6_request_prefix_delegation(Link *link) {
|
||||||
|
|
||||||
log_link_debug(link, "Requesting DHCPv6 prefixes to be delegated for new link");
|
log_link_debug(link, "Requesting DHCPv6 prefixes to be delegated for new link");
|
||||||
|
|
||||||
HASHMAP_FOREACH(l, link->manager->links, i) {
|
HASHMAP_FOREACH(l, link->manager->links) {
|
||||||
int r, enabled;
|
int r, enabled;
|
||||||
|
|
||||||
if (l == link)
|
if (l == link)
|
||||||
|
@ -1334,12 +1324,11 @@ static int dhcp6_set_hostname(sd_dhcp6_client *client, Link *link) {
|
||||||
|
|
||||||
static bool dhcp6_enable_prefix_delegation(Link *dhcp6_link) {
|
static bool dhcp6_enable_prefix_delegation(Link *dhcp6_link) {
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(dhcp6_link);
|
assert(dhcp6_link);
|
||||||
assert(dhcp6_link->manager);
|
assert(dhcp6_link->manager);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, dhcp6_link->manager->links, i) {
|
HASHMAP_FOREACH(link, dhcp6_link->manager->links) {
|
||||||
if (link == dhcp6_link)
|
if (link == dhcp6_link)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1358,7 +1347,6 @@ int dhcp6_configure(Link *link) {
|
||||||
sd_dhcp6_option *send_option;
|
sd_dhcp6_option *send_option;
|
||||||
void *request_options;
|
void *request_options;
|
||||||
const DUID *duid;
|
const DUID *duid;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -1400,7 +1388,7 @@ int dhcp6_configure(Link *link) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set DUID: %m");
|
return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set DUID: %m");
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp6_client_send_options, i) {
|
ORDERED_HASHMAP_FOREACH(send_option, link->network->dhcp6_client_send_options) {
|
||||||
r = sd_dhcp6_client_add_option(client, send_option);
|
r = sd_dhcp6_client_add_option(client, send_option);
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1428,7 +1416,7 @@ int dhcp6_configure(Link *link) {
|
||||||
return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set MUD URL: %m");
|
return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set MUD URL: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(request_options, link->network->dhcp6_request_options, i) {
|
SET_FOREACH(request_options, link->network->dhcp6_request_options) {
|
||||||
uint32_t option = PTR_TO_UINT32(request_options);
|
uint32_t option = PTR_TO_UINT32(request_options);
|
||||||
|
|
||||||
r = sd_dhcp6_client_set_request_option(client, option);
|
r = sd_dhcp6_client_set_request_option(client, option);
|
||||||
|
@ -1452,7 +1440,7 @@ int dhcp6_configure(Link *link) {
|
||||||
return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set vendor class: %m");
|
return log_link_error_errno(link, r, "DHCP6 CLIENT: Failed to set vendor class: %m");
|
||||||
}
|
}
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(vendor_option, link->network->dhcp6_client_send_vendor_options, i) {
|
ORDERED_HASHMAP_FOREACH(vendor_option, link->network->dhcp6_client_send_vendor_options) {
|
||||||
r = sd_dhcp6_client_add_vendor_option(client, vendor_option);
|
r = sd_dhcp6_client_add_vendor_option(client, vendor_option);
|
||||||
if (r == -EEXIST)
|
if (r == -EEXIST)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -727,7 +727,6 @@ int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
unsigned c = 0;
|
unsigned c = 0;
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
assert(path);
|
assert(path);
|
||||||
|
@ -738,7 +737,7 @@ int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***
|
||||||
if (!l)
|
if (!l)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, m->links, i) {
|
HASHMAP_FOREACH(link, m->links) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = link_bus_path(link);
|
p = link_bus_path(link);
|
||||||
|
|
|
@ -365,7 +365,6 @@ void link_update_operstate(Link *link, bool also_update_master) {
|
||||||
uint8_t scope = RT_SCOPE_NOWHERE;
|
uint8_t scope = RT_SCOPE_NOWHERE;
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
Address *address;
|
Address *address;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
|
||||||
|
@ -384,7 +383,7 @@ void link_update_operstate(Link *link, bool also_update_master) {
|
||||||
if (carrier_state >= LINK_CARRIER_STATE_CARRIER) {
|
if (carrier_state >= LINK_CARRIER_STATE_CARRIER) {
|
||||||
Link *slave;
|
Link *slave;
|
||||||
|
|
||||||
SET_FOREACH(slave, link->slaves, i) {
|
SET_FOREACH(slave, link->slaves) {
|
||||||
link_update_operstate(slave, false);
|
link_update_operstate(slave, false);
|
||||||
|
|
||||||
if (slave->carrier_state < LINK_CARRIER_STATE_CARRIER)
|
if (slave->carrier_state < LINK_CARRIER_STATE_CARRIER)
|
||||||
|
@ -392,7 +391,7 @@ void link_update_operstate(Link *link, bool also_update_master) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(address, link->addresses, i) {
|
SET_FOREACH(address, link->addresses) {
|
||||||
if (!address_is_ready(address))
|
if (!address_is_ready(address))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -401,7 +400,7 @@ void link_update_operstate(Link *link, bool also_update_master) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for operstate we also take foreign addresses into account */
|
/* for operstate we also take foreign addresses into account */
|
||||||
SET_FOREACH(address, link->addresses_foreign, i) {
|
SET_FOREACH(address, link->addresses_foreign) {
|
||||||
if (!address_is_ready(address))
|
if (!address_is_ready(address))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -886,10 +885,9 @@ void link_enter_failed(Link *link) {
|
||||||
|
|
||||||
static int link_join_netdevs_after_configured(Link *link) {
|
static int link_join_netdevs_after_configured(Link *link) {
|
||||||
NetDev *netdev;
|
NetDev *netdev;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(netdev, link->network->stacked_netdevs, i) {
|
HASHMAP_FOREACH(netdev, link->network->stacked_netdevs) {
|
||||||
if (netdev->ifindex > 0)
|
if (netdev->ifindex > 0)
|
||||||
/* Assume already enslaved. */
|
/* Assume already enslaved. */
|
||||||
continue;
|
continue;
|
||||||
|
@ -1101,7 +1099,6 @@ int link_request_set_routes(Link *link) {
|
||||||
|
|
||||||
void link_check_ready(Link *link) {
|
void link_check_ready(Link *link) {
|
||||||
Address *a;
|
Address *a;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
|
||||||
|
@ -1126,7 +1123,7 @@ void link_check_ready(Link *link) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(a, link->addresses, i)
|
SET_FOREACH(a, link->addresses)
|
||||||
if (!address_is_ready(a)) {
|
if (!address_is_ready(a)) {
|
||||||
_cleanup_free_ char *str = NULL;
|
_cleanup_free_ char *str = NULL;
|
||||||
|
|
||||||
|
@ -1175,7 +1172,7 @@ void link_check_ready(Link *link) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(n, link->ndisc_addresses, i)
|
SET_FOREACH(n, link->ndisc_addresses)
|
||||||
if (!n->marked) {
|
if (!n->marked) {
|
||||||
has_ndisc_address = true;
|
has_ndisc_address = true;
|
||||||
break;
|
break;
|
||||||
|
@ -1259,7 +1256,6 @@ static int link_set_bridge_fdb(Link *link) {
|
||||||
|
|
||||||
static int static_address_ready_callback(Address *address) {
|
static int static_address_ready_callback(Address *address) {
|
||||||
Address *a;
|
Address *a;
|
||||||
Iterator i;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
|
|
||||||
assert(address);
|
assert(address);
|
||||||
|
@ -1270,7 +1266,7 @@ static int static_address_ready_callback(Address *address) {
|
||||||
if (!link->addresses_configured)
|
if (!link->addresses_configured)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
SET_FOREACH(a, link->static_addresses, i)
|
SET_FOREACH(a, link->static_addresses)
|
||||||
if (!address_is_ready(a)) {
|
if (!address_is_ready(a)) {
|
||||||
_cleanup_free_ char *str = NULL;
|
_cleanup_free_ char *str = NULL;
|
||||||
|
|
||||||
|
@ -1280,7 +1276,7 @@ static int static_address_ready_callback(Address *address) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This should not be called again */
|
/* This should not be called again */
|
||||||
SET_FOREACH(a, link->static_addresses, i)
|
SET_FOREACH(a, link->static_addresses)
|
||||||
a->callback = NULL;
|
a->callback = NULL;
|
||||||
|
|
||||||
link->addresses_ready = true;
|
link->addresses_ready = true;
|
||||||
|
@ -1567,9 +1563,8 @@ static bool link_reduces_vlan_mtu(Link *link) {
|
||||||
static uint32_t link_get_requested_mtu_by_stacked_netdevs(Link *link) {
|
static uint32_t link_get_requested_mtu_by_stacked_netdevs(Link *link) {
|
||||||
uint32_t mtu = 0;
|
uint32_t mtu = 0;
|
||||||
NetDev *dev;
|
NetDev *dev;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(dev, link->network->stacked_netdevs, i)
|
HASHMAP_FOREACH(dev, link->network->stacked_netdevs)
|
||||||
if (dev->kind == NETDEV_KIND_VLAN && dev->mtu > 0)
|
if (dev->kind == NETDEV_KIND_VLAN && dev->mtu > 0)
|
||||||
/* See vlan_dev_change_mtu() in kernel. */
|
/* See vlan_dev_change_mtu() in kernel. */
|
||||||
mtu = MAX(mtu, link_reduces_vlan_mtu(link) ? dev->mtu + 4 : dev->mtu);
|
mtu = MAX(mtu, link_reduces_vlan_mtu(link) ? dev->mtu + 4 : dev->mtu);
|
||||||
|
@ -2031,7 +2026,6 @@ static int link_set_group(Link *link) {
|
||||||
|
|
||||||
static int link_handle_bound_to_list(Link *link) {
|
static int link_handle_bound_to_list(Link *link) {
|
||||||
Link *l;
|
Link *l;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
bool required_up = false;
|
bool required_up = false;
|
||||||
bool link_is_up = false;
|
bool link_is_up = false;
|
||||||
|
@ -2044,7 +2038,7 @@ static int link_handle_bound_to_list(Link *link) {
|
||||||
if (link->flags & IFF_UP)
|
if (link->flags & IFF_UP)
|
||||||
link_is_up = true;
|
link_is_up = true;
|
||||||
|
|
||||||
HASHMAP_FOREACH (l, link->bound_to_links, i)
|
HASHMAP_FOREACH (l, link->bound_to_links)
|
||||||
if (link_has_carrier(l)) {
|
if (link_has_carrier(l)) {
|
||||||
required_up = true;
|
required_up = true;
|
||||||
break;
|
break;
|
||||||
|
@ -2064,7 +2058,6 @@ static int link_handle_bound_to_list(Link *link) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int link_handle_bound_by_list(Link *link) {
|
static int link_handle_bound_by_list(Link *link) {
|
||||||
Iterator i;
|
|
||||||
Link *l;
|
Link *l;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -2073,7 +2066,7 @@ static int link_handle_bound_by_list(Link *link) {
|
||||||
if (hashmap_isempty(link->bound_by_links))
|
if (hashmap_isempty(link->bound_by_links))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
HASHMAP_FOREACH (l, link->bound_by_links, i) {
|
HASHMAP_FOREACH (l, link->bound_by_links) {
|
||||||
r = link_handle_bound_to_list(l);
|
r = link_handle_bound_to_list(l);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -2108,7 +2101,6 @@ static int link_put_carrier(Link *link, Link *carrier, Hashmap **h) {
|
||||||
static int link_new_bound_by_list(Link *link) {
|
static int link_new_bound_by_list(Link *link) {
|
||||||
Manager *m;
|
Manager *m;
|
||||||
Link *carrier;
|
Link *carrier;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
bool list_updated = false;
|
bool list_updated = false;
|
||||||
|
|
||||||
|
@ -2117,7 +2109,7 @@ static int link_new_bound_by_list(Link *link) {
|
||||||
|
|
||||||
m = link->manager;
|
m = link->manager;
|
||||||
|
|
||||||
HASHMAP_FOREACH(carrier, m->links, i) {
|
HASHMAP_FOREACH(carrier, m->links) {
|
||||||
if (!carrier->network)
|
if (!carrier->network)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2136,7 +2128,7 @@ static int link_new_bound_by_list(Link *link) {
|
||||||
if (list_updated)
|
if (list_updated)
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
HASHMAP_FOREACH(carrier, link->bound_by_links, i) {
|
HASHMAP_FOREACH(carrier, link->bound_by_links) {
|
||||||
r = link_put_carrier(carrier, link, &carrier->bound_to_links);
|
r = link_put_carrier(carrier, link, &carrier->bound_to_links);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -2150,7 +2142,6 @@ static int link_new_bound_by_list(Link *link) {
|
||||||
static int link_new_bound_to_list(Link *link) {
|
static int link_new_bound_to_list(Link *link) {
|
||||||
Manager *m;
|
Manager *m;
|
||||||
Link *carrier;
|
Link *carrier;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
bool list_updated = false;
|
bool list_updated = false;
|
||||||
|
|
||||||
|
@ -2165,7 +2156,7 @@ static int link_new_bound_to_list(Link *link) {
|
||||||
|
|
||||||
m = link->manager;
|
m = link->manager;
|
||||||
|
|
||||||
HASHMAP_FOREACH (carrier, m->links, i) {
|
HASHMAP_FOREACH (carrier, m->links) {
|
||||||
if (strv_fnmatch(link->network->bind_carrier, carrier->ifname)) {
|
if (strv_fnmatch(link->network->bind_carrier, carrier->ifname)) {
|
||||||
r = link_put_carrier(link, carrier, &link->bound_to_links);
|
r = link_put_carrier(link, carrier, &link->bound_to_links);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -2178,7 +2169,7 @@ static int link_new_bound_to_list(Link *link) {
|
||||||
if (list_updated)
|
if (list_updated)
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
HASHMAP_FOREACH (carrier, link->bound_to_links, i) {
|
HASHMAP_FOREACH (carrier, link->bound_to_links) {
|
||||||
r = link_put_carrier(carrier, link, &carrier->bound_by_links);
|
r = link_put_carrier(carrier, link, &carrier->bound_by_links);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -2213,9 +2204,8 @@ static int link_new_carrier_maps(Link *link) {
|
||||||
|
|
||||||
static void link_free_bound_to_list(Link *link) {
|
static void link_free_bound_to_list(Link *link) {
|
||||||
Link *bound_to;
|
Link *bound_to;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH (bound_to, link->bound_to_links, i) {
|
HASHMAP_FOREACH (bound_to, link->bound_to_links) {
|
||||||
hashmap_remove(link->bound_to_links, INT_TO_PTR(bound_to->ifindex));
|
hashmap_remove(link->bound_to_links, INT_TO_PTR(bound_to->ifindex));
|
||||||
|
|
||||||
if (hashmap_remove(bound_to->bound_by_links, INT_TO_PTR(link->ifindex)))
|
if (hashmap_remove(bound_to->bound_by_links, INT_TO_PTR(link->ifindex)))
|
||||||
|
@ -2227,9 +2217,8 @@ static void link_free_bound_to_list(Link *link) {
|
||||||
|
|
||||||
static void link_free_bound_by_list(Link *link) {
|
static void link_free_bound_by_list(Link *link) {
|
||||||
Link *bound_by;
|
Link *bound_by;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
HASHMAP_FOREACH (bound_by, link->bound_by_links, i) {
|
HASHMAP_FOREACH (bound_by, link->bound_by_links) {
|
||||||
hashmap_remove(link->bound_by_links, INT_TO_PTR(bound_by->ifindex));
|
hashmap_remove(link->bound_by_links, INT_TO_PTR(bound_by->ifindex));
|
||||||
|
|
||||||
if (hashmap_remove(bound_by->bound_to_links, INT_TO_PTR(link->ifindex))) {
|
if (hashmap_remove(bound_by->bound_to_links, INT_TO_PTR(link->ifindex))) {
|
||||||
|
@ -2413,7 +2402,6 @@ static int netdev_join_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *li
|
||||||
|
|
||||||
static int link_enter_join_netdev(Link *link) {
|
static int link_enter_join_netdev(Link *link) {
|
||||||
NetDev *netdev;
|
NetDev *netdev;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -2486,7 +2474,7 @@ static int link_enter_join_netdev(Link *link) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(netdev, link->network->stacked_netdevs, i) {
|
HASHMAP_FOREACH(netdev, link->network->stacked_netdevs) {
|
||||||
|
|
||||||
if (netdev->ifindex > 0)
|
if (netdev->ifindex > 0)
|
||||||
/* Assume already enslaved. */
|
/* Assume already enslaved. */
|
||||||
|
@ -2745,7 +2733,6 @@ static bool link_is_static_route_configured(Link *link, Route *route) {
|
||||||
|
|
||||||
static bool link_address_is_dynamic(Link *link, Address *address) {
|
static bool link_address_is_dynamic(Link *link, Address *address) {
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
assert(address);
|
assert(address);
|
||||||
|
@ -2756,7 +2743,7 @@ static bool link_address_is_dynamic(Link *link, Address *address) {
|
||||||
/* Even when the address is leased from a DHCP server, networkd assign the address
|
/* Even when the address is leased from a DHCP server, networkd assign the address
|
||||||
* without lifetime when KeepConfiguration=dhcp. So, let's check that we have
|
* without lifetime when KeepConfiguration=dhcp. So, let's check that we have
|
||||||
* corresponding routes with RTPROT_DHCP. */
|
* corresponding routes with RTPROT_DHCP. */
|
||||||
SET_FOREACH(route, link->routes_foreign, i) {
|
SET_FOREACH(route, link->routes_foreign) {
|
||||||
if (route->protocol != RTPROT_DHCP)
|
if (route->protocol != RTPROT_DHCP)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2816,7 +2803,6 @@ static int link_drop_foreign_config(Link *link) {
|
||||||
Address *address;
|
Address *address;
|
||||||
Neighbor *neighbor;
|
Neighbor *neighbor;
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
/* The kernel doesn't notify us about tentative addresses;
|
/* The kernel doesn't notify us about tentative addresses;
|
||||||
|
@ -2827,7 +2813,7 @@ static int link_drop_foreign_config(Link *link) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(address, link->addresses_foreign, i) {
|
SET_FOREACH(address, link->addresses_foreign) {
|
||||||
/* we consider IPv6LL addresses to be managed by the kernel */
|
/* we consider IPv6LL addresses to be managed by the kernel */
|
||||||
if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1 && link_ipv6ll_enabled(link))
|
if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1 && link_ipv6ll_enabled(link))
|
||||||
continue;
|
continue;
|
||||||
|
@ -2849,7 +2835,7 @@ static int link_drop_foreign_config(Link *link) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(neighbor, link->neighbors_foreign, i) {
|
SET_FOREACH(neighbor, link->neighbors_foreign) {
|
||||||
if (link_is_neighbor_configured(link, neighbor)) {
|
if (link_is_neighbor_configured(link, neighbor)) {
|
||||||
r = neighbor_add(link, neighbor->family, &neighbor->in_addr, &neighbor->lladdr, neighbor->lladdr_size, NULL);
|
r = neighbor_add(link, neighbor->family, &neighbor->in_addr, &neighbor->lladdr, neighbor->lladdr_size, NULL);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -2861,7 +2847,7 @@ static int link_drop_foreign_config(Link *link) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(route, link->routes_foreign, i) {
|
SET_FOREACH(route, link->routes_foreign) {
|
||||||
/* do not touch routes managed by the kernel */
|
/* do not touch routes managed by the kernel */
|
||||||
if (route->protocol == RTPROT_KERNEL)
|
if (route->protocol == RTPROT_KERNEL)
|
||||||
continue;
|
continue;
|
||||||
|
@ -2930,10 +2916,9 @@ static int link_drop_config(Link *link) {
|
||||||
Address *address, *pool_address;
|
Address *address, *pool_address;
|
||||||
Neighbor *neighbor;
|
Neighbor *neighbor;
|
||||||
Route *route;
|
Route *route;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
SET_FOREACH(address, link->addresses, i) {
|
SET_FOREACH(address, link->addresses) {
|
||||||
/* we consider IPv6LL addresses to be managed by the kernel */
|
/* we consider IPv6LL addresses to be managed by the kernel */
|
||||||
if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1 && link_ipv6ll_enabled(link))
|
if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1 && link_ipv6ll_enabled(link))
|
||||||
continue;
|
continue;
|
||||||
|
@ -2953,13 +2938,13 @@ static int link_drop_config(Link *link) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(neighbor, link->neighbors, i) {
|
SET_FOREACH(neighbor, link->neighbors) {
|
||||||
r = neighbor_remove(neighbor, link, NULL);
|
r = neighbor_remove(neighbor, link, NULL);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(route, link->routes, i) {
|
SET_FOREACH(route, link->routes) {
|
||||||
/* do not touch routes managed by the kernel */
|
/* do not touch routes managed by the kernel */
|
||||||
if (route->protocol == RTPROT_KERNEL)
|
if (route->protocol == RTPROT_KERNEL)
|
||||||
continue;
|
continue;
|
||||||
|
@ -2994,13 +2979,12 @@ static int link_configure_ipv4_dad(Link *link) {
|
||||||
|
|
||||||
static int link_configure_traffic_control(Link *link) {
|
static int link_configure_traffic_control(Link *link) {
|
||||||
TrafficControl *tc;
|
TrafficControl *tc;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
link->tc_configured = false;
|
link->tc_configured = false;
|
||||||
link->tc_messages = 0;
|
link->tc_messages = 0;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(tc, link->network->tc_by_section, i) {
|
ORDERED_HASHMAP_FOREACH(tc, link->network->tc_by_section) {
|
||||||
r = traffic_control_configure(link, tc);
|
r = traffic_control_configure(link, tc);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -3016,13 +3000,12 @@ static int link_configure_traffic_control(Link *link) {
|
||||||
|
|
||||||
static int link_configure_sr_iov(Link *link) {
|
static int link_configure_sr_iov(Link *link) {
|
||||||
SRIOV *sr_iov;
|
SRIOV *sr_iov;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
link->sr_iov_configured = false;
|
link->sr_iov_configured = false;
|
||||||
link->sr_iov_messages = 0;
|
link->sr_iov_messages = 0;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(sr_iov, link->network->sr_iov_by_section, i) {
|
ORDERED_HASHMAP_FOREACH(sr_iov, link->network->sr_iov_by_section) {
|
||||||
r = sr_iov_configure(link, sr_iov);
|
r = sr_iov_configure(link, sr_iov);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -4224,7 +4207,6 @@ int link_update(Link *link, sd_netlink_message *m) {
|
||||||
|
|
||||||
static void print_link_hashmap(FILE *f, const char *prefix, Hashmap* h) {
|
static void print_link_hashmap(FILE *f, const char *prefix, Hashmap* h) {
|
||||||
bool space = false;
|
bool space = false;
|
||||||
Iterator i;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
|
|
||||||
assert(f);
|
assert(f);
|
||||||
|
@ -4234,7 +4216,7 @@ static void print_link_hashmap(FILE *f, const char *prefix, Hashmap* h) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fputs(prefix, f);
|
fputs(prefix, f);
|
||||||
HASHMAP_FOREACH(link, h, i) {
|
HASHMAP_FOREACH(link, h) {
|
||||||
if (space)
|
if (space)
|
||||||
fputc(' ', f);
|
fputc(' ', f);
|
||||||
|
|
||||||
|
@ -4319,7 +4301,6 @@ int link_save(Link *link) {
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
Route *route;
|
Route *route;
|
||||||
Address *a;
|
Address *a;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -4401,7 +4382,7 @@ int link_save(Link *link) {
|
||||||
if (link->network->ipv6_accept_ra_use_dns && link->ndisc_rdnss) {
|
if (link->network->ipv6_accept_ra_use_dns && link->ndisc_rdnss) {
|
||||||
NDiscRDNSS *dd;
|
NDiscRDNSS *dd;
|
||||||
|
|
||||||
SET_FOREACH(dd, link->ndisc_rdnss, i)
|
SET_FOREACH(dd, link->ndisc_rdnss)
|
||||||
serialize_in6_addrs(f, &dd->address, 1, &space);
|
serialize_in6_addrs(f, &dd->address, 1, &space);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4439,7 +4420,7 @@ int link_save(Link *link) {
|
||||||
|
|
||||||
fputs("DOMAINS=", f);
|
fputs("DOMAINS=", f);
|
||||||
space = false;
|
space = false;
|
||||||
ORDERED_SET_FOREACH(p, link->search_domains ?: link->network->search_domains, i)
|
ORDERED_SET_FOREACH(p, link->search_domains ?: link->network->search_domains)
|
||||||
fputs_with_space(f, p, NULL, &space);
|
fputs_with_space(f, p, NULL, &space);
|
||||||
|
|
||||||
if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_YES) {
|
if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_YES) {
|
||||||
|
@ -4454,7 +4435,7 @@ int link_save(Link *link) {
|
||||||
if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_YES) {
|
if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_YES) {
|
||||||
NDiscDNSSL *dd;
|
NDiscDNSSL *dd;
|
||||||
|
|
||||||
SET_FOREACH(dd, link->ndisc_dnssl, i)
|
SET_FOREACH(dd, link->ndisc_dnssl)
|
||||||
fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space);
|
fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4464,7 +4445,7 @@ int link_save(Link *link) {
|
||||||
|
|
||||||
fputs("ROUTE_DOMAINS=", f);
|
fputs("ROUTE_DOMAINS=", f);
|
||||||
space = false;
|
space = false;
|
||||||
ORDERED_SET_FOREACH(p, link->route_domains ?: link->network->route_domains, i)
|
ORDERED_SET_FOREACH(p, link->route_domains ?: link->network->route_domains)
|
||||||
fputs_with_space(f, p, NULL, &space);
|
fputs_with_space(f, p, NULL, &space);
|
||||||
|
|
||||||
if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_ROUTE) {
|
if (link->network->dhcp_use_domains == DHCP_USE_DOMAINS_ROUTE) {
|
||||||
|
@ -4479,7 +4460,7 @@ int link_save(Link *link) {
|
||||||
if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_ROUTE) {
|
if (link->network->ipv6_accept_ra_use_domains == DHCP_USE_DOMAINS_ROUTE) {
|
||||||
NDiscDNSSL *dd;
|
NDiscDNSSL *dd;
|
||||||
|
|
||||||
SET_FOREACH(dd, link->ndisc_dnssl, i)
|
SET_FOREACH(dd, link->ndisc_dnssl)
|
||||||
fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space);
|
fputs_with_space(f, NDISC_DNSSL_DOMAIN(dd), NULL, &space);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4530,7 +4511,7 @@ int link_save(Link *link) {
|
||||||
|
|
||||||
fputs("DNSSEC_NTA=", f);
|
fputs("DNSSEC_NTA=", f);
|
||||||
space = false;
|
space = false;
|
||||||
SET_FOREACH(n, nta_anchors, i)
|
SET_FOREACH(n, nta_anchors)
|
||||||
fputs_with_space(f, n, NULL, &space);
|
fputs_with_space(f, n, NULL, &space);
|
||||||
fputc('\n', f);
|
fputc('\n', f);
|
||||||
}
|
}
|
||||||
|
@ -4539,7 +4520,7 @@ int link_save(Link *link) {
|
||||||
|
|
||||||
fputs("ADDRESSES=", f);
|
fputs("ADDRESSES=", f);
|
||||||
space = false;
|
space = false;
|
||||||
SET_FOREACH(a, link->addresses, i) {
|
SET_FOREACH(a, link->addresses) {
|
||||||
_cleanup_free_ char *address_str = NULL;
|
_cleanup_free_ char *address_str = NULL;
|
||||||
|
|
||||||
r = in_addr_to_string(a->family, &a->in_addr, &address_str);
|
r = in_addr_to_string(a->family, &a->in_addr, &address_str);
|
||||||
|
@ -4555,7 +4536,7 @@ int link_save(Link *link) {
|
||||||
|
|
||||||
fputs("ROUTES=", f);
|
fputs("ROUTES=", f);
|
||||||
space = false;
|
space = false;
|
||||||
SET_FOREACH(route, link->routes, i) {
|
SET_FOREACH(route, link->routes) {
|
||||||
_cleanup_free_ char *route_str = NULL;
|
_cleanup_free_ char *route_str = NULL;
|
||||||
|
|
||||||
r = in_addr_to_string(route->family, &route->dst, &route_str);
|
r = in_addr_to_string(route->family, &route->dst, &route_str);
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
static int method_list_links(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_list_links(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
Manager *manager = userdata;
|
Manager *manager = userdata;
|
||||||
Iterator i;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ static int method_list_links(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, manager->links, i) {
|
HASHMAP_FOREACH(link, manager->links) {
|
||||||
_cleanup_free_ char *path = NULL;
|
_cleanup_free_ char *path = NULL;
|
||||||
|
|
||||||
path = link_bus_path(link);
|
path = link_bus_path(link);
|
||||||
|
@ -201,7 +200,6 @@ static int bus_method_reconfigure_link(sd_bus_message *message, void *userdata,
|
||||||
|
|
||||||
static int bus_method_reload(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int bus_method_reload(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
Manager *manager = userdata;
|
Manager *manager = userdata;
|
||||||
Iterator i;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -222,7 +220,7 @@ static int bus_method_reload(sd_bus_message *message, void *userdata, sd_bus_err
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, manager->links, i) {
|
HASHMAP_FOREACH(link, manager->links) {
|
||||||
r = link_reconfigure(link, false);
|
r = link_reconfigure(link, false);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -81,12 +81,11 @@ static int setup_default_address_pool(Manager *m) {
|
||||||
|
|
||||||
static int manager_reset_all(Manager *m) {
|
static int manager_reset_all(Manager *m) {
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, m->links, i) {
|
HASHMAP_FOREACH(link, m->links) {
|
||||||
r = link_carrier_reset(link);
|
r = link_carrier_reset(link);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_link_warning_errno(link, r, "Could not reset carrier: %m");
|
log_link_warning_errno(link, r, "Could not reset carrier: %m");
|
||||||
|
@ -1519,7 +1518,6 @@ static int manager_save(Manager *m) {
|
||||||
_cleanup_strv_free_ char **p = NULL;
|
_cleanup_strv_free_ char **p = NULL;
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -1546,7 +1544,7 @@ static int manager_save(Manager *m) {
|
||||||
if (!route_domains)
|
if (!route_domains)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, m->links, i) {
|
HASHMAP_FOREACH(link, m->links) {
|
||||||
const struct in_addr *addresses;
|
const struct in_addr *addresses;
|
||||||
|
|
||||||
if (link->flags & IFF_LOOPBACK)
|
if (link->flags & IFF_LOOPBACK)
|
||||||
|
@ -1723,14 +1721,13 @@ fail:
|
||||||
static int manager_dirty_handler(sd_event_source *s, void *userdata) {
|
static int manager_dirty_handler(sd_event_source *s, void *userdata) {
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
|
||||||
if (m->dirty)
|
if (m->dirty)
|
||||||
manager_save(m);
|
manager_save(m);
|
||||||
|
|
||||||
SET_FOREACH(link, m->dirty_links, i)
|
SET_FOREACH(link, m->dirty_links)
|
||||||
(void) link_save_and_clean(link);
|
(void) link_save_and_clean(link);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1827,14 +1824,13 @@ int manager_new(Manager **ret) {
|
||||||
void manager_free(Manager *m) {
|
void manager_free(Manager *m) {
|
||||||
AddressPool *pool;
|
AddressPool *pool;
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
if (!m)
|
if (!m)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
free(m->state_file);
|
free(m->state_file);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, m->links, i)
|
HASHMAP_FOREACH(link, m->links)
|
||||||
(void) link_stop_clients(link, true);
|
(void) link_stop_clients(link, true);
|
||||||
|
|
||||||
m->dhcp6_prefixes = hashmap_free_with_destructor(m->dhcp6_prefixes, dhcp6_pd_free);
|
m->dhcp6_prefixes = hashmap_free_with_destructor(m->dhcp6_prefixes, dhcp6_pd_free);
|
||||||
|
@ -1880,7 +1876,6 @@ void manager_free(Manager *m) {
|
||||||
|
|
||||||
int manager_start(Manager *m) {
|
int manager_start(Manager *m) {
|
||||||
Link *link;
|
Link *link;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
|
@ -1894,7 +1889,7 @@ int manager_start(Manager *m) {
|
||||||
|
|
||||||
manager_save(m);
|
manager_save(m);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, m->links, i)
|
HASHMAP_FOREACH(link, m->links)
|
||||||
(void) link_save(link);
|
(void) link_save(link);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -40,12 +40,11 @@ static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool
|
||||||
static int ndisc_address_callback(Address *address) {
|
static int ndisc_address_callback(Address *address) {
|
||||||
struct in6_addr router = {};
|
struct in6_addr router = {};
|
||||||
NDiscAddress *n;
|
NDiscAddress *n;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(address);
|
assert(address);
|
||||||
assert(address->link);
|
assert(address->link);
|
||||||
|
|
||||||
SET_FOREACH(n, address->link->ndisc_addresses, i)
|
SET_FOREACH(n, address->link->ndisc_addresses)
|
||||||
if (n->address == address) {
|
if (n->address == address) {
|
||||||
router = n->router;
|
router = n->router;
|
||||||
break;
|
break;
|
||||||
|
@ -61,7 +60,7 @@ static int ndisc_address_callback(Address *address) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make this called only once */
|
/* Make this called only once */
|
||||||
SET_FOREACH(n, address->link->ndisc_addresses, i)
|
SET_FOREACH(n, address->link->ndisc_addresses)
|
||||||
if (IN6_ARE_ADDR_EQUAL(&n->router, &router))
|
if (IN6_ARE_ADDR_EQUAL(&n->router, &router))
|
||||||
n->address->callback = NULL;
|
n->address->callback = NULL;
|
||||||
|
|
||||||
|
@ -73,7 +72,6 @@ static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool
|
||||||
NDiscRoute *nr;
|
NDiscRoute *nr;
|
||||||
NDiscDNSSL *dnssl;
|
NDiscDNSSL *dnssl;
|
||||||
NDiscRDNSS *rdnss;
|
NDiscRDNSS *rdnss;
|
||||||
Iterator i;
|
|
||||||
int k, r = 0;
|
int k, r = 0;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -85,21 +83,21 @@ static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool
|
||||||
if (!link->ndisc_addresses_configured || !link->ndisc_routes_configured)
|
if (!link->ndisc_addresses_configured || !link->ndisc_routes_configured)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
SET_FOREACH(na, link->ndisc_addresses, i)
|
SET_FOREACH(na, link->ndisc_addresses)
|
||||||
if (!na->marked && IN6_ARE_ADDR_EQUAL(&na->router, router)) {
|
if (!na->marked && IN6_ARE_ADDR_EQUAL(&na->router, router)) {
|
||||||
set_callback = true;
|
set_callback = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set_callback)
|
if (set_callback)
|
||||||
SET_FOREACH(na, link->ndisc_addresses, i)
|
SET_FOREACH(na, link->ndisc_addresses)
|
||||||
if (!na->marked && address_is_ready(na->address)) {
|
if (!na->marked && address_is_ready(na->address)) {
|
||||||
set_callback = false;
|
set_callback = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set_callback) {
|
if (set_callback) {
|
||||||
SET_FOREACH(na, link->ndisc_addresses, i)
|
SET_FOREACH(na, link->ndisc_addresses)
|
||||||
if (!na->marked && IN6_ARE_ADDR_EQUAL(&na->router, router))
|
if (!na->marked && IN6_ARE_ADDR_EQUAL(&na->router, router))
|
||||||
na->address->callback = ndisc_address_callback;
|
na->address->callback = ndisc_address_callback;
|
||||||
|
|
||||||
|
@ -124,25 +122,25 @@ static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool
|
||||||
|
|
||||||
link_dirty(link);
|
link_dirty(link);
|
||||||
|
|
||||||
SET_FOREACH(na, link->ndisc_addresses, i)
|
SET_FOREACH(na, link->ndisc_addresses)
|
||||||
if (na->marked && IN6_ARE_ADDR_EQUAL(&na->router, router)) {
|
if (na->marked && IN6_ARE_ADDR_EQUAL(&na->router, router)) {
|
||||||
k = address_remove(na->address, link, NULL);
|
k = address_remove(na->address, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(nr, link->ndisc_routes, i)
|
SET_FOREACH(nr, link->ndisc_routes)
|
||||||
if (nr->marked && IN6_ARE_ADDR_EQUAL(&nr->router, router)) {
|
if (nr->marked && IN6_ARE_ADDR_EQUAL(&nr->router, router)) {
|
||||||
k = route_remove(nr->route, link, NULL);
|
k = route_remove(nr->route, link, NULL);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(rdnss, link->ndisc_rdnss, i)
|
SET_FOREACH(rdnss, link->ndisc_rdnss)
|
||||||
if (rdnss->marked && IN6_ARE_ADDR_EQUAL(&rdnss->router, router))
|
if (rdnss->marked && IN6_ARE_ADDR_EQUAL(&rdnss->router, router))
|
||||||
free(set_remove(link->ndisc_rdnss, rdnss));
|
free(set_remove(link->ndisc_rdnss, rdnss));
|
||||||
|
|
||||||
SET_FOREACH(dnssl, link->ndisc_dnssl, i)
|
SET_FOREACH(dnssl, link->ndisc_dnssl)
|
||||||
if (dnssl->marked && IN6_ARE_ADDR_EQUAL(&dnssl->router, router))
|
if (dnssl->marked && IN6_ARE_ADDR_EQUAL(&dnssl->router, router))
|
||||||
free(set_remove(link->ndisc_dnssl, dnssl));
|
free(set_remove(link->ndisc_dnssl, dnssl));
|
||||||
|
|
||||||
|
@ -157,7 +155,6 @@ static int ndisc_remove_old(Link *link) {
|
||||||
NDiscRoute *nr;
|
NDiscRoute *nr;
|
||||||
NDiscDNSSL *dnssl;
|
NDiscDNSSL *dnssl;
|
||||||
NDiscRDNSS *rdnss;
|
NDiscRDNSS *rdnss;
|
||||||
Iterator i;
|
|
||||||
int k, r;
|
int k, r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -166,7 +163,7 @@ static int ndisc_remove_old(Link *link) {
|
||||||
if (!routers)
|
if (!routers)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
SET_FOREACH(na, link->ndisc_addresses, i)
|
SET_FOREACH(na, link->ndisc_addresses)
|
||||||
if (!set_contains(routers, &na->router)) {
|
if (!set_contains(routers, &na->router)) {
|
||||||
router = newdup(struct in6_addr, &na->router, 1);
|
router = newdup(struct in6_addr, &na->router, 1);
|
||||||
if (!router)
|
if (!router)
|
||||||
|
@ -180,7 +177,7 @@ static int ndisc_remove_old(Link *link) {
|
||||||
TAKE_PTR(router);
|
TAKE_PTR(router);
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(nr, link->ndisc_routes, i)
|
SET_FOREACH(nr, link->ndisc_routes)
|
||||||
if (!set_contains(routers, &nr->router)) {
|
if (!set_contains(routers, &nr->router)) {
|
||||||
router = newdup(struct in6_addr, &nr->router, 1);
|
router = newdup(struct in6_addr, &nr->router, 1);
|
||||||
if (!router)
|
if (!router)
|
||||||
|
@ -194,7 +191,7 @@ static int ndisc_remove_old(Link *link) {
|
||||||
TAKE_PTR(router);
|
TAKE_PTR(router);
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(rdnss, link->ndisc_rdnss, i)
|
SET_FOREACH(rdnss, link->ndisc_rdnss)
|
||||||
if (!set_contains(routers, &rdnss->router)) {
|
if (!set_contains(routers, &rdnss->router)) {
|
||||||
router = newdup(struct in6_addr, &rdnss->router, 1);
|
router = newdup(struct in6_addr, &rdnss->router, 1);
|
||||||
if (!router)
|
if (!router)
|
||||||
|
@ -208,7 +205,7 @@ static int ndisc_remove_old(Link *link) {
|
||||||
TAKE_PTR(router);
|
TAKE_PTR(router);
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(dnssl, link->ndisc_dnssl, i)
|
SET_FOREACH(dnssl, link->ndisc_dnssl)
|
||||||
if (!set_contains(routers, &dnssl->router)) {
|
if (!set_contains(routers, &dnssl->router)) {
|
||||||
router = newdup(struct in6_addr, &dnssl->router, 1);
|
router = newdup(struct in6_addr, &dnssl->router, 1);
|
||||||
if (!router)
|
if (!router)
|
||||||
|
@ -223,7 +220,7 @@ static int ndisc_remove_old(Link *link) {
|
||||||
}
|
}
|
||||||
|
|
||||||
r = 0;
|
r = 0;
|
||||||
SET_FOREACH(a, routers, i) {
|
SET_FOREACH(a, routers) {
|
||||||
k = ndisc_remove_old_one(link, a, false);
|
k = ndisc_remove_old_one(link, a, false);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
r = k;
|
r = k;
|
||||||
|
@ -571,7 +568,6 @@ static int make_stableprivate_address(Link *link, const struct in6_addr *prefix,
|
||||||
static int ndisc_router_generate_addresses(Link *link, struct in6_addr *address, uint8_t prefixlen, Set **ret) {
|
static int ndisc_router_generate_addresses(Link *link, struct in6_addr *address, uint8_t prefixlen, Set **ret) {
|
||||||
_cleanup_set_free_free_ Set *addresses = NULL;
|
_cleanup_set_free_free_ Set *addresses = NULL;
|
||||||
IPv6Token *j;
|
IPv6Token *j;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -582,7 +578,7 @@ static int ndisc_router_generate_addresses(Link *link, struct in6_addr *address,
|
||||||
if (!addresses)
|
if (!addresses)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
ORDERED_SET_FOREACH(j, link->network->ipv6_tokens, i) {
|
ORDERED_SET_FOREACH(j, link->network->ipv6_tokens) {
|
||||||
_cleanup_free_ struct in6_addr *new_address = NULL;
|
_cleanup_free_ struct in6_addr *new_address = NULL;
|
||||||
|
|
||||||
if (j->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE
|
if (j->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE
|
||||||
|
@ -650,7 +646,6 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r
|
||||||
struct in6_addr addr, *a;
|
struct in6_addr addr, *a;
|
||||||
unsigned prefixlen;
|
unsigned prefixlen;
|
||||||
usec_t time_now;
|
usec_t time_now;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -693,7 +688,7 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r
|
||||||
address->flags = IFA_F_NOPREFIXROUTE|IFA_F_MANAGETEMPADDR;
|
address->flags = IFA_F_NOPREFIXROUTE|IFA_F_MANAGETEMPADDR;
|
||||||
address->cinfo.ifa_prefered = lifetime_preferred;
|
address->cinfo.ifa_prefered = lifetime_preferred;
|
||||||
|
|
||||||
SET_FOREACH(a, addresses, i) {
|
SET_FOREACH(a, addresses) {
|
||||||
Address *existing_address;
|
Address *existing_address;
|
||||||
|
|
||||||
/* see RFC4862 section 5.5.3.e */
|
/* see RFC4862 section 5.5.3.e */
|
||||||
|
@ -847,7 +842,6 @@ static int ndisc_router_process_rdnss(Link *link, sd_ndisc_router *rt) {
|
||||||
struct in6_addr router;
|
struct in6_addr router;
|
||||||
NDiscRDNSS *rdnss;
|
NDiscRDNSS *rdnss;
|
||||||
usec_t time_now;
|
usec_t time_now;
|
||||||
Iterator i;
|
|
||||||
int n, r;
|
int n, r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -869,7 +863,7 @@ static int ndisc_router_process_rdnss(Link *link, sd_ndisc_router *rt) {
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
return log_link_error_errno(link, n, "Failed to get RDNSS addresses: %m");
|
return log_link_error_errno(link, n, "Failed to get RDNSS addresses: %m");
|
||||||
|
|
||||||
SET_FOREACH(rdnss, link->ndisc_rdnss, i)
|
SET_FOREACH(rdnss, link->ndisc_rdnss)
|
||||||
if (IN6_ARE_ADDR_EQUAL(&rdnss->router, &router))
|
if (IN6_ARE_ADDR_EQUAL(&rdnss->router, &router))
|
||||||
rdnss->marked = true;
|
rdnss->marked = true;
|
||||||
|
|
||||||
|
@ -935,7 +929,6 @@ static int ndisc_router_process_dnssl(Link *link, sd_ndisc_router *rt) {
|
||||||
uint32_t lifetime;
|
uint32_t lifetime;
|
||||||
usec_t time_now;
|
usec_t time_now;
|
||||||
NDiscDNSSL *dnssl;
|
NDiscDNSSL *dnssl;
|
||||||
Iterator i;
|
|
||||||
char **j;
|
char **j;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -958,7 +951,7 @@ static int ndisc_router_process_dnssl(Link *link, sd_ndisc_router *rt) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_link_error_errno(link, r, "Failed to get DNSSL addresses: %m");
|
return log_link_error_errno(link, r, "Failed to get DNSSL addresses: %m");
|
||||||
|
|
||||||
SET_FOREACH(dnssl, link->ndisc_dnssl, i)
|
SET_FOREACH(dnssl, link->ndisc_dnssl)
|
||||||
if (IN6_ARE_ADDR_EQUAL(&dnssl->router, &router))
|
if (IN6_ARE_ADDR_EQUAL(&dnssl->router, &router))
|
||||||
dnssl->marked = true;
|
dnssl->marked = true;
|
||||||
|
|
||||||
|
@ -1087,7 +1080,6 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
|
||||||
uint64_t flags;
|
uint64_t flags;
|
||||||
NDiscAddress *na;
|
NDiscAddress *na;
|
||||||
NDiscRoute *nr;
|
NDiscRoute *nr;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -1104,11 +1096,11 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_link_error_errno(link, r, "Failed to get router address from RA: %m");
|
return log_link_error_errno(link, r, "Failed to get router address from RA: %m");
|
||||||
|
|
||||||
SET_FOREACH(na, link->ndisc_addresses, i)
|
SET_FOREACH(na, link->ndisc_addresses)
|
||||||
if (IN6_ARE_ADDR_EQUAL(&na->router, &router))
|
if (IN6_ARE_ADDR_EQUAL(&na->router, &router))
|
||||||
na->marked = true;
|
na->marked = true;
|
||||||
|
|
||||||
SET_FOREACH(nr, link->ndisc_routes, i)
|
SET_FOREACH(nr, link->ndisc_routes)
|
||||||
if (IN6_ARE_ADDR_EQUAL(&nr->router, &router))
|
if (IN6_ARE_ADDR_EQUAL(&nr->router, &router))
|
||||||
nr->marked = true;
|
nr->marked = true;
|
||||||
|
|
||||||
|
@ -1228,7 +1220,6 @@ int ndisc_configure(Link *link) {
|
||||||
void ndisc_vacuum(Link *link) {
|
void ndisc_vacuum(Link *link) {
|
||||||
NDiscRDNSS *r;
|
NDiscRDNSS *r;
|
||||||
NDiscDNSSL *d;
|
NDiscDNSSL *d;
|
||||||
Iterator i;
|
|
||||||
usec_t time_now;
|
usec_t time_now;
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
|
|
||||||
|
@ -1238,13 +1229,13 @@ void ndisc_vacuum(Link *link) {
|
||||||
|
|
||||||
time_now = now(clock_boottime_or_monotonic());
|
time_now = now(clock_boottime_or_monotonic());
|
||||||
|
|
||||||
SET_FOREACH(r, link->ndisc_rdnss, i)
|
SET_FOREACH(r, link->ndisc_rdnss)
|
||||||
if (r->valid_until < time_now) {
|
if (r->valid_until < time_now) {
|
||||||
free(set_remove(link->ndisc_rdnss, r));
|
free(set_remove(link->ndisc_rdnss, r));
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_FOREACH(d, link->ndisc_dnssl, i)
|
SET_FOREACH(d, link->ndisc_dnssl)
|
||||||
if (d->valid_until < time_now) {
|
if (d->valid_until < time_now) {
|
||||||
free(set_remove(link->ndisc_dnssl, d));
|
free(set_remove(link->ndisc_dnssl, d));
|
||||||
updated = true;
|
updated = true;
|
||||||
|
|
|
@ -18,7 +18,6 @@ static int property_get_ether_addrs(
|
||||||
|
|
||||||
char buf[ETHER_ADDR_TO_STRING_MAX];
|
char buf[ETHER_ADDR_TO_STRING_MAX];
|
||||||
const struct ether_addr *p;
|
const struct ether_addr *p;
|
||||||
Iterator i;
|
|
||||||
Set *s;
|
Set *s;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ static int property_get_ether_addrs(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
SET_FOREACH(p, s, i) {
|
SET_FOREACH(p, s) {
|
||||||
r = sd_bus_message_append(reply, "s", ether_addr_to_string(p, buf));
|
r = sd_bus_message_append(reply, "s", ether_addr_to_string(p, buf));
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -88,7 +87,6 @@ int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Network *network;
|
Network *network;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
@ -96,7 +94,7 @@ int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(nodes);
|
assert(nodes);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(network, m->networks, i) {
|
ORDERED_HASHMAP_FOREACH(network, m->networks) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = network_bus_path(network);
|
p = network_bus_path(network);
|
||||||
|
|
|
@ -121,12 +121,11 @@ static int network_resolve_netdev_one(Network *network, const char *name, NetDev
|
||||||
|
|
||||||
static int network_resolve_stacked_netdevs(Network *network) {
|
static int network_resolve_stacked_netdevs(Network *network) {
|
||||||
void *name, *kind;
|
void *name, *kind;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(network);
|
assert(network);
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(kind, name, network->stacked_netdev_names, i) {
|
HASHMAP_FOREACH_KEY(kind, name, network->stacked_netdev_names) {
|
||||||
_cleanup_(netdev_unrefp) NetDev *netdev = NULL;
|
_cleanup_(netdev_unrefp) NetDev *netdev = NULL;
|
||||||
|
|
||||||
r = network_resolve_netdev_one(network, name, PTR_TO_INT(kind), &netdev);
|
r = network_resolve_netdev_one(network, name, PTR_TO_INT(kind), &netdev);
|
||||||
|
@ -160,7 +159,6 @@ int network_verify(Network *network) {
|
||||||
FdbEntry *fdb, *fdb_next;
|
FdbEntry *fdb, *fdb_next;
|
||||||
TrafficControl *tc;
|
TrafficControl *tc;
|
||||||
SRIOV *sr_iov;
|
SRIOV *sr_iov;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(network);
|
assert(network);
|
||||||
assert(network->filename);
|
assert(network->filename);
|
||||||
|
@ -328,11 +326,11 @@ int network_verify(Network *network) {
|
||||||
routing_policy_rule_free(rule);
|
routing_policy_rule_free(rule);
|
||||||
|
|
||||||
bool has_root = false, has_clsact = false;
|
bool has_root = false, has_clsact = false;
|
||||||
ORDERED_HASHMAP_FOREACH(tc, network->tc_by_section, i)
|
ORDERED_HASHMAP_FOREACH(tc, network->tc_by_section)
|
||||||
if (traffic_control_section_verify(tc, &has_root, &has_clsact) < 0)
|
if (traffic_control_section_verify(tc, &has_root, &has_clsact) < 0)
|
||||||
traffic_control_free(tc);
|
traffic_control_free(tc);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(sr_iov, network->sr_iov_by_section, i)
|
ORDERED_HASHMAP_FOREACH(sr_iov, network->sr_iov_by_section)
|
||||||
if (sr_iov_section_verify(sr_iov) < 0)
|
if (sr_iov_section_verify(sr_iov) < 0)
|
||||||
sr_iov_free(sr_iov);
|
sr_iov_free(sr_iov);
|
||||||
|
|
||||||
|
@ -600,7 +598,6 @@ int network_load(Manager *manager, OrderedHashmap **networks) {
|
||||||
int network_reload(Manager *manager) {
|
int network_reload(Manager *manager) {
|
||||||
OrderedHashmap *new_networks = NULL;
|
OrderedHashmap *new_networks = NULL;
|
||||||
Network *n, *old;
|
Network *n, *old;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(manager);
|
assert(manager);
|
||||||
|
@ -609,7 +606,7 @@ int network_reload(Manager *manager) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(n, new_networks, i) {
|
ORDERED_HASHMAP_FOREACH(n, new_networks) {
|
||||||
r = network_get_by_name(manager, n->name, &old);
|
r = network_get_by_name(manager, n->name, &old);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
continue; /* The .network file is new. */
|
continue; /* The .network file is new. */
|
||||||
|
@ -798,12 +795,11 @@ int network_get(Manager *manager, unsigned short iftype, sd_device *device,
|
||||||
enum nl80211_iftype wlan_iftype, const char *ssid, const struct ether_addr *bssid,
|
enum nl80211_iftype wlan_iftype, const char *ssid, const struct ether_addr *bssid,
|
||||||
Network **ret) {
|
Network **ret) {
|
||||||
Network *network;
|
Network *network;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
assert(manager);
|
assert(manager);
|
||||||
assert(ret);
|
assert(ret);
|
||||||
|
|
||||||
ORDERED_HASHMAP_FOREACH(network, manager->networks, i)
|
ORDERED_HASHMAP_FOREACH(network, manager->networks)
|
||||||
if (net_match_config(network->match_mac, network->match_permanent_mac,
|
if (net_match_config(network->match_mac, network->match_permanent_mac,
|
||||||
network->match_path, network->match_driver,
|
network->match_path, network->match_driver,
|
||||||
network->match_type, network->match_name, network->match_property,
|
network->match_type, network->match_name, network->match_property,
|
||||||
|
|
|
@ -144,7 +144,6 @@ void route_free(Route *route) {
|
||||||
|
|
||||||
if (route->link) {
|
if (route->link) {
|
||||||
NDiscRoute *n;
|
NDiscRoute *n;
|
||||||
Iterator i;
|
|
||||||
|
|
||||||
set_remove(route->link->routes, route);
|
set_remove(route->link->routes, route);
|
||||||
set_remove(route->link->routes_foreign, route);
|
set_remove(route->link->routes_foreign, route);
|
||||||
|
@ -154,7 +153,7 @@ void route_free(Route *route) {
|
||||||
set_remove(route->link->dhcp6_routes_old, route);
|
set_remove(route->link->dhcp6_routes_old, route);
|
||||||
set_remove(route->link->dhcp6_pd_routes, route);
|
set_remove(route->link->dhcp6_pd_routes, route);
|
||||||
set_remove(route->link->dhcp6_pd_routes_old, route);
|
set_remove(route->link->dhcp6_pd_routes_old, route);
|
||||||
SET_FOREACH(n, route->link->ndisc_routes, i)
|
SET_FOREACH(n, route->link->ndisc_routes)
|
||||||
if (n->route == route)
|
if (n->route == route)
|
||||||
free(set_remove(route->link->ndisc_routes, n));
|
free(set_remove(route->link->ndisc_routes, n));
|
||||||
}
|
}
|
||||||
|
@ -575,7 +574,6 @@ static int append_nexthops(Route *route, sd_netlink_message *req) {
|
||||||
struct rtnexthop *rtnh;
|
struct rtnexthop *rtnh;
|
||||||
MultipathRoute *m;
|
MultipathRoute *m;
|
||||||
size_t offset;
|
size_t offset;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (ordered_set_isempty(route->multipath_routes))
|
if (ordered_set_isempty(route->multipath_routes))
|
||||||
|
@ -591,7 +589,7 @@ static int append_nexthops(Route *route, sd_netlink_message *req) {
|
||||||
};
|
};
|
||||||
offset = (uint8_t *) RTA_DATA(rta) - (uint8_t *) rta;
|
offset = (uint8_t *) RTA_DATA(rta) - (uint8_t *) rta;
|
||||||
|
|
||||||
ORDERED_SET_FOREACH(m, route->multipath_routes, i) {
|
ORDERED_SET_FOREACH(m, route->multipath_routes) {
|
||||||
r = append_nexthop_one(route, m, &rta, offset);
|
r = append_nexthop_one(route, m, &rta, offset);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -1168,12 +1168,11 @@ int config_parse_routing_policy_rule_suppress_prefixlen(
|
||||||
|
|
||||||
int routing_policy_serialize_rules(Set *rules, FILE *f) {
|
int routing_policy_serialize_rules(Set *rules, FILE *f) {
|
||||||
RoutingPolicyRule *rule = NULL;
|
RoutingPolicyRule *rule = NULL;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(f);
|
assert(f);
|
||||||
|
|
||||||
SET_FOREACH(rule, rules, i) {
|
SET_FOREACH(rule, rules) {
|
||||||
_cleanup_free_ char *from_str = NULL, *to_str = NULL;
|
_cleanup_free_ char *from_str = NULL, *to_str = NULL;
|
||||||
const char *family_str;
|
const char *family_str;
|
||||||
bool space = false;
|
bool space = false;
|
||||||
|
@ -1489,13 +1488,12 @@ int routing_policy_load_rules(const char *state_file, Set **rules) {
|
||||||
|
|
||||||
static bool manager_links_have_routing_policy_rule(Manager *m, RoutingPolicyRule *rule) {
|
static bool manager_links_have_routing_policy_rule(Manager *m, RoutingPolicyRule *rule) {
|
||||||
RoutingPolicyRule *link_rule;
|
RoutingPolicyRule *link_rule;
|
||||||
Iterator i;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(rule);
|
assert(rule);
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, m->links, i) {
|
HASHMAP_FOREACH(link, m->links) {
|
||||||
if (!link->network)
|
if (!link->network)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1509,13 +1507,12 @@ static bool manager_links_have_routing_policy_rule(Manager *m, RoutingPolicyRule
|
||||||
|
|
||||||
void routing_policy_rule_purge(Manager *m, Link *link) {
|
void routing_policy_rule_purge(Manager *m, Link *link) {
|
||||||
RoutingPolicyRule *rule, *existing;
|
RoutingPolicyRule *rule, *existing;
|
||||||
Iterator i;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(m);
|
assert(m);
|
||||||
assert(link);
|
assert(link);
|
||||||
|
|
||||||
SET_FOREACH(rule, m->rules_saved, i) {
|
SET_FOREACH(rule, m->rules_saved) {
|
||||||
existing = set_get(m->rules_foreign, rule);
|
existing = set_get(m->rules_foreign, rule);
|
||||||
if (!existing)
|
if (!existing)
|
||||||
continue; /* Saved rule does not exist anymore. */
|
continue; /* Saved rule does not exist anymore. */
|
||||||
|
|
|
@ -46,7 +46,6 @@ static int speed_meter_handler(sd_event_source *s, uint64_t usec, void *userdata
|
||||||
Manager *manager = userdata;
|
Manager *manager = userdata;
|
||||||
sd_netlink_message *i;
|
sd_netlink_message *i;
|
||||||
usec_t usec_now;
|
usec_t usec_now;
|
||||||
Iterator j;
|
|
||||||
Link *link;
|
Link *link;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -64,7 +63,7 @@ static int speed_meter_handler(sd_event_source *s, uint64_t usec, void *userdata
|
||||||
manager->speed_meter_usec_old = manager->speed_meter_usec_new;
|
manager->speed_meter_usec_old = manager->speed_meter_usec_new;
|
||||||
manager->speed_meter_usec_new = usec_now;
|
manager->speed_meter_usec_new = usec_now;
|
||||||
|
|
||||||
HASHMAP_FOREACH(link, manager->links, j)
|
HASHMAP_FOREACH(link, manager->links)
|
||||||
link->stats_updated = false;
|
link->stats_updated = false;
|
||||||
|
|
||||||
r = sd_rtnl_message_new_link(manager->rtnl, &req, RTM_GETLINK, 0);
|
r = sd_rtnl_message_new_link(manager->rtnl, &req, RTM_GETLINK, 0);
|
||||||
|
|
|
@ -66,7 +66,6 @@ static int manager_link_is_online(Manager *m, Link *l, LinkOperationalStateRange
|
||||||
|
|
||||||
bool manager_configured(Manager *m) {
|
bool manager_configured(Manager *m) {
|
||||||
bool one_ready = false;
|
bool one_ready = false;
|
||||||
Iterator i;
|
|
||||||
const char *ifname;
|
const char *ifname;
|
||||||
void *p;
|
void *p;
|
||||||
Link *l;
|
Link *l;
|
||||||
|
@ -74,7 +73,7 @@ bool manager_configured(Manager *m) {
|
||||||
|
|
||||||
if (!hashmap_isempty(m->interfaces)) {
|
if (!hashmap_isempty(m->interfaces)) {
|
||||||
/* wait for all the links given on the command line to appear */
|
/* wait for all the links given on the command line to appear */
|
||||||
HASHMAP_FOREACH_KEY(p, ifname, m->interfaces, i) {
|
HASHMAP_FOREACH_KEY(p, ifname, m->interfaces) {
|
||||||
LinkOperationalStateRange *range = p;
|
LinkOperationalStateRange *range = p;
|
||||||
|
|
||||||
l = hashmap_get(m->links_by_name, ifname);
|
l = hashmap_get(m->links_by_name, ifname);
|
||||||
|
@ -106,7 +105,7 @@ bool manager_configured(Manager *m) {
|
||||||
|
|
||||||
/* wait for all links networkd manages to be in admin state 'configured'
|
/* wait for all links networkd manages to be in admin state 'configured'
|
||||||
* and at least one link to gain a carrier */
|
* and at least one link to gain a carrier */
|
||||||
HASHMAP_FOREACH(l, m->links, i) {
|
HASHMAP_FOREACH(l, m->links) {
|
||||||
if (manager_ignore_link(m, l)) {
|
if (manager_ignore_link(m, l)) {
|
||||||
log_link_debug(l, "link is ignored");
|
log_link_debug(l, "link is ignored");
|
||||||
continue;
|
continue;
|
||||||
|
@ -255,7 +254,6 @@ static int manager_rtnl_listen(Manager *m) {
|
||||||
|
|
||||||
static int on_network_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
|
static int on_network_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
|
||||||
Manager *m = userdata;
|
Manager *m = userdata;
|
||||||
Iterator i;
|
|
||||||
Link *l;
|
Link *l;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -263,7 +261,7 @@ static int on_network_event(sd_event_source *s, int fd, uint32_t revents, void *
|
||||||
|
|
||||||
sd_network_monitor_flush(m->network_monitor);
|
sd_network_monitor_flush(m->network_monitor);
|
||||||
|
|
||||||
HASHMAP_FOREACH(l, m->links, i) {
|
HASHMAP_FOREACH(l, m->links) {
|
||||||
r = link_update_monitor(l);
|
r = link_update_monitor(l);
|
||||||
if (r < 0 && r != -ENODATA)
|
if (r < 0 && r != -ENODATA)
|
||||||
log_link_warning_errno(l, r, "Failed to update link state, ignoring: %m");
|
log_link_warning_errno(l, r, "Failed to update link state, ignoring: %m");
|
||||||
|
|
|
@ -103,7 +103,6 @@ static int compare_metadata(PortableMetadata *const *x, PortableMetadata *const
|
||||||
int portable_metadata_hashmap_to_sorted_array(Hashmap *unit_files, PortableMetadata ***ret) {
|
int portable_metadata_hashmap_to_sorted_array(Hashmap *unit_files, PortableMetadata ***ret) {
|
||||||
|
|
||||||
_cleanup_free_ PortableMetadata **sorted = NULL;
|
_cleanup_free_ PortableMetadata **sorted = NULL;
|
||||||
Iterator iterator;
|
|
||||||
PortableMetadata *item;
|
PortableMetadata *item;
|
||||||
size_t k = 0;
|
size_t k = 0;
|
||||||
|
|
||||||
|
@ -111,7 +110,7 @@ int portable_metadata_hashmap_to_sorted_array(Hashmap *unit_files, PortableMetad
|
||||||
if (!sorted)
|
if (!sorted)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
HASHMAP_FOREACH(item, unit_files, iterator)
|
HASHMAP_FOREACH(item, unit_files)
|
||||||
sorted[k++] = item;
|
sorted[k++] = item;
|
||||||
|
|
||||||
assert(k == hashmap_size(unit_files));
|
assert(k == hashmap_size(unit_files));
|
||||||
|
@ -987,7 +986,6 @@ int portable_attach(
|
||||||
_cleanup_(lookup_paths_free) LookupPaths paths = {};
|
_cleanup_(lookup_paths_free) LookupPaths paths = {};
|
||||||
_cleanup_(image_unrefp) Image *image = NULL;
|
_cleanup_(image_unrefp) Image *image = NULL;
|
||||||
PortableMetadata *item;
|
PortableMetadata *item;
|
||||||
Iterator iterator;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(name_or_path);
|
assert(name_or_path);
|
||||||
|
@ -1004,7 +1002,7 @@ int portable_attach(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
HASHMAP_FOREACH(item, unit_files, iterator) {
|
HASHMAP_FOREACH(item, unit_files) {
|
||||||
r = unit_file_exists(UNIT_FILE_SYSTEM, &paths, item->name);
|
r = unit_file_exists(UNIT_FILE_SYSTEM, &paths, item->name);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return sd_bus_error_set_errnof(error, r, "Failed to determine whether unit '%s' exists on the host: %m", item->name);
|
return sd_bus_error_set_errnof(error, r, "Failed to determine whether unit '%s' exists on the host: %m", item->name);
|
||||||
|
@ -1018,7 +1016,7 @@ int portable_attach(
|
||||||
return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active already, refusing.", item->name);
|
return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active already, refusing.", item->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
HASHMAP_FOREACH(item, unit_files, iterator) {
|
HASHMAP_FOREACH(item, unit_files) {
|
||||||
r = attach_unit_file(&paths, image->path, image->type, item, profile, flags, changes, n_changes);
|
r = attach_unit_file(&paths, image->path, image->type, item, profile, flags, changes, n_changes);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -1140,7 +1138,6 @@ int portable_detach(
|
||||||
_cleanup_set_free_ Set *unit_files = NULL, *markers = NULL;
|
_cleanup_set_free_ Set *unit_files = NULL, *markers = NULL;
|
||||||
_cleanup_closedir_ DIR *d = NULL;
|
_cleanup_closedir_ DIR *d = NULL;
|
||||||
const char *where, *item;
|
const char *where, *item;
|
||||||
Iterator iterator;
|
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int r;
|
int r;
|
||||||
|
@ -1210,7 +1207,7 @@ int portable_detach(
|
||||||
if (set_isempty(unit_files))
|
if (set_isempty(unit_files))
|
||||||
goto not_found;
|
goto not_found;
|
||||||
|
|
||||||
SET_FOREACH(item, unit_files, iterator) {
|
SET_FOREACH(item, unit_files) {
|
||||||
_cleanup_free_ char *md = NULL;
|
_cleanup_free_ char *md = NULL;
|
||||||
const char *suffix;
|
const char *suffix;
|
||||||
|
|
||||||
|
@ -1252,7 +1249,7 @@ int portable_detach(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now, also drop any image symlink, for images outside of the sarch path */
|
/* Now, also drop any image symlink, for images outside of the sarch path */
|
||||||
SET_FOREACH(item, markers, iterator) {
|
SET_FOREACH(item, markers) {
|
||||||
_cleanup_free_ char *sl = NULL;
|
_cleanup_free_ char *sl = NULL;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue