From cd4fafb346eda353b75a3fb1f4ba5b08a8f0e688 Mon Sep 17 00:00:00 2001 From: mdodd Date: Sun, 2 Mar 2003 21:34:37 +0000 Subject: Reduce code duplication. This adds the function rt_check() to route.c. Approved by: sam (in principle) --- sys/net/if_arcsubr.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) (limited to 'sys/net/if_arcsubr.c') diff --git a/sys/net/if_arcsubr.c b/sys/net/if_arcsubr.c index 667291d..dda353a 100644 --- a/sys/net/if_arcsubr.c +++ b/sys/net/if_arcsubr.c @@ -121,28 +121,9 @@ arc_output(ifp, m, dst, rt0) error = 0; ac = (struct arccom *)ifp; - if ((rt = rt0)) { - if ((rt->rt_flags & RTF_UP) == 0) { - if ((rt0 = rt = rtalloc1(dst, 1, 0UL))) - rt->rt_refcnt--; - else - senderr(EHOSTUNREACH); - } - if (rt->rt_flags & RTF_GATEWAY) { - if (rt->rt_gwroute == 0) - goto lookup; - if (((rt = rt->rt_gwroute)->rt_flags & RTF_UP) == 0) { - rtfree(rt); rt = rt0; - lookup: rt->rt_gwroute = rtalloc1(rt->rt_gateway, 1, 0UL); - if ((rt = rt->rt_gwroute) == 0) - senderr(EHOSTUNREACH); - } - } - if (rt->rt_flags & RTF_REJECT) - if (rt->rt_rmx.rmx_expire == 0 || - time_second < rt->rt_rmx.rmx_expire) - senderr(rt == rt0 ? EHOSTDOWN : EHOSTUNREACH); - } + error = rt_check(&rt, &rt0, dst); + if (error) + goto bad; switch (dst->sa_family) { #ifdef INET -- cgit v1.1