stream_put_in_addr(s, &kr->nexthop.v4);
break;
case AF_INET6:
- stream_write(s, (u_char *)&kr->prefix.v6, 16);
+ stream_write(s, (uint8_t *)&kr->prefix.v6, 16);
stream_putc(s, kr->prefixlen);
- stream_write(s, (u_char *)&kr->nexthop.v6, 16);
+ stream_write(s, (uint8_t *)&kr->nexthop.v6, 16);
break;
default:
fatalx("kr_change: unknown af");
struct kif kif;
struct kaddr ka;
- RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name) {
+ FOR_ALL_INTERFACES (vrf, ifp) {
if (ifname && strcmp(ifname, ifp->name) != 0)
continue;
/* loop through all the nexthops */
for (i = 0; i < api.nexthop_num; i++) {
api_nh = &api.nexthops[i];
-
- switch (kr.af) {
- case AF_INET:
+ switch (api_nh->type) {
+ case NEXTHOP_TYPE_IPV4:
+ if (kr.af != AF_INET)
+ continue;
+ kr.nexthop.v4 = api_nh->gate.ipv4;
+ kr.ifindex = 0;
+ break;
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ if (kr.af != AF_INET)
+ continue;
kr.nexthop.v4 = api_nh->gate.ipv4;
+ kr.ifindex = api_nh->ifindex;
break;
- case AF_INET6:
+ case NEXTHOP_TYPE_IPV6:
+ if (kr.af != AF_INET6)
+ continue;
kr.nexthop.v6 = api_nh->gate.ipv6;
+ kr.ifindex = 0;
break;
- default:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ if (kr.af != AF_INET6)
+ continue;
+ kr.nexthop.v6 = api_nh->gate.ipv6;
+ kr.ifindex = api_nh->ifindex;
break;
+ case NEXTHOP_TYPE_IFINDEX:
+ if (!(kr.flags & F_CONNECTED))
+ continue;
+ break;
+ default:
+ continue;
}
- kr.ifindex = api_nh->ifindex;;
debug_zebra_in("route %s %s/%d nexthop %s ifindex %u (%s)",
(add) ? "add" : "delete", log_addr(kr.af, &kr.prefix),
ZEBRA_ROUTE_ALL, 0, VRF_DEFAULT);
}
+extern struct zebra_privs_t ldpd_privs;
+
void
ldp_zebra_init(struct thread_master *master)
{
/* Set default values. */
- zclient = zclient_new(master);
- zclient_init(zclient, ZEBRA_ROUTE_LDP, 0);
+ zclient = zclient_new_notify(master, &zclient_options_default);
+ zclient_init(zclient, ZEBRA_ROUTE_LDP, 0, &ldpd_privs);
/* set callbacks */
zclient->zebra_connected = ldp_zebra_connected;