From 33b6c292c3e3a8972d0b9f43d156aae50db65720 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Tue, 14 Mar 2017 12:56:47 +0100 Subject: [PATCH] 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. --- doc/bird.sgml | 5 +++-- proto/bgp/bgp.c | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/bird.sgml b/doc/bird.sgml index dd4472ae..ffd28964 100644 --- a/doc/bird.sgml +++ b/doc/bird.sgml @@ -1883,8 +1883,9 @@ using the following configuration parameters: Specify that the neighbor is directly connected. The IP address of the diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 0f1c9446..f706e76e 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -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) ipa_is_link_local(c->source_addr))) 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");