You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
842 B
29 lines
842 B
diff --git a/ipcalc.c b/ipcalc.c
|
|
index f2bc47a..04c9372 100644
|
|
--- a/ipcalc.c
|
|
+++ b/ipcalc.c
|
|
@@ -146,7 +146,12 @@ static struct in_addr calc_broadcast(struct in_addr addr, int prefix)
|
|
mask.s_addr = prefix2mask(prefix);
|
|
|
|
memset(&broadcast, 0, sizeof(broadcast));
|
|
- broadcast.s_addr = (addr.s_addr & mask.s_addr) | ~mask.s_addr;
|
|
+
|
|
+ /* if prefix is set to 31 return 255.255.255.255 (RFC3021) */
|
|
+ if (mask.s_addr == htonl(0xFFFFFFFE))
|
|
+ broadcast.s_addr = htonl(0xFFFFFFFF);
|
|
+ else
|
|
+ broadcast.s_addr = (addr.s_addr & mask.s_addr) | ~mask.s_addr;
|
|
return broadcast;
|
|
}
|
|
|
|
diff --git a/tests/192.168.1.5-31 b/tests/192.168.1.5-31
|
|
index fee8227..b720b56 100644
|
|
--- a/tests/192.168.1.5-31
|
|
+++ b/tests/192.168.1.5-31
|
|
@@ -1,4 +1,4 @@
|
|
NETMASK=255.255.255.254
|
|
PREFIX=31
|
|
-BROADCAST=192.168.1.5
|
|
+BROADCAST=255.255.255.255
|
|
NETWORK=192.168.1.4
|