On Wed, Mar 11, 2015 at 04:41:06PM -0300, Renato Westphal wrote:
> If one interface is disabled, the holdtimer of the attached adjacencies
> will eventually timeout after a few seconds. But there's no need to wait
> when we know that the interface is disabled. In these cases, remove the
> attached adjacencies to speedup the convergence process.
> ---
> interface.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/interface.c b/interface.c
> index e18477b..7c80d1e 100644
> --- a/interface.c
> +++ b/interface.c
> @@ -165,15 +165,13 @@ if_new(struct kif *kif)
> void
> if_del(struct iface *iface)
> {
> - struct adj *adj;
> struct if_addr *if_addr;
>
> + if (iface->state == IF_STA_ACTIVE)
> + if_act_reset(iface);
> +
> log_debug("if_del: interface %s", iface->name);
>
> - while ((adj = LIST_FIRST(&iface->adj_list)) != NULL) {
> - LIST_REMOVE(adj, iface_entry);
> - adj_del(adj);
> - }
> while ((if_addr = LIST_FIRST(&iface->addr_list)) != NULL)
> LIST_REMOVE(if_addr, iface_entry);
>
> @@ -262,6 +260,12 @@ int
> if_act_reset(struct iface *iface)
> {
> struct in_addr addr;
> + struct adj *adj;
> +
> + while ((adj = LIST_FIRST(&iface->adj_list)) != NULL) {
> + LIST_REMOVE(adj, iface_entry);
> + adj_del(adj);
> + }
>
> if_stop_hello_timer(iface);
>
> --
> 1.9.1
>
Sounds good to me and diff looks OK.
--
:wq Claudio