Lines Matching defs:rt
60 static struct rt *routes;
62 static struct rt *
63 find_route(struct rt *rts, const struct rt *r, struct rt **lrt,
64 const struct rt *srt)
66 struct rt *rt;
70 for (rt = rts; rt; rt = rt->next) {
71 if (rt->dest.s_addr == r->dest.s_addr &&
73 (srt || (!rt->iface ||
74 rt->iface->metric == r->iface->metric)) &&
76 (!srt || srt != rt) &&
77 rt->net.s_addr == r->net.s_addr)
78 return rt;
80 *lrt = rt;
86 desc_route(const char *cmd, const struct rt *rt, const char *ifname)
90 strlcpy(addr, inet_ntoa(rt->dest), sizeof(addr));
91 if (rt->gate.s_addr == INADDR_ANY)
93 addr, inet_ntocidr(rt->net));
94 else if (rt->gate.s_addr == rt->dest.s_addr &&
95 rt->net.s_addr == INADDR_BROADCAST)
98 else if (rt->dest.s_addr == INADDR_ANY && rt->net.s_addr == INADDR_ANY)
100 inet_ntoa(rt->gate));
103 addr, inet_ntocidr(rt->net), inet_ntoa(rt->gate));
109 route_deleted(const struct rt *rt)
111 struct rt *f, *l;
113 f = find_route(routes, rt, &l, NULL);
126 n_route(struct rt *rt, const struct interface *iface)
129 if (rt->dest.s_addr == 0 &&
130 rt->net.s_addr == 0 &&
134 desc_route("adding", rt, iface->name);
135 if (!add_route(iface, &rt->dest, &rt->net, &rt->gate, iface->metric))
139 if (rt->dest.s_addr == (iface->addr.s_addr & iface->net.s_addr) &&
140 rt->net.s_addr == iface->net.s_addr &&
141 rt->gate.s_addr == 0)
151 c_route(struct rt *ort, struct rt *nrt, const struct interface *iface)
173 d_route(struct rt *rt, const struct interface *iface, int metric)
177 desc_route("deleting", rt, iface->name);
178 retval = del_route(iface, &rt->dest, &rt->net, &rt->gate, metric);
184 static struct rt *
189 struct rt *rt;
199 rt = malloc(sizeof(*rt));
200 rt->dest.s_addr = addr & net.s_addr;
201 rt->net.s_addr = net.s_addr;
202 rt->gate.s_addr = 0;
203 return rt;
206 static struct rt *
207 add_subnet_route(struct rt *rt, const struct interface *iface)
209 struct rt *r;
216 return rt;
222 r->next = rt;
226 static struct rt *
229 struct rt *rt, *nrt = NULL, *r = NULL;
232 for (rt = iface->state->options->routes;
233 rt != NULL;
234 rt = rt->next)
236 if (rt->gate.s_addr == 0)
244 memcpy(r, rt, sizeof(*r));
257 static struct rt *
258 massage_host_routes(struct rt *rt, const struct interface *iface)
260 struct rt *r;
262 for (r = rt; r; r = r->next)
266 return rt;
269 static struct rt *
270 add_destination_route(struct rt *rt, const struct interface *iface)
272 struct rt *r;
276 return rt;
281 r->next = rt;
287 static struct rt *
288 add_router_host_route(struct rt *rt, const struct interface *ifp)
290 struct rt *rtp, *rtl, *rtn;
293 for (rtp = rt, rtl = NULL; rtp; rtl = rtp, rtp = rtp->next) {
297 for (rtn = rt; rtn != rtp; rtn = rtn->next) {
330 rt = rtn;
334 return rt;
340 struct rt *nrs = NULL, *dnr, *or, *rt, *rtn, *rtl, *lrt = NULL;
351 for (rt = dnr; rt && (rtn = rt->next, 1); lrt = rt, rt = rtn) {
352 rt->iface = ifp;
354 if ((find_route(nrs, rt, NULL, NULL)) != NULL)
357 if ((or = find_route(routes, rt, &rtl, NULL))) {
359 rt->gate.s_addr != or->gate.s_addr)
361 if (c_route(or, rt, ifp) != 0)
370 if (n_route(rt, ifp) != 0)
373 if (dnr == rt)
377 rt->next = nrs;
378 nrs = rt;
384 for (rt = routes; rt; rt = rt->next) {
385 if (find_route(nrs, rt, NULL, NULL) == NULL)
386 d_route(rt, rt->iface, rt->iface->metric);
421 struct rt *rt;
449 rt = get_subnet_route(dhcp);
450 if (rt != NULL) {
451 rt->iface = iface;
452 if (!find_route(routes, rt, NULL, NULL))
453 del_route(iface, &rt->dest, &rt->net, &rt->gate, 0);
454 free(rt);