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

BGP: Autoconfigure BGP next hops from preferred addresses

parent 830ba75e
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -1504,6 +1504,20 @@ bgp_channel_start(struct channel *C)
      c->next_hop_addr = src;
  }

  /* Use preferred addresses associated with interface / source address */
  if (ipa_zero(c->next_hop_addr))
  {
    /* We know the iface for single-hop, we make lookup for multihop */
    struct neighbor *nbr = p->neigh ?: neigh_find2(&p->p, &src, NULL, 0);
    struct iface *iface = nbr ? nbr->iface : NULL;

    if (bgp_channel_is_ipv4(c) && iface && iface->addr4)
      c->next_hop_addr = iface->addr4->ip;

    if (bgp_channel_is_ipv6(c) && iface && iface->addr6)
      c->next_hop_addr = iface->addr6->ip;
  }

  /* Exit if no feasible next hop address is found */
  if (ipa_zero(c->next_hop_addr))
  {
@@ -2079,6 +2093,11 @@ bgp_show_proto_info(struct proto *P)
    {
      channel_show_info(&c->c);

      if (ipa_zero(c->link_addr))
	cli_msg(-1006, "    BGP Next hop:   %I", c->next_hop_addr);
      else
	cli_msg(-1006, "    BGP Next hop:   %I %I", c->next_hop_addr, c->link_addr);

      if (c->igp_table_ip4)
	cli_msg(-1006, "    IGP IPv4 table: %s", c->igp_table_ip4->name);