Skip to content
Permalink
Browse files

bfdd: fix BGP unnumbered peer setup

The session key uses the scope id to figure out which interface we are
using with that link-local address, so if we don't set it when
registering a session we'll end up with multiple IPv6 sessions.

This bug was spotted by Sandro Bolliger.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
(cherry picked from commit de61f25)
  • Loading branch information...
rzalamena committed Nov 3, 2018
1 parent ddd73a9 commit dcc39aa5101c17d646fdc2c3c7c03966c503c182
Showing with 15 additions and 0 deletions.
  1. +15 −0 bfdd/ptm_adapter.c
@@ -381,6 +381,21 @@ static int _ptm_msg_read(struct stream *msg, int command,
if (bpc->bpc_has_localif) {
STREAM_GET(bpc->bpc_localif, msg, ifnamelen);
bpc->bpc_localif[ifnamelen] = 0;

/*
* IPv6 link-local addresses must use scope id,
* otherwise the session lookup will always fail
* and we'll have multiple sessions showing up.
*
* This problem only happens with single hop
* since it is not possible to have link-local
* address for multi hop sessions.
*/
if (bpc->bpc_ipv4 == false
&& IN6_IS_ADDR_LINKLOCAL(
&bpc->bpc_peer.sa_sin6.sin6_addr))
bpc->bpc_peer.sa_sin6.sin6_scope_id =
ptm_bfd_fetch_ifindex(bpc->bpc_localif);
}
}

0 comments on commit dcc39aa

Please sign in to comment.
You can’t perform that action at this time.