diff --git a/SERVICES b/SERVICES index c69d0c1a775a..ee242ca6a2d3 100644 --- a/SERVICES +++ b/SERVICES @@ -18,3 +18,4 @@ ospf6d 2606/tcp ospfapi 2607/tcp isisd 2608/tcp pimd 2611/tcp +ldpd 2612/tcp diff --git a/zebra/rib.h b/zebra/rib.h index 30929f1beb5c..d80ea6cbd865 100644 --- a/zebra/rib.h +++ b/zebra/rib.h @@ -93,7 +93,6 @@ struct rib /* Nexthop information. */ u_char nexthop_num; u_char nexthop_active_num; - u_char nexthop_fib_num; }; /* meta-queue structure: @@ -335,7 +334,7 @@ extern int zebra_check_addr (struct prefix *p); extern void rib_addnode (struct route_node *rn, struct rib *rib, int process); extern void rib_delnode (struct route_node *rn, struct rib *rib); -extern int rib_install_kernel (struct route_node *rn, struct rib *rib, int update); +extern int rib_install_kernel (struct route_node *rn, struct rib *rib, struct rib *old); extern int rib_uninstall_kernel (struct route_node *rn, struct rib *rib); /* NOTE: diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index c573f6bd5c04..e48da0479b39 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1212,7 +1212,7 @@ nexthop_active_update (struct route_node *rn, struct rib *rib, int set) * is only used for IPv4. */ int -rib_install_kernel (struct route_node *rn, struct rib *rib, int update) +rib_install_kernel (struct route_node *rn, struct rib *rib, struct rib *old) { int ret = 0; struct nexthop *nexthop, *tnexthop; @@ -1231,7 +1231,7 @@ rib_install_kernel (struct route_node *rn, struct rib *rib, int update) * the kernel. */ zfpm_trigger_update (rn, "installing in kernel"); - ret = kernel_route_rib (&rn->p, update ? rib : NULL, rib); + ret = kernel_route_rib (&rn->p, old, rib); /* If install succeeds, update FIB flag for nexthops. */ if (!ret) @@ -1388,7 +1388,7 @@ rib_process_add_fib(struct zebra_vrf *zvrf, struct route_node *rn, if (!RIB_SYSTEM_ROUTE (new)) { - if (rib_install_kernel (rn, new, 0)) + if (rib_install_kernel (rn, new, NULL)) { inet_ntop (rn->p.family, &rn->p.u.prefix, buf, INET6_ADDRSTRLEN); zlog_warn ("%u:%s/%d: Route install failed", @@ -1470,7 +1470,7 @@ rib_process_update_fib (struct zebra_vrf *zvrf, struct route_node *rn, /* Non-system route should be installed. */ if (!RIB_SYSTEM_ROUTE (new)) { - if (rib_install_kernel (rn, new, 1)) + if (rib_install_kernel (rn, new, old)) { installed = 0; inet_ntop (rn->p.family, &rn->p.u.prefix, buf, INET6_ADDRSTRLEN); @@ -1542,7 +1542,7 @@ rib_process_update_fib (struct zebra_vrf *zvrf, struct route_node *rn, break; } if (!in_fib) - rib_install_kernel (rn, new, 0); + rib_install_kernel (rn, new, NULL); } } @@ -2459,11 +2459,10 @@ void _rib_dump (const char * func, ); zlog_debug ( - "%s: nexthop_num == %u, nexthop_active_num == %u, nexthop_fib_num == %u", + "%s: nexthop_num == %u, nexthop_active_num == %u", func, rib->nexthop_num, - rib->nexthop_active_num, - rib->nexthop_fib_num + rib->nexthop_active_num ); for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing)) @@ -2779,7 +2778,7 @@ rib_delete (afi_t afi, safi_t safi, vrf_id_t vrf_id, int type, u_short instance, { /* This means someone else, other than Zebra, has deleted * a Zebra router from the kernel. We will add it back */ - rib_install_kernel(rn, fib, 0); + rib_install_kernel(rn, fib, NULL); } } else diff --git a/zebra/zebra_static.c b/zebra/zebra_static.c index a7a68bd0dece..5894a8955b6f 100644 --- a/zebra/zebra_static.c +++ b/zebra/zebra_static.c @@ -322,7 +322,7 @@ static_uninstall_route (afi_t afi, safi_t safi, struct prefix *p, struct static_ { /* Update route in kernel if it's in fib */ if (CHECK_FLAG(rib->status, RIB_ENTRY_SELECTED_FIB)) - rib_install_kernel (rn, rib, 1); + rib_install_kernel (rn, rib, rib); /* Update redistribution if it's selected */ if (CHECK_FLAG(rib->flags, ZEBRA_FLAG_SELECTED)) redistribute_update (&rn->p, rib, NULL);