state: add ability to sync a state to if_collection cache
This commit is contained in:
parent
a3c138b9b2
commit
e0a7444640
3 changed files with 25 additions and 2 deletions
|
@ -170,13 +170,19 @@ ifupdown_main(int argc, char *argv[])
|
||||||
|
|
||||||
if (!lif_state_read_path(&state, state_file))
|
if (!lif_state_read_path(&state, state_file))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "ifquery: could not parse %s\n", state_file);
|
fprintf(stderr, "%s: could not parse %s\n", argv0, state_file);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lif_interface_file_parse(&collection, interfaces_file))
|
if (!lif_interface_file_parse(&collection, interfaces_file))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "ifquery: could not parse %s\n", interfaces_file);
|
fprintf(stderr, "%s: could not parse %s\n", argv0, interfaces_file);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lif_state_sync(&state, &collection))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: could not sync state\n", argv0);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,3 +114,19 @@ lif_state_lookup(struct lif_dict *state, struct lif_dict *if_collection, const c
|
||||||
|
|
||||||
return if_entry->data;
|
return if_entry->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
lif_state_sync(struct lif_dict *state, struct lif_dict *if_collection)
|
||||||
|
{
|
||||||
|
struct lif_node *iter;
|
||||||
|
|
||||||
|
LIF_DICT_FOREACH(iter, state)
|
||||||
|
{
|
||||||
|
struct lif_dict_entry *entry = iter->data;
|
||||||
|
struct lif_interface *iface = lif_interface_collection_find(if_collection, entry->key);
|
||||||
|
|
||||||
|
iface->is_up = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -26,5 +26,6 @@ extern void lif_state_delete(struct lif_dict *state, const char *ifname);
|
||||||
extern void lif_state_write(const struct lif_dict *state, FILE *f);
|
extern void lif_state_write(const struct lif_dict *state, FILE *f);
|
||||||
extern bool lif_state_write_path(const struct lif_dict *state, const char *path);
|
extern bool lif_state_write_path(const struct lif_dict *state, const char *path);
|
||||||
extern struct lif_interface *lif_state_lookup(struct lif_dict *state, struct lif_dict *if_collection, const char *ifname);
|
extern struct lif_interface *lif_state_lookup(struct lif_dict *state, struct lif_dict *if_collection, const char *ifname);
|
||||||
|
extern bool lif_state_sync(struct lif_dict *state, struct lif_dict *if_collection);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue