From e19d08055a4614f03e51ee72617be10946ce7919 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Fri, 26 Oct 2018 19:11:33 +0200 Subject: [PATCH] BGP: Fix VRF for listening socket Listening socket should be bound to specified interface and VRF. Thanks to Alexander Zubkov for the bugreport. --- proto/bgp/bgp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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;