summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2018-10-26 19:11:33 +0200
committerOndrej Zajicek (work) <santiago@crfreenet.org>2018-10-26 19:11:33 +0200
commite19d08055a4614f03e51ee72617be10946ce7919 (patch)
tree61e9900084f60e2d59e17fc369edf42e83d4d2e4
parent0ac9cb2c1f6592290e025f61ccd0fef0dc09de46 (diff)
BGP: Fix VRF for listening socket
Listening socket should be bound to specified interface and VRF. Thanks to Alexander Zubkov for the bugreport.
-rw-r--r--proto/bgp/bgp.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c
index e7479df7..e2a57137 100644
--- a/proto/bgp/bgp.c
+++ b/proto/bgp/bgp.c
@@ -159,7 +159,8 @@ bgp_open(struct bgp_proto *p)
/* We assume that cf->iface is defined iff cf->local_ip is link-local */
WALK_LIST(bs, bgp_sockets)
- if (ipa_equal(bs->sk->saddr, addr) && (bs->sk->iface == ifa) && (bs->sk->sport == port))
+ if (ipa_equal(bs->sk->saddr, addr) && (bs->sk->sport == port) &&
+ (bs->sk->iface == ifa) && (bs->sk->vrf == p->p.vrf))
{
bs->uc++;
p->sock = bs;
@@ -171,6 +172,8 @@ bgp_open(struct bgp_proto *p)
sk->ttl = 255;
sk->saddr = addr;
sk->sport = port;
+ sk->iface = ifa;
+ sk->vrf = p->p.vrf;
sk->flags = 0;
sk->tos = IP_PREC_INTERNET_CONTROL;
sk->rbsize = BGP_RX_BUFFER_SIZE;