diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2018-10-26 19:11:33 +0200 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2018-10-26 19:11:33 +0200 |
commit | e19d08055a4614f03e51ee72617be10946ce7919 (patch) | |
tree | 61e9900084f60e2d59e17fc369edf42e83d4d2e4 /proto/bgp/bgp.c | |
parent | 0ac9cb2c1f6592290e025f61ccd0fef0dc09de46 (diff) |
BGP: Fix VRF for listening socket
Listening socket should be bound to specified interface and VRF.
Thanks to Alexander Zubkov for the bugreport.
Diffstat (limited to 'proto/bgp/bgp.c')
-rw-r--r-- | proto/bgp/bgp.c | 5 |
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; |