aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Nykryn <lnykryn@redhat.com>2013-09-02 14:39:42 +0200
committerLukas Nykryn <lnykryn@redhat.com>2013-09-02 14:41:28 +0200
commit851a3edfad781cd2267822509eaa4634189b09d6 (patch)
tree43615acb67ae77792b03771fba24cad843322cb7
parentf70f47365137b703172f5b0e605ad167421f1291 (diff)
downloadinitscripts-851a3edfad781cd2267822509eaa4634189b09d6.tar
initscripts-851a3edfad781cd2267822509eaa4634189b09d6.tar.gz
initscripts-851a3edfad781cd2267822509eaa4634189b09d6.tar.bz2
initscripts-851a3edfad781cd2267822509eaa4634189b09d6.tar.xz
initscripts-851a3edfad781cd2267822509eaa4634189b09d6.zip
ipcalc: support RFC3021 (#997271)
-rw-r--r--src/ipcalc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/ipcalc.c b/src/ipcalc.c
index 7316f058..bec14eb5 100644
--- a/src/ipcalc.c
+++ b/src/ipcalc.c
@@ -141,7 +141,12 @@ struct in_addr calc_broadcast(struct in_addr addr, int prefix)
struct in_addr broadcast;
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;
}