From 0c609bcf9e2ee861b8d6083dbe6429e340baff55 Mon Sep 17 00:00:00 2001 From: christos Date: Mon, 1 Jul 1996 01:12:32 +0000 Subject: [PATCH] - Fix PR/2582: default route change without specifying gateway kills system. While I was there: - Fix KNF style problem. - Remove bogus casts to 0, and (caddr_t). --- sys/net/rtsock.c | 63 ++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index f8f462884ace..280285de3d11 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.20 1996/05/23 18:30:57 mycroft Exp $ */ +/* $NetBSD: rtsock.c,v 1.21 1996/07/01 01:12:32 christos Exp $ */ /* * Copyright (c) 1988, 1991, 1993 @@ -62,11 +62,9 @@ struct walkarg { caddr_t w_where, w_tmem; }; -static struct mbuf * - rt_msg1 __P((int, struct rt_addrinfo *)); -static int rt_msg2 __P((int, - struct rt_addrinfo *, caddr_t, struct walkarg *)); -static void rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *)); +static struct mbuf *rt_msg1 __P((int, struct rt_addrinfo *)); +static int rt_msg2 __P((int, struct rt_addrinfo *, caddr_t, struct walkarg *)); +static void rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *)); /* Sleazy use of local variables throughout file, warning!!!! */ #define dst info.rti_info[RTAX_DST] @@ -159,7 +157,7 @@ route_output(m, va_alist) #define senderr(e) { error = e; goto flush;} if (m == 0 || ((m->m_len < sizeof(int32_t)) && - (m = m_pullup(m, sizeof(int32_t))) == 0)) + (m = m_pullup(m, sizeof(int32_t))) == 0)) return (ENOBUFS); if ((m->m_flags & M_PKTHDR) == 0) panic("route_output"); @@ -198,10 +196,10 @@ route_output(m, va_alist) if (gate == 0) senderr(EINVAL); error = rtrequest(RTM_ADD, dst, gate, netmask, - rtm->rtm_flags, &saved_nrt); + rtm->rtm_flags, &saved_nrt); if (error == 0 && saved_nrt) { rt_setmetrics(rtm->rtm_inits, - &rtm->rtm_rmx, &saved_nrt->rt_rmx); + &rtm->rtm_rmx, &saved_nrt->rt_rmx); saved_nrt->rt_refcnt--; saved_nrt->rt_genmask = genmask; } @@ -209,7 +207,7 @@ route_output(m, va_alist) case RTM_DELETE: error = rtrequest(RTM_DELETE, dst, gate, netmask, - rtm->rtm_flags, &saved_nrt); + rtm->rtm_flags, &saved_nrt); if (error == 0) { (rt = saved_nrt)->rt_refcnt++; goto report; @@ -222,7 +220,7 @@ route_output(m, va_alist) if ((rnh = rt_tables[dst->sa_family]) == 0) { senderr(EAFNOSUPPORT); } else if ((rt = (struct rtentry *) - rnh->rnh_lookup(dst, netmask, rnh)) != NULL) + rnh->rnh_lookup(dst, netmask, rnh)) != NULL) rt->rt_refcnt++; else senderr(ESRCH); @@ -248,8 +246,7 @@ route_output(m, va_alist) ifaaddr = 0; } } - len = rt_msg2(rtm->rtm_type, &info, (caddr_t)0, - (struct walkarg *)0); + len = rt_msg2(rtm->rtm_type, &info, NULL, NULL); if (len > rtm->rtm_msglen) { struct rt_msghdr *new_rtm; R_Malloc(new_rtm, struct rt_msghdr *, len); @@ -258,8 +255,7 @@ route_output(m, va_alist) Bcopy(rtm, new_rtm, rtm->rtm_msglen); Free(rtm); rtm = new_rtm; } - (void)rt_msg2(rtm->rtm_type, &info, (caddr_t)rtm, - (struct walkarg *)0); + (void)rt_msg2(rtm->rtm_type, &info, (caddr_t)rtm, NULL); rtm->rtm_flags = rt->rt_flags; rtm->rtm_rmx = rt->rt_rmx; rtm->rtm_addrs = info.rti_addrs; @@ -274,17 +270,17 @@ route_output(m, va_alist) if (ifpaddr && (ifa = ifa_ifwithnet(ifpaddr)) && (ifp = ifa->ifa_ifp)) ifa = ifaof_ifpforaddr(ifaaddr ? ifaaddr : gate, - ifp); + ifp); else if ((ifaaddr && (ifa = ifa_ifwithaddr(ifaaddr))) || - (ifa = ifa_ifwithroute(rt->rt_flags, - rt_key(rt), gate))) + (gate && (ifa = ifa_ifwithroute(rt->rt_flags, + rt_key(rt), gate)))) ifp = ifa->ifa_ifp; if (ifa) { register struct ifaddr *oifa = rt->rt_ifa; if (oifa != ifa) { if (oifa && oifa->ifa_rtrequest) oifa->ifa_rtrequest(RTM_DELETE, - rt, gate); + rt, gate); IFAFREE(rt->rt_ifa); rt->rt_ifa = ifa; ifa->ifa_refcnt++; @@ -292,9 +288,9 @@ route_output(m, va_alist) } } rt_setmetrics(rtm->rtm_inits, &rtm->rtm_rmx, - &rt->rt_rmx); + &rt->rt_rmx); if (rt->rt_ifa && rt->rt_ifa->ifa_rtrequest) - rt->rt_ifa->ifa_rtrequest(RTM_ADD, rt, gate); + rt->rt_ifa->ifa_rtrequest(RTM_ADD, rt, gate); if (genmask) rt->rt_genmask = genmask; /* @@ -303,7 +299,7 @@ route_output(m, va_alist) case RTM_LOCK: rt->rt_rmx.rmx_locks &= ~(rtm->rtm_inits); rt->rt_rmx.rmx_locks |= - (rtm->rtm_inits & rtm->rtm_rmx.rmx_locks); + (rtm->rtm_inits & rtm->rtm_rmx.rmx_locks); break; } break; @@ -475,7 +471,7 @@ rt_msg1(type, rtinfo) m->m_pkthdr.len = m->m_len = len; m->m_pkthdr.rcvif = 0; rtm = mtod(m, struct rt_msghdr *); - bzero((caddr_t)rtm, len); + bzero(rtm, len); for (i = 0; i < RTAX_MAX; i++) { if ((sa = rtinfo->rti_info[i]) == NULL) continue; @@ -531,7 +527,7 @@ again: rtinfo->rti_addrs |= (1 << i); dlen = ROUNDUP(sa->sa_len); if (cp) { - bcopy((caddr_t)sa, cp, (unsigned)dlen); + bcopy(sa, cp, (unsigned)dlen); cp += dlen; } len += dlen; @@ -545,7 +541,7 @@ again: if (rw->w_tmem) free(rw->w_tmem, M_RTABLE); rw->w_tmem = (caddr_t) malloc(len, M_RTABLE, - M_NOWAIT); + M_NOWAIT); if (rw->w_tmem) rw->w_tmemsize = len; } @@ -609,7 +605,7 @@ rt_ifmsg(ifp) if (route_cb.any_count == 0) return; - bzero((caddr_t)&info, sizeof(info)); + bzero(&info, sizeof(info)); m = rt_msg1(RTM_IFINFO, &info); if (m == 0) return; @@ -645,7 +641,7 @@ rt_newaddrmsg(cmd, ifa, error, rt) if (route_cb.any_count == 0) return; for (pass = 1; pass < 3; pass++) { - bzero((caddr_t)&info, sizeof(info)); + bzero(&info, sizeof(info)); if ((cmd == RTM_ADD && pass == 1) || (cmd == RTM_DELETE && pass == 2)) { register struct ifa_msghdr *ifam; @@ -700,7 +696,7 @@ sysctl_dumpentry(rn, v) if (w->w_op == NET_RT_FLAGS && !(rt->rt_flags & w->w_arg)) return 0; - bzero((caddr_t)&info, sizeof(info)); + bzero(&info, sizeof(info)); dst = rt_key(rt); gate = rt->rt_gateway; netmask = rt_mask(rt); @@ -721,7 +717,7 @@ sysctl_dumpentry(rn, v) rtm->rtm_index = rt->rt_ifp->if_index; rtm->rtm_errno = rtm->rtm_pid = rtm->rtm_seq = 0; rtm->rtm_addrs = info.rti_addrs; - if ((error = copyout((caddr_t)rtm, w->w_where, size)) != 0) + if ((error = copyout(rtm, w->w_where, size)) != 0) w->w_where = NULL; else w->w_where += size; @@ -739,13 +735,13 @@ sysctl_iflist(af, w) struct rt_addrinfo info; int len, error = 0; - bzero((caddr_t)&info, sizeof(info)); + bzero(&info, sizeof(info)); for (ifp = ifnet.tqh_first; ifp != 0; ifp = ifp->if_list.tqe_next) { if (w->w_arg && w->w_arg != ifp->if_index) continue; ifa = ifp->if_addrlist.tqh_first; ifpaddr = ifa->ifa_addr; - len = rt_msg2(RTM_IFINFO, &info, (caddr_t)0, w); + len = rt_msg2(RTM_IFINFO, &info, NULL, w); ifpaddr = 0; if (w->w_where && w->w_tmem) { register struct if_msghdr *ifm; @@ -755,7 +751,7 @@ sysctl_iflist(af, w) ifm->ifm_flags = ifp->if_flags; ifm->ifm_data = ifp->if_data; ifm->ifm_addrs = info.rti_addrs; - error = copyout((caddr_t)ifm, w->w_where, len); + error = copyout(ifm, w->w_where, len); if (error) return (error); w->w_where += len; @@ -820,8 +816,7 @@ sysctl_rtable(name, namelen, where, given, new, newlen) for (i = 1; i <= AF_MAX; i++) if ((rnh = rt_tables[i]) && (af == 0 || af == i) && (error = (*rnh->rnh_walktree)(rnh, - sysctl_dumpentry, - &w))) + sysctl_dumpentry, &w))) break; break;