Commit 5fc84071 authored by Ondrej Zajicek (work)'s avatar Ondrej Zajicek (work)
Browse files

RIP: Fix handling of passive mode for demand circuit interfaces

parent b8bbbbaf
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -532,6 +532,9 @@ rip_iface_start(struct rip_iface *ifa)

  ifa->up = 1;

  if (ifa->cf->passive)
    return;

  rip_send_request(p, ifa);
  rip_send_table(p, ifa, ifa->addr, 0);
}
@@ -556,7 +559,7 @@ rip_iface_stop(struct rip_iface *ifa)
  ifa->tx_pending = 0;
  ifa->req_pending = 0;

  if (ifa->cf->demand_circuit)
  if (ifa->cf->demand_circuit && !ifa->cf->passive)
    rip_send_flush(p, ifa);

  WALK_LIST_FIRST(n, ifa->neigh_list)
@@ -730,6 +733,17 @@ rip_reconfigure_iface(struct rip_proto *p, struct rip_iface *ifa, struct rip_ifa
      (ifa->next_regular > (current_time() + new->update_time)))
    ifa->next_regular = current_time() + (random() % new->update_time) + 100 MS;

  if (ifa->up && new->demand_circuit && (new->passive != old->passive))
  {
    if (new->passive)
      rip_send_flush(p, ifa);
    else
    {
      rip_send_request(p, ifa);
      rip_send_table(p, ifa, ifa->addr, 0);
    }
  }

  if (new->check_link != old->check_link)
    rip_iface_update_state(ifa);