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:
parent
0ac9cb2c1f
commit
e19d08055a
1 changed files with 4 additions and 1 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue