networkd: address - merge _change() into _configure()
These functions are almost entirely the same, so avoid duplication.
This commit is contained in:
parent
36c32f6120
commit
6666907869
|
@ -377,74 +377,6 @@ int address_remove(Address *address, Link *link,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int address_change(Address *address, Link *link,
|
||||
sd_netlink_message_handler_t callback) {
|
||||
_cleanup_netlink_message_unref_ sd_netlink_message *req = NULL;
|
||||
int r;
|
||||
|
||||
assert(address);
|
||||
assert(address->family == AF_INET || address->family == AF_INET6);
|
||||
assert(link->ifindex > 0);
|
||||
assert(link->manager);
|
||||
assert(link->manager->rtnl);
|
||||
|
||||
r = sd_rtnl_message_new_addr_update(link->manager->rtnl, &req,
|
||||
link->ifindex, address->family);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not allocate RTM_NEWADDR message: %m");
|
||||
|
||||
r = sd_rtnl_message_addr_set_prefixlen(req, address->prefixlen);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not set prefixlen: %m");
|
||||
|
||||
address->flags |= IFA_F_PERMANENT;
|
||||
|
||||
r = sd_rtnl_message_addr_set_flags(req, address->flags & 0xff);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not set flags: %m");
|
||||
|
||||
if (address->flags & ~0xff && link->rtnl_extended_attrs) {
|
||||
r = sd_netlink_message_append_u32(req, IFA_FLAGS, address->flags);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not set extended flags: %m");
|
||||
}
|
||||
|
||||
r = sd_rtnl_message_addr_set_scope(req, address->scope);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not set scope: %m");
|
||||
|
||||
if (address->family == AF_INET)
|
||||
r = sd_netlink_message_append_in_addr(req, IFA_LOCAL, &address->in_addr.in);
|
||||
else if (address->family == AF_INET6)
|
||||
r = sd_netlink_message_append_in6_addr(req, IFA_LOCAL, &address->in_addr.in6);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not append IFA_LOCAL attribute: %m");
|
||||
|
||||
if (address->family == AF_INET) {
|
||||
r = sd_netlink_message_append_in_addr(req, IFA_BROADCAST, &address->broadcast);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not append IFA_BROADCAST attribute: %m");
|
||||
}
|
||||
|
||||
if (address->label) {
|
||||
r = sd_netlink_message_append_string(req, IFA_LABEL, address->label);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not append IFA_LABEL attribute: %m");
|
||||
}
|
||||
|
||||
r = sd_netlink_message_append_cache_info(req, IFA_CACHEINFO, &address->cinfo);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not append IFA_CACHEINFO attribute: %m");
|
||||
|
||||
r = sd_netlink_call_async(link->manager->rtnl, req, callback, link, 0, NULL);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not send rtnetlink message: %m");
|
||||
|
||||
link_ref(link);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int address_acquire(Link *link, Address *original, Address **ret) {
|
||||
union in_addr_union in_addr = {};
|
||||
struct in_addr broadcast = {};
|
||||
|
@ -504,8 +436,7 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int address_configure(Address *address, Link *link,
|
||||
sd_netlink_message_handler_t callback) {
|
||||
int address_configure(Address *address, Link *link, sd_netlink_message_handler_t callback, bool update) {
|
||||
_cleanup_netlink_message_unref_ sd_netlink_message *req = NULL;
|
||||
int r;
|
||||
|
||||
|
@ -520,8 +451,12 @@ int address_configure(Address *address, Link *link,
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_rtnl_message_new_addr(link->manager->rtnl, &req, RTM_NEWADDR,
|
||||
link->ifindex, address->family);
|
||||
if (update)
|
||||
r = sd_rtnl_message_new_addr_update(link->manager->rtnl, &req,
|
||||
link->ifindex, address->family);
|
||||
else
|
||||
r = sd_rtnl_message_new_addr(link->manager->rtnl, &req, RTM_NEWADDR,
|
||||
link->ifindex, address->family);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not allocate RTM_NEWADDR message: %m");
|
||||
|
||||
|
|
|
@ -64,8 +64,7 @@ int address_add(Link *link, int family, const union in_addr_union *in_addr, unsi
|
|||
int address_get(Link *link, int family, const union in_addr_union *in_addr, unsigned char prefixlen, Address **ret);
|
||||
int address_update(Address *address, unsigned char flags, unsigned char scope, struct ifa_cacheinfo *cinfo);
|
||||
int address_drop(Address *address);
|
||||
int address_configure(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_change(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_configure(Address *address, Link *link, sd_netlink_message_handler_t callback, bool update);
|
||||
int address_remove(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
bool address_equal(Address *a1, Address *a2);
|
||||
bool address_is_ready(const Address *a);
|
||||
|
|
|
@ -299,9 +299,9 @@ static int dhcp4_update_address(Link *link,
|
|||
addr->prefixlen = prefixlen;
|
||||
addr->broadcast.s_addr = address->s_addr | ~netmask->s_addr;
|
||||
|
||||
/* use change rather than configure so that we will update the
|
||||
* lifetime of an existing address if it has already been configured */
|
||||
r = address_change(addr, link, &dhcp4_address_handler);
|
||||
/* allow reusing an existing address and simply update its lifetime
|
||||
* in case it already exists */
|
||||
r = address_configure(addr, link, &dhcp4_address_handler, true);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ static int dhcp6_address_change(Link *link, struct in6_addr *ip6_addr,
|
|||
SD_ICMP6_ND_ADDRESS_FORMAT_VAL(addr->in_addr.in6),
|
||||
addr->prefixlen, lifetime_preferred, lifetime_valid);
|
||||
|
||||
r = address_change(addr, link, dhcp6_address_handler);
|
||||
r = address_configure(addr, link, dhcp6_address_handler, true);
|
||||
if (r < 0)
|
||||
log_link_warning_errno(link, r, "Could not assign DHCPv6 address: %m");
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ static int ipv4ll_address_claimed(sd_ipv4ll *ll, Link *link) {
|
|||
ll_addr->broadcast.s_addr = ll_addr->in_addr.in.s_addr | htonl(0xfffffffflu >> ll_addr->prefixlen);
|
||||
ll_addr->scope = RT_SCOPE_LINK;
|
||||
|
||||
r = address_configure(ll_addr, link, ipv4ll_address_handler);
|
||||
r = address_configure(ll_addr, link, ipv4ll_address_handler, false);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -743,7 +743,7 @@ static int link_enter_set_addresses(Link *link) {
|
|||
link_set_state(link, LINK_STATE_SETTING_ADDRESSES);
|
||||
|
||||
LIST_FOREACH(addresses, ad, link->network->static_addresses) {
|
||||
r = address_configure(ad, link, &address_handler);
|
||||
r = address_configure(ad, link, &address_handler, false);
|
||||
if (r < 0) {
|
||||
log_link_warning_errno(link, r, "Could not set addresses: %m");
|
||||
link_enter_failed(link);
|
||||
|
|
Loading…
Reference in a new issue