diff options
| author | Russ White <russ@riw.us> | 2020-01-28 11:42:45 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-28 11:42:45 -0500 |
| commit | b27b58be24d3f6f1cb8b8375544007fdfcfef9b3 (patch) | |
| tree | 5cd863d056387c599a3e7f1137bd5f332ac82f8d | |
| parent | 1746db70adeca9daa1e39da0031dab061089cb69 (diff) | |
| parent | 2d48474e03798c6bf5281301fa818b94a0b5597d (diff) | |
Merge pull request #4773 from thozza/31-prefix-bcast-addr
ipv4_broadcast_addr() didn't comply with RFC3021
| -rw-r--r-- | lib/prefix.c | 10 | ||||
| -rw-r--r-- | lib/prefix.h | 3 |
2 files changed, 6 insertions, 7 deletions
diff --git a/lib/prefix.c b/lib/prefix.c index 219f798dcc..806df0b4c6 100644 --- a/lib/prefix.c +++ b/lib/prefix.c @@ -1113,11 +1113,11 @@ in_addr_t ipv4_broadcast_addr(in_addr_t hostaddr, int masklen) masklen2ip(masklen, &mask); return (masklen != IPV4_MAX_PREFIXLEN - 1) ? - /* normal case */ - (hostaddr | ~mask.s_addr) - : - /* special case for /31 */ - (hostaddr ^ ~mask.s_addr); + /* normal case */ + (hostaddr | ~mask.s_addr) + : + /* For prefix 31 return 255.255.255.255 (RFC3021) */ + htonl(0xFFFFFFFF); } /* Utility function to convert ipv4 netmask to prefixes diff --git a/lib/prefix.h b/lib/prefix.h index 667627ddfe..fb80c4ca6c 100644 --- a/lib/prefix.h +++ b/lib/prefix.h @@ -451,8 +451,7 @@ extern uint8_t ip_masklen(struct in_addr); extern void masklen2ip(const int, struct in_addr *); /* given the address of a host on a network and the network mask length, * calculate the broadcast address for that network; - * special treatment for /31: returns the address of the other host - * on the network by flipping the host bit */ + * special treatment for /31 according to RFC3021 section 3.3 */ extern in_addr_t ipv4_broadcast_addr(in_addr_t hostaddr, int masklen); extern int netmask_str2prefix_str(const char *, const char *, char *); |
