network: do not set broadcast if prefixlen is 31 or 32

After fe841414ef, broadcast address is
also compared with existing one to determine whether the address is
foregin or not. So, the address object should not contain unnecessary
information.

Fixes #17803.
This commit is contained in:
Yu Watanabe 2020-12-02 19:19:06 +09:00
parent 565147b7bb
commit df8aa08642
1 changed files with 2 additions and 1 deletions

View File

@ -865,7 +865,8 @@ static int dhcp4_update_address(Link *link, bool announce) {
addr->cinfo.ifa_prefered = lifetime;
addr->cinfo.ifa_valid = lifetime;
addr->prefixlen = prefixlen;
addr->broadcast.s_addr = address.s_addr | ~netmask.s_addr;
if (prefixlen <= 30)
addr->broadcast.s_addr = address.s_addr | ~netmask.s_addr;
SET_FLAG(addr->flags, IFA_F_NOPREFIXROUTE, !link_prefixroute(link));
/* allow reusing an existing address and simply update its lifetime