lifecycle: return the maximum tree depth for the dependency tree when counting depth
This commit is contained in:
parent
8c8727e30f
commit
258e2e8a52
4 changed files with 18 additions and 6 deletions
|
@ -290,7 +290,7 @@ ifquery_main(int argc, char *argv[])
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lif_lifecycle_count_rdepends(&exec_opts, &collection))
|
if (lif_lifecycle_count_rdepends(&exec_opts, &collection) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: could not validate dependency tree\n", argv0);
|
fprintf(stderr, "%s: could not validate dependency tree\n", argv0);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
|
@ -229,7 +229,7 @@ ifupdown_main(int argc, char *argv[])
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lif_lifecycle_count_rdepends(&exec_opts, &collection))
|
if (lif_lifecycle_count_rdepends(&exec_opts, &collection) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: could not validate dependency tree\n", argv0);
|
fprintf(stderr, "%s: could not validate dependency tree\n", argv0);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
|
@ -419,7 +419,7 @@ count_interface_rdepends(const struct lif_execute_opts *opts, struct lif_dict *c
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
ssize_t
|
||||||
lif_lifecycle_count_rdepends(const struct lif_execute_opts *opts, struct lif_dict *collection)
|
lif_lifecycle_count_rdepends(const struct lif_execute_opts *opts, struct lif_dict *collection)
|
||||||
{
|
{
|
||||||
struct lif_node *iter;
|
struct lif_node *iter;
|
||||||
|
@ -435,9 +435,21 @@ lif_lifecycle_count_rdepends(const struct lif_execute_opts *opts, struct lif_dic
|
||||||
if (!count_interface_rdepends(opts, collection, iface, iface->rdepends_count))
|
if (!count_interface_rdepends(opts, collection, iface, iface->rdepends_count))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "ifupdown: dependency graph is broken for interface %s\n", iface->ifname);
|
fprintf(stderr, "ifupdown: dependency graph is broken for interface %s\n", iface->ifname);
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
/* figure out the max depth */
|
||||||
|
size_t maxdepth = 0;
|
||||||
|
|
||||||
|
LIF_DICT_FOREACH(iter, collection)
|
||||||
|
{
|
||||||
|
struct lif_dict_entry *entry = iter->data;
|
||||||
|
struct lif_interface *iface = entry->data;
|
||||||
|
|
||||||
|
if (iface->rdepends_count > maxdepth)
|
||||||
|
maxdepth = iface->rdepends_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxdepth;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
extern bool lif_lifecycle_query_dependents(const struct lif_execute_opts *opts, struct lif_interface *iface, const char *lifname);
|
extern bool lif_lifecycle_query_dependents(const struct lif_execute_opts *opts, struct lif_interface *iface, const char *lifname);
|
||||||
extern bool lif_lifecycle_run_phase(const struct lif_execute_opts *opts, struct lif_interface *iface, const char *phase, const char *lifname, bool up);
|
extern bool lif_lifecycle_run_phase(const struct lif_execute_opts *opts, struct lif_interface *iface, const char *phase, const char *lifname, bool up);
|
||||||
extern bool lif_lifecycle_run(const struct lif_execute_opts *opts, struct lif_interface *iface, struct lif_dict *collection, struct lif_dict *state, const char *lifname, bool up);
|
extern bool lif_lifecycle_run(const struct lif_execute_opts *opts, struct lif_interface *iface, struct lif_dict *collection, struct lif_dict *state, const char *lifname, bool up);
|
||||||
extern bool lif_lifecycle_count_rdepends(const struct lif_execute_opts *opts, struct lif_dict *collection);
|
extern ssize_t lif_lifecycle_count_rdepends(const struct lif_execute_opts *opts, struct lif_dict *collection);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue