network: do not update Address::flags in address_configure()
This commit is contained in:
parent
f5ee7d74af
commit
eaff204f09
|
@ -48,7 +48,6 @@ int address_new(Address **ret) {
|
||||||
.cinfo.ifa_prefered = CACHE_INFO_INFINITY_LIFE_TIME,
|
.cinfo.ifa_prefered = CACHE_INFO_INFINITY_LIFE_TIME,
|
||||||
.cinfo.ifa_valid = CACHE_INFO_INFINITY_LIFE_TIME,
|
.cinfo.ifa_valid = CACHE_INFO_INFINITY_LIFE_TIME,
|
||||||
.duplicate_address_detection = ADDRESS_FAMILY_IPV6,
|
.duplicate_address_detection = ADDRESS_FAMILY_IPV6,
|
||||||
.prefix_route = true,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
*ret = TAKE_PTR(address);
|
*ret = TAKE_PTR(address);
|
||||||
|
@ -754,6 +753,7 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
na->flags = original->flags;
|
||||||
na->family = original->family;
|
na->family = original->family;
|
||||||
na->prefixlen = original->prefixlen;
|
na->prefixlen = original->prefixlen;
|
||||||
na->scope = original->scope;
|
na->scope = original->scope;
|
||||||
|
@ -787,6 +787,7 @@ int address_configure(
|
||||||
|
|
||||||
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
|
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
|
||||||
Address *acquired_address, *a;
|
Address *acquired_address, *a;
|
||||||
|
uint32_t flags;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(address);
|
assert(address);
|
||||||
|
@ -829,29 +830,13 @@ int address_configure(
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_link_error_errno(link, r, "Could not set prefixlen: %m");
|
return log_link_error_errno(link, r, "Could not set prefixlen: %m");
|
||||||
|
|
||||||
address->flags |= IFA_F_PERMANENT;
|
flags = address->flags | IFA_F_PERMANENT;
|
||||||
|
r = sd_rtnl_message_addr_set_flags(req, flags & 0xff);
|
||||||
if (address->home_address)
|
|
||||||
address->flags |= IFA_F_HOMEADDRESS;
|
|
||||||
|
|
||||||
if (!FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6))
|
|
||||||
address->flags |= IFA_F_NODAD;
|
|
||||||
|
|
||||||
if (address->manage_temporary_address)
|
|
||||||
address->flags |= IFA_F_MANAGETEMPADDR;
|
|
||||||
|
|
||||||
if (!address->prefix_route)
|
|
||||||
address->flags |= IFA_F_NOPREFIXROUTE;
|
|
||||||
|
|
||||||
if (address->autojoin)
|
|
||||||
address->flags |= IFA_F_MCAUTOJOIN;
|
|
||||||
|
|
||||||
r = sd_rtnl_message_addr_set_flags(req, (address->flags & 0xff));
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_link_error_errno(link, r, "Could not set flags: %m");
|
return log_link_error_errno(link, r, "Could not set flags: %m");
|
||||||
|
|
||||||
if (address->flags & ~0xff) {
|
if (flags & ~0xff) {
|
||||||
r = sd_netlink_message_append_u32(req, IFA_FLAGS, address->flags);
|
r = sd_netlink_message_append_u32(req, IFA_FLAGS, flags);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_link_error_errno(link, r, "Could not set extended flags: %m");
|
return log_link_error_errno(link, r, "Could not set extended flags: %m");
|
||||||
}
|
}
|
||||||
|
@ -1707,18 +1692,10 @@ int config_parse_address_flags(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (streq(lvalue, "HomeAddress"))
|
if (streq(lvalue, "AddPrefixRoute"))
|
||||||
n->home_address = r;
|
r = !r;
|
||||||
else if (streq(lvalue, "ManageTemporaryAddress"))
|
|
||||||
n->manage_temporary_address = r;
|
SET_FLAG(n->flags, ltype, r);
|
||||||
else if (streq(lvalue, "PrefixRoute"))
|
|
||||||
n->prefix_route = !r;
|
|
||||||
else if (streq(lvalue, "AddPrefixRoute"))
|
|
||||||
n->prefix_route = r;
|
|
||||||
else if (streq(lvalue, "AutoJoin"))
|
|
||||||
n->autojoin = r;
|
|
||||||
else
|
|
||||||
assert_not_reached("Invalid address flag type.");
|
|
||||||
|
|
||||||
n = NULL;
|
n = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1852,6 +1829,9 @@ static int address_section_verify(Address *address) {
|
||||||
if (!address->scope_set && in_addr_is_localhost(address->family, &address->in_addr) > 0)
|
if (!address->scope_set && in_addr_is_localhost(address->family, &address->in_addr) > 0)
|
||||||
address->scope = RT_SCOPE_HOST;
|
address->scope = RT_SCOPE_HOST;
|
||||||
|
|
||||||
|
if (!FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6))
|
||||||
|
address->flags |= IFA_F_NODAD;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,10 +38,6 @@ typedef struct Address {
|
||||||
|
|
||||||
bool scope_set:1;
|
bool scope_set:1;
|
||||||
bool ip_masquerade_done:1;
|
bool ip_masquerade_done:1;
|
||||||
bool manage_temporary_address:1;
|
|
||||||
bool home_address:1;
|
|
||||||
bool prefix_route:1;
|
|
||||||
bool autojoin:1;
|
|
||||||
AddressFamily duplicate_address_detection;
|
AddressFamily duplicate_address_detection;
|
||||||
|
|
||||||
/* Called when address become ready */
|
/* Called when address become ready */
|
||||||
|
|
|
@ -815,7 +815,7 @@ static int dhcp4_update_address(Link *link, bool announce) {
|
||||||
addr->cinfo.ifa_valid = lifetime;
|
addr->cinfo.ifa_valid = lifetime;
|
||||||
addr->prefixlen = prefixlen;
|
addr->prefixlen = prefixlen;
|
||||||
addr->broadcast.s_addr = address.s_addr | ~netmask.s_addr;
|
addr->broadcast.s_addr = address.s_addr | ~netmask.s_addr;
|
||||||
addr->prefix_route = link_prefixroute(link);
|
SET_FLAG(addr->flags, IFA_F_NOPREFIXROUTE, !link_prefixroute(link));
|
||||||
|
|
||||||
/* allow reusing an existing address and simply update its lifetime
|
/* allow reusing an existing address and simply update its lifetime
|
||||||
* in case it already exists */
|
* in case it already exists */
|
||||||
|
|
|
@ -131,11 +131,11 @@ Address.Peer, config_parse_address,
|
||||||
Address.Broadcast, config_parse_broadcast, 0, 0
|
Address.Broadcast, config_parse_broadcast, 0, 0
|
||||||
Address.Label, config_parse_label, 0, 0
|
Address.Label, config_parse_label, 0, 0
|
||||||
Address.PreferredLifetime, config_parse_lifetime, 0, 0
|
Address.PreferredLifetime, config_parse_lifetime, 0, 0
|
||||||
Address.HomeAddress, config_parse_address_flags, 0, 0
|
Address.HomeAddress, config_parse_address_flags, IFA_F_HOMEADDRESS, 0
|
||||||
Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0
|
Address.ManageTemporaryAddress, config_parse_address_flags, IFA_F_MANAGETEMPADDR, 0
|
||||||
Address.PrefixRoute, config_parse_address_flags, 0, 0 /* deprecated */
|
Address.PrefixRoute, config_parse_address_flags, IFA_F_NOPREFIXROUTE, 0 /* deprecated */
|
||||||
Address.AddPrefixRoute, config_parse_address_flags, 0, 0
|
Address.AddPrefixRoute, config_parse_address_flags, IFA_F_NOPREFIXROUTE, 0
|
||||||
Address.AutoJoin, config_parse_address_flags, 0, 0
|
Address.AutoJoin, config_parse_address_flags, IFA_F_MCAUTOJOIN, 0
|
||||||
Address.DuplicateAddressDetection, config_parse_duplicate_address_detection, 0, 0
|
Address.DuplicateAddressDetection, config_parse_duplicate_address_detection, 0, 0
|
||||||
Address.Scope, config_parse_address_scope, 0, 0
|
Address.Scope, config_parse_address_scope, 0, 0
|
||||||
IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0
|
IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0
|
||||||
|
|
Loading…
Reference in New Issue