lifecycle: refactor address handling a little
This commit is contained in:
parent
de94c2a5a4
commit
95d26df34c
1 changed files with 21 additions and 20 deletions
|
@ -43,6 +43,17 @@ handle_commands_for_phase(const struct lif_execute_opts *opts, char *const envp[
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
handle_address(const struct lif_execute_opts *opts, struct lif_address *addr, const char *cmd, const char *lifname)
|
||||||
|
{
|
||||||
|
char addrbuf[4096];
|
||||||
|
|
||||||
|
if (!lif_address_unparse(addr, addrbuf, sizeof addrbuf, true))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return lif_execute_fmt(opts, NULL, "/sbin/ip addr %s %s dev %s", cmd, addrbuf, lifname);
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
handle_pre_up(const struct lif_execute_opts *opts, struct lif_interface *iface, const char *lifname)
|
handle_pre_up(const struct lif_execute_opts *opts, struct lif_interface *iface, const char *lifname)
|
||||||
{
|
{
|
||||||
|
@ -68,17 +79,12 @@ handle_up(const struct lif_execute_opts *opts, struct lif_interface *iface, cons
|
||||||
{
|
{
|
||||||
struct lif_dict_entry *entry = iter->data;
|
struct lif_dict_entry *entry = iter->data;
|
||||||
|
|
||||||
if (strcmp(entry->key, "address"))
|
if (!strcmp(entry->key, "address"))
|
||||||
continue;
|
{
|
||||||
|
|
||||||
struct lif_address *addr = entry->data;
|
struct lif_address *addr = entry->data;
|
||||||
char addrbuf[4096];
|
|
||||||
|
|
||||||
if (!lif_address_unparse(addr, addrbuf, sizeof addrbuf, true))
|
handle_address(opts, addr, "add", lifname);
|
||||||
return false;
|
}
|
||||||
|
|
||||||
if (!lif_execute_fmt(opts, NULL, "/sbin/ip addr add %s dev %s", addrbuf, lifname))
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iface->is_dhcp)
|
if (iface->is_dhcp)
|
||||||
|
@ -103,17 +109,12 @@ handle_down(const struct lif_execute_opts *opts, struct lif_interface *iface, co
|
||||||
{
|
{
|
||||||
struct lif_dict_entry *entry = iter->data;
|
struct lif_dict_entry *entry = iter->data;
|
||||||
|
|
||||||
if (strcmp(entry->key, "address"))
|
if (!strcmp(entry->key, "address"))
|
||||||
continue;
|
{
|
||||||
|
|
||||||
struct lif_address *addr = entry->data;
|
struct lif_address *addr = entry->data;
|
||||||
char addrbuf[4096];
|
|
||||||
|
|
||||||
if (!lif_address_unparse(addr, addrbuf, sizeof addrbuf, true))
|
handle_address(opts, addr, "del", lifname);
|
||||||
return false;
|
}
|
||||||
|
|
||||||
if (!lif_execute_fmt(opts, NULL, "/sbin/ip addr del %s dev %s", addrbuf, lifname))
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iface->is_dhcp)
|
if (iface->is_dhcp)
|
||||||
|
|
Loading…
Reference in a new issue