diff options
author | Lukas Nykryn <lnykryn@redhat.com> | 2013-09-02 14:39:42 +0200 |
---|---|---|
committer | Lukas Nykryn <lnykryn@redhat.com> | 2013-09-02 14:41:28 +0200 |
commit | 851a3edfad781cd2267822509eaa4634189b09d6 (patch) | |
tree | 43615acb67ae77792b03771fba24cad843322cb7 | |
parent | f70f47365137b703172f5b0e605ad167421f1291 (diff) | |
download | initscripts-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.c | 7 |
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; } |