Blame SOURCES/0002-add-support-for-RFC3021.patch

94b052
diff --git a/ipcalc.c b/ipcalc.c
94b052
index f2bc47a..04c9372 100644
94b052
--- a/ipcalc.c
94b052
+++ b/ipcalc.c
94b052
@@ -146,7 +146,12 @@ static struct in_addr calc_broadcast(struct in_addr addr, int prefix)
94b052
 	mask.s_addr = prefix2mask(prefix);
94b052
 
94b052
 	memset(&broadcast, 0, sizeof(broadcast));
94b052
-	broadcast.s_addr = (addr.s_addr & mask.s_addr) | ~mask.s_addr;
94b052
+
94b052
+	/* if prefix is set to 31 return 255.255.255.255 (RFC3021) */
94b052
+	if (mask.s_addr ==  htonl(0xFFFFFFFE))
94b052
+		broadcast.s_addr = htonl(0xFFFFFFFF);
94b052
+	else
94b052
+		broadcast.s_addr = (addr.s_addr & mask.s_addr) | ~mask.s_addr;
94b052
 	return broadcast;
94b052
 }
94b052
 
94b052
diff --git a/tests/192.168.1.5-31 b/tests/192.168.1.5-31
94b052
index fee8227..b720b56 100644
94b052
--- a/tests/192.168.1.5-31
94b052
+++ b/tests/192.168.1.5-31
94b052
@@ -1,4 +1,4 @@
94b052
 NETMASK=255.255.255.254
94b052
 PREFIX=31
94b052
-BROADCAST=192.168.1.5
94b052
+BROADCAST=255.255.255.255
94b052
 NETWORK=192.168.1.4