From 999cbbad76f7b58a7909f025cb136fe6972a0bb8 Mon Sep 17 00:00:00 2001 From: Keith Sklower Date: Thu, 20 Feb 1992 18:46:38 -0800 Subject: [PATCH] follow kernel convention for shortest mask SCCS-vsn: sbin/routed/tables.c 5.19 --- usr/src/sbin/routed/tables.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/usr/src/sbin/routed/tables.c b/usr/src/sbin/routed/tables.c index b0cb20608c..37e007297d 100644 --- a/usr/src/sbin/routed/tables.c +++ b/usr/src/sbin/routed/tables.c @@ -6,7 +6,7 @@ */ #ifndef lint -static char sccsid[] = "@(#)tables.c 5.18 (Berkeley) %G%"; +static char sccsid[] = "@(#)tables.c 5.19 (Berkeley) %G%"; #endif /* not lint */ /* @@ -378,11 +378,24 @@ rtioctl(action, ort) if (rtm.rtm_flags & RTF_HOST) { rtm.rtm_msglen -= sizeof(w.w_netmask); } else { - rtm.rtm_msglen -= 8; + register char *cp; + int len; + rtm.rtm_addrs |= RTA_NETMASK; - w.w_netmask.sin_len = 8; w.w_netmask.sin_addr.s_addr = inet_maskof(w.w_dst.sin_addr.s_addr); + for (cp = (char *)(1 + &w.w_netmask.sin_addr); + --cp > (char *) &w.w_netmask; ) + if (*cp) + break; + len = cp - (char *)&w.w_netmask; + if (len) { + len++; + w.w_netmask.sin_len = len; + len = 1 + ((len - 1) | (sizeof(long) - 1)); + } else + len = sizeof(long); + rtm.rtm_msglen -= (sizeof(w.w_netmask) - len); } errno = 0; return write(r, (char *)&w, rtm.rtm_msglen); -- 2.20.1