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_valid = CACHE_INFO_INFINITY_LIFE_TIME,
|
||||
.duplicate_address_detection = ADDRESS_FAMILY_IPV6,
|
||||
.prefix_route = true,
|
||||
};
|
||||
|
||||
*ret = TAKE_PTR(address);
|
||||
|
@ -754,6 +753,7 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
na->flags = original->flags;
|
||||
na->family = original->family;
|
||||
na->prefixlen = original->prefixlen;
|
||||
na->scope = original->scope;
|
||||
|
@ -787,6 +787,7 @@ int address_configure(
|
|||
|
||||
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
|
||||
Address *acquired_address, *a;
|
||||
uint32_t flags;
|
||||
int r;
|
||||
|
||||
assert(address);
|
||||
|
@ -829,29 +830,13 @@ int address_configure(
|
|||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not set prefixlen: %m");
|
||||
|
||||
address->flags |= IFA_F_PERMANENT;
|
||||
|
||||
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));
|
||||
flags = address->flags | IFA_F_PERMANENT;
|
||||
r = sd_rtnl_message_addr_set_flags(req, flags & 0xff);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not set flags: %m");
|
||||
|
||||
if (address->flags & ~0xff) {
|
||||
r = sd_netlink_message_append_u32(req, IFA_FLAGS, address->flags);
|
||||
if (flags & ~0xff) {
|
||||
r = sd_netlink_message_append_u32(req, IFA_FLAGS, flags);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not set extended flags: %m");
|
||||
}
|
||||
|
@ -1707,18 +1692,10 @@ int config_parse_address_flags(
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (streq(lvalue, "HomeAddress"))
|
||||
n->home_address = r;
|
||||
else if (streq(lvalue, "ManageTemporaryAddress"))
|
||||
n->manage_temporary_address = 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.");
|
||||
if (streq(lvalue, "AddPrefixRoute"))
|
||||
r = !r;
|
||||
|
||||
SET_FLAG(n->flags, ltype, r);
|
||||
|
||||
n = NULL;
|
||||
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)
|
||||
address->scope = RT_SCOPE_HOST;
|
||||
|
||||
if (!FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6))
|
||||
address->flags |= IFA_F_NODAD;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,10 +38,6 @@ typedef struct Address {
|
|||
|
||||
bool scope_set: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;
|
||||
|
||||
/* Called when address become ready */
|
||||
|
|
|
@ -815,7 +815,7 @@ static int dhcp4_update_address(Link *link, bool announce) {
|
|||
addr->cinfo.ifa_valid = lifetime;
|
||||
addr->prefixlen = prefixlen;
|
||||
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
|
||||
* in case it already exists */
|
||||
|
|
|
@ -131,11 +131,11 @@ Address.Peer, config_parse_address,
|
|||
Address.Broadcast, config_parse_broadcast, 0, 0
|
||||
Address.Label, config_parse_label, 0, 0
|
||||
Address.PreferredLifetime, config_parse_lifetime, 0, 0
|
||||
Address.HomeAddress, config_parse_address_flags, 0, 0
|
||||
Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0
|
||||
Address.PrefixRoute, config_parse_address_flags, 0, 0 /* deprecated */
|
||||
Address.AddPrefixRoute, config_parse_address_flags, 0, 0
|
||||
Address.AutoJoin, config_parse_address_flags, 0, 0
|
||||
Address.HomeAddress, config_parse_address_flags, IFA_F_HOMEADDRESS, 0
|
||||
Address.ManageTemporaryAddress, config_parse_address_flags, IFA_F_MANAGETEMPADDR, 0
|
||||
Address.PrefixRoute, config_parse_address_flags, IFA_F_NOPREFIXROUTE, 0 /* deprecated */
|
||||
Address.AddPrefixRoute, config_parse_address_flags, IFA_F_NOPREFIXROUTE, 0
|
||||
Address.AutoJoin, config_parse_address_flags, IFA_F_MCAUTOJOIN, 0
|
||||
Address.DuplicateAddressDetection, config_parse_duplicate_address_detection, 0, 0
|
||||
Address.Scope, config_parse_address_scope, 0, 0
|
||||
IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0
|
||||
|
|
Loading…
Reference in New Issue