BGP: Fix VRF for listening socket

Listening socket should be bound to specified interface and VRF.

Thanks to Alexander Zubkov for the bugreport.
This commit is contained in:
Ondrej Zajicek (work) 2018-10-26 19:11:33 +02:00
parent 0ac9cb2c1f
commit e19d08055a

View file

@ -159,7 +159,8 @@ bgp_open(struct bgp_proto *p)
/* We assume that cf->iface is defined iff cf->local_ip is link-local */ /* We assume that cf->iface is defined iff cf->local_ip is link-local */
WALK_LIST(bs, bgp_sockets) 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++; bs->uc++;
p->sock = bs; p->sock = bs;
@ -171,6 +172,8 @@ bgp_open(struct bgp_proto *p)
sk->ttl = 255; sk->ttl = 255;
sk->saddr = addr; sk->saddr = addr;
sk->sport = port; sk->sport = port;
sk->iface = ifa;
sk->vrf = p->p.vrf;
sk->flags = 0; sk->flags = 0;
sk->tos = IP_PREC_INTERNET_CONTROL; sk->tos = IP_PREC_INTERNET_CONTROL;
sk->rbsize = BGP_RX_BUFFER_SIZE; sk->rbsize = BGP_RX_BUFFER_SIZE;