fix for issue 4026: set broadcast to 0.0.0.0 for /31 and /32

Signed-off-by: Marc E. Fiuczynski <mfiuczyn@akamai.com>
This commit is contained in:
Marc E. Fiuczynski 2022-06-13 08:43:14 -04:00
parent f5420c9d3f
commit 26de6cbc8d

View File

@ -899,13 +899,19 @@ static int set_config_net_ipv4_address(const char *key, const char *value,
/* If no broadcast address, compute one from the prefix and address. */
if (!bcast) {
unsigned int shift = LAST_BIT_PER_TYPE(inetdev->prefix);
/* 0<=inetdev->prefix<=32 */
switch (inetdev->prefix) {
case 32: /* single IPv4 network */
; /* fall thru */
case 31: /* RFC 3021 point to point network */
inetdev->bcast.s_addr = INADDR_ANY;
break;
inetdev->bcast.s_addr = inetdev->addr.s_addr;
if (inetdev->prefix < shift)
shift = inetdev->prefix;
inetdev->bcast.s_addr |= htonl(INADDR_BROADCAST >> shift);
}
default:
inetdev->bcast.s_addr |= htonl(INADDR_BROADCAST >> inetdev->prefix);
break;
}
}
list_add_tail(&inetdev->head, &netdev->ipv4_addresses);
move_ptr(inetdev);