Lines Matching refs:rt
69 register struct rt_entry *rt; in rtlookup() local
79 for (rt = rh->rt_forw; rt != (struct rt_entry *)rh; rt = rt->rt_forw) { in rtlookup()
80 if (rt->rt_hash != hash) in rtlookup()
82 if (equal(&rt->rt_dst, dst)) in rtlookup()
83 return (rt); in rtlookup()
94 register struct rt_entry *rt; in rtfind() local
108 for (rt = rh->rt_forw; rt != (struct rt_entry *)rh; rt = rt->rt_forw) { in rtfind()
109 if (rt->rt_hash != hash) in rtfind()
111 if (rt->rt_dst.sa_family == af && in rtfind()
112 (*match)(&rt->rt_dst, dst)) in rtfind()
113 return (rt); in rtfind()
123 register struct rt_entry *rt; in rtadd() local
136 rt = (struct rt_entry *)malloc(sizeof (*rt)); in rtadd()
137 if (rt == 0) in rtadd()
139 rt->rt_hash = hash; in rtadd()
140 rt->rt_dst = *dst; in rtadd()
141 rt->rt_router = *gate; in rtadd()
142 rt->rt_metric = metric; in rtadd()
143 rt->rt_ticks = ticks; in rtadd()
144 rt->rt_timer = 0; in rtadd()
145 rt->rt_flags = RTF_UP | flags; in rtadd()
146 rt->rt_state = state | RTS_CHANGED; in rtadd()
147 rt->rt_ifp = if_ifwithnet(&rt->rt_router); in rtadd()
148 rt->rt_clone = NULL; in rtadd()
150 rt->rt_flags |= RTF_GATEWAY; in rtadd()
151 insque(rt, rh); in rtadd()
152 TRACE_ACTION("ADD", rt); in rtadd()
158 if (install && rtioctl(ADD, &rt->rt_rt) < 0) { in rtadd()
162 TRACE_ACTION("DELETE", rt); in rtadd()
163 remque(rt); in rtadd()
164 free((char *)rt); in rtadd()
174 register struct rt_entry *rt; in rtadd_clone() local
185 rt = (struct rt_entry *)malloc(sizeof (*rt)); in rtadd_clone()
186 if (rt == 0) in rtadd_clone()
188 rt->rt_hash = hash; in rtadd_clone()
189 rt->rt_dst = *dst; in rtadd_clone()
190 rt->rt_router = *gate; in rtadd_clone()
191 rt->rt_metric = metric; in rtadd_clone()
192 rt->rt_ticks = ticks; in rtadd_clone()
193 rt->rt_timer = 0; in rtadd_clone()
194 rt->rt_flags = RTF_UP | flags; in rtadd_clone()
195 rt->rt_state = state | RTS_CHANGED; in rtadd_clone()
196 rt->rt_ifp = if_ifwithnet(&rt->rt_router); in rtadd_clone()
197 rt->rt_clone = NULL; in rtadd_clone()
198 rt->rt_forw = NULL; in rtadd_clone()
199 rt->rt_back = NULL; in rtadd_clone()
201 rt->rt_flags |= RTF_GATEWAY; in rtadd_clone()
205 ort->rt_clone = rt; in rtadd_clone()
206 TRACE_ACTION("ADD_CLONE", rt); in rtadd_clone()
210 rtchange(struct rt_entry *rt, struct sockaddr *gate, short metric, in rtchange() argument
225 if (rt->rt_clone) { in rtchange()
226 if ((ticks < rt->rt_clone->rt_ticks) || in rtchange()
227 ((ticks == rt->rt_clone->rt_ticks) && in rtchange()
228 (metric < rt->rt_clone->rt_metric))) { in rtchange()
234 trt = rt->rt_clone; in rtchange()
235 rt->rt_clone = NULL; in rtchange()
241 } else if ((ticks == rt->rt_clone->rt_ticks) && in rtchange()
242 (metric == rt->rt_clone->rt_metric)) { in rtchange()
245 prt = rt; in rtchange()
246 trt = rt->rt_clone; in rtchange()
265 trt = rt->rt_clone; in rtchange()
266 rt->rt_clone = rt->rt_clone->rt_clone; in rtchange()
274 if (!equal(&rt->rt_router, gate)) in rtchange()
276 if ((metric != rt->rt_metric) || (ticks != rt->rt_ticks)) in rtchange()
279 TRACE_ACTION("CHANGE FROM", rt); in rtchange()
281 rt->rt_router = *gate; in rtchange()
283 rt->rt_metric = metric; in rtchange()
284 rt->rt_ticks = ticks; in rtchange()
285 if ((rt->rt_state & RTS_INTERFACE) && metric) { in rtchange()
286 rt->rt_state &= ~RTS_INTERFACE; in rtchange()
287 if(rt->rt_ifp) in rtchange()
290 rt->rt_ifp->int_name); in rtchange()
296 rt->rt_flags |= RTF_GATEWAY; in rtchange()
298 rt->rt_flags &= ~RTF_GATEWAY; in rtchange()
299 rt->rt_ifp = if_ifwithnet(&rt->rt_router); in rtchange()
300 rt->rt_state |= RTS_CHANGED; in rtchange()
301 TRACE_ACTION("CHANGE TO", rt); in rtchange()
305 if (rtioctl(ADD, &rt->rt_rt) < 0) in rtchange()
307 ipx_ntoa(&((struct sockaddr_ipx *)&rt->rt_dst)->sipx_addr), in rtchange()
308 ipx_ntoa(&((struct sockaddr_ipx *)&rt->rt_router)->sipx_addr)); in rtchange()
313 if (rtioctl(ADD, &rt->rt_rt) >= 0) in rtchange()
316 if (rtioctl(CHANGE, &rt->rt_rt) >= 0) in rtchange()
320 ipxdp_ntoa(&((struct sockaddr_ipx *)&rt->rt_dst)->sipx_addr), in rtchange()
321 ipxdp_ntoa(&((struct sockaddr_ipx *)&rt->rt_router)->sipx_addr)); in rtchange()
327 rtdelete(struct rt_entry *rt) in rtdelete() argument
330 struct sockaddr *sa = &(rt->rt_router); in rtdelete()
332 sa = &(rt->rt_dst); in rtdelete()
334 if (rt->rt_clone) { in rtdelete()
338 struct rt_entry *trt = rt->rt_clone; in rtdelete()
339 rtchange(rt, &trt->rt_router, trt->rt_metric, trt->rt_ticks); in rtdelete()
342 if (rt->rt_state & RTS_INTERFACE) { in rtdelete()
343 if (rt->rt_ifp) in rtdelete()
346 rt->rt_ifp->int_name); in rtdelete()
351 TRACE_ACTION("DELETE", rt); in rtdelete()
352 if (install && rtioctl(DELETE, &rt->rt_rt) < 0) in rtdelete()
354 remque(rt); in rtdelete()
355 free((char *)rt); in rtdelete()