OSPF over openvpn; adjacency problems
Thorsten Alteholz
bird-list at alteholz.de
Wed Oct 2 20:49:43 CEST 2019
Hi Kees and Ondrej,
thanks a lot for your answers and your suggestions.
I am rather new to the bird codebase and please forgive me if I make a
blunder, but from my point of view openvpn should not be blamed here.
I dug a bit into the code and ospf_rx_hook() got all needed packages. They
were just silently filtered. I used the version in Debian Buster (1.6.6)
and Unstable (1.6.8) and after adding the patch below, I got an adjacent
neighbor over the openvpn link in state "Full/PtP" and in a different
area one with "Full/BDR". Probably I broke something else ...
Best regards
Thorsten
Index: bird-1.6.6/proto/ospf/packet.c
===================================================================
--- bird-1.6.6.orig/proto/ospf/packet.c
+++ bird-1.6.6/proto/ospf/packet.c
@@ -230,10 +230,11 @@ ospf_rx_hook(sock *sk, uint len)
if (ifa->state <= OSPF_IS_LOOP)
return 1;
- int src_local, dst_local, dst_mcast;
+ int src_local, dst_local, dst_mcast, link;
src_local = ipa_in_net(sk->faddr, ifa->addr->prefix, ifa->addr->pxlen);
dst_local = ipa_equal(sk->laddr, ifa->addr->ip);
dst_mcast = ipa_equal(sk->laddr, ifa->all_routers) ||
ipa_equal(sk->laddr, ifa->des_routers);
+ link = (ifa->addr->pxlen == MAX_PREFIX_LENGTH);
if (ospf_is_v2(p))
{
@@ -243,7 +244,7 @@ ospf_rx_hook(sock *sk, uint len)
* that (src_local || dst_local), therefore we are eliminating all
* such cases.
*/
- if (dst_mcast && !src_local)
+ if (!dst_mcast && !src_local && !link)
return 1;
if (!dst_mcast && !dst_local)
return 1;
@@ -322,10 +322,6 @@ ospf_rx_hook(sock *sk, uint len)
if (instance_id != ifa->instance_id)
return 1;
- /* It is real iface, source should be local (in OSPFv2) */
- if (ospf_is_v2(p) && !src_local)
- DROP1("strange source address");
-
goto found;
}
else if ((areaid == 0) && !dst_mcast)
More information about the Bird-users
mailing list