state = LINK_UP;
flags |= IFF_UP;
}
- ifp->mtu = if_mtu(ifp);
+ ifp->mtu = if_getmtu(ifp);
dhcpcd_handlecarrier(ifp, state, flags);
return 0;
}
#ifdef INET
static int
-if_walkrt(struct dhcpcd_ctx *ctx, rb_tree_t *routes, char *data, size_t len)
+if_walkrt(struct dhcpcd_ctx *ctx, char *data, size_t len)
{
mib2_ipRouteEntry_t *re, *e;
- struct rt rt, *rtn;
+ struct rt *rt;
char ifname[IF_NAMESIZE];
struct in_addr in;
break;
}
- memset(&rt, 0, sizeof(rt));
+ rt = rt_new0(ctx);
+ if (rt == NULL)
+ return -1;
in.s_addr = re->ipRouteDest;
- sa_in_init(&rt.rt_dest, &in);
+ sa_in_init(&rt->rt_dest, &in);
in.s_addr = re->ipRouteMask;
- sa_in_init(&rt.rt_netmask, &in);
+ sa_in_init(&rt->rt_netmask, &in);
in.s_addr = re->ipRouteNextHop;
- sa_in_init(&rt.rt_gateway, &in);
- rt.rt_flags = re->ipRouteInfo.re_flags;
+ sa_in_init(&rt->rt_gateway, &in);
+ rt->rt_flags = re->ipRouteInfo.re_flags;
in.s_addr = re->ipRouteInfo.re_src_addr;
- sa_in_init(&rt.rt_ifa, &in);
- rt.rt_mtu = re->ipRouteInfo.re_max_frag;
+ sa_in_init(&rt->rt_ifa, &in);
+ rt->rt_mtu = re->ipRouteInfo.re_max_frag;
if_octetstr(ifname, &re->ipRouteIfIndex, sizeof(ifname));
- rt.rt_ifp = if_find(ctx->ifaces, ifname);
- if (if_finishrt(ctx, &rt) == -1) {
+ rt->rt_ifp = if_find(ctx->ifaces, ifname);
+ if (if_finishrt(ctx, rt) == -1) {
logerr(__func__);
continue;
}
- if ((rtn = rt_new(rt.rt_ifp)) == NULL) {
- logerr(__func__);
- break;
- }
- memcpy(rtn, &rt, sizeof(*rtn));
- if (rb_tree_insert_node(routes, rtn) != rtn)
- rt_free(rtn);
+ if (rb_tree_insert_node(&ctx->kroutes, rt) != rt)
+ rt_free(rt);
} while (++re < e);
return 0;
}
#ifdef INET6
static int
-if_walkrt6(struct dhcpcd_ctx *ctx, rb_tree_t *routes, char *data, size_t len)
+if_walkrt6(struct dhcpcd_ctx *ctx, char *data, size_t len)
{
mib2_ipv6RouteEntry_t *re, *e;
- struct rt rt, *rtn;
+ struct rt *rt;
char ifname[IF_NAMESIZE];
struct in6_addr in6;
break;
}
- memset(&rt, 0, sizeof(rt));
- sa_in6_init(&rt.rt_dest, &re->ipv6RouteDest);
+ rt = rt_new0(ctx);
+ if (rt == NULL)
+ return -1;
+ sa_in6_init(&rt->rt_dest, &re->ipv6RouteDest);
ipv6_mask(&in6, re->ipv6RoutePfxLength);
- sa_in6_init(&rt.rt_netmask, &in6);
- sa_in6_init(&rt.rt_gateway, &re->ipv6RouteNextHop);
- sa_in6_init(&rt.rt_ifa, &re->ipv6RouteInfo.re_src_addr);
- rt.rt_mtu = re->ipv6RouteInfo.re_max_frag;
+ sa_in6_init(&rt->rt_netmask, &in6);
+ sa_in6_init(&rt->rt_gateway, &re->ipv6RouteNextHop);
+ sa_in6_init(&rt->rt_ifa, &re->ipv6RouteInfo.re_src_addr);
+ rt->rt_mtu = re->ipv6RouteInfo.re_max_frag;
if_octetstr(ifname, &re->ipv6RouteIfIndex, sizeof(ifname));
- rt.rt_ifp = if_find(ctx->ifaces, ifname);
- if (if_finishrt(ctx, &rt) == -1) {
+ rt->rt_ifp = if_find(ctx->ifaces, ifname);
+ if (if_finishrt(ctx, rt) == -1) {
logerr(__func__);
continue;
}
- if ((rtn = rt_new(rt.rt_ifp)) == NULL) {
- logerr(__func__);
- break;
- }
- memcpy(rtn, &rt, sizeof(*rtn));
- if (rb_tree_insert_node(routes, rtn) != rtn)
- rt_free(rtn);
+ if (rb_tree_insert_node(&ctx->kroutes, rt) != rt)
+ rt_free(rt);
} while (++re < e);
return 0;
}
#endif
static int
-if_parsert(struct dhcpcd_ctx *ctx, rb_tree_t *routes,
+if_parsert(struct dhcpcd_ctx *ctx,
unsigned int level, unsigned int name,
- int (*walkrt)(struct dhcpcd_ctx *, rb_tree_t *, char *, size_t))
+ int (*walkrt)(struct dhcpcd_ctx *, char *, size_t))
{
int s, retval, code, flags;
uintptr_t buf[512 / sizeof(uintptr_t)];
* the next item, so don't move this test higher up
* to avoid the buffer allocation and getmsg calls. */
if (req->level == level && req->name == name) {
- if (walkrt(ctx, routes, databuf.buf, req->len) == -1)
+ if (walkrt(ctx, databuf.buf, req->len) == -1)
break;
}
}
int
-if_initrt(struct dhcpcd_ctx *ctx, rb_tree_t *routes, int af)
+if_initrt(struct dhcpcd_ctx *ctx, int af)
{
#ifdef INET
if ((af == AF_UNSPEC || af == AF_INET) &&
- if_parsert(ctx, routes, MIB2_IP,MIB2_IP_ROUTE, if_walkrt) == -1)
+ if_parsert(ctx, MIB2_IP,MIB2_IP_ROUTE, if_walkrt) == -1)
return -1;
#endif
#ifdef INET6
if ((af == AF_UNSPEC || af == AF_INET6) &&
- if_parsert(ctx, routes, MIB2_IP6, MIB2_IP6_ROUTE, if_walkrt6) == -1)
+ if_parsert(ctx, MIB2_IP6, MIB2_IP6_ROUTE, if_walkrt6) == -1)
return -1;
#endif
return 0;