Commit 33b6c292 authored by Ondřej Zajíček's avatar Ondřej Zajíček

BGP: Allow to specify interface for regular sessions

This may be useful if multple interfaces share the same network range.

Thanks to Fritz Grimpen for the original patch.
parent 27f6ba65
......@@ -1883,8 +1883,9 @@ using the following configuration parameters:
<tag><label id="bgp-iface">interface <m/string/</tag>
Define interface we should use for link-local BGP IPv6 sessions.
Interface can also be specified as a part of <cf/neighbor address/
(e.g., <cf/neighbor fe80::1234%eth0 as 65000;/). It is an error to use
this parameter for non link-local sessions.
(e.g., <cf/neighbor fe80::1234%eth0 as 65000;/). The option may also be
used for non link-local sessions when it is necessary to explicitly
specify an interface, but only for direct (not multihop) sessions.
<tag><label id="bgp-direct">direct</tag>
Specify that the neighbor is directly connected. The IP address of the
......@@ -790,7 +790,7 @@ bgp_find_proto(sock *sk)
struct bgp_proto *p = (struct bgp_proto *) pc->proto;
if (ipa_equal(p->cf->remote_ip, sk->daddr) &&
(!ipa_is_link_local(sk->daddr) || (p->cf->iface == sk->iface)))
(!p->cf->iface || (p->cf->iface == sk->iface)))
return p;
......@@ -1324,11 +1324,8 @@ bgp_check_config(struct bgp_config *c)
if (!c->remote_as)
cf_error("Remote AS number must be set");
// if (ipa_is_link_local(c->remote_ip) && !c->iface)
// cf_error("Link-local neighbor address requires specified interface");
if (!ipa_is_link_local(c->remote_ip) != !c->iface)
cf_error("Link-local address and interface scope must be used together");
if (ipa_is_link_local(c->remote_ip) && !c->iface)
cf_error("Link-local neighbor address requires specified interface");
if (!(c->capabilities && c->enable_as4) && (c->remote_as > 0xFFFF))
cf_error("Neighbor AS number out of range (AS4 not available)");
......@@ -1346,6 +1343,9 @@ bgp_check_config(struct bgp_config *c)
cf_error("Multihop BGP cannot be used with link-local addresses");
if (c->multihop && c->iface)
cf_error("Multihop BGP cannot be bound to interface");
if (c->multihop && c->check_link)
cf_error("Multihop BGP cannot depend on link state");
  • How does this fix the issue of incoming connections. We still have a single listener on port 179 and if we have multiple interfaces with same IP Address, we will still have a problem locating the protocol ? I am trying to understand where we set sk->iface that is being used in bgp_find_proto() in this line (p->cf->iface == sk->iface))).

Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment