Commit eb436e16 authored by Ondřej Filip's avatar Ondřej Filip

NBMA networks seems to work, but this should be better. :-)

parent e5b5d18c
......@@ -113,7 +113,14 @@ ospf_lsack_delay_tx(struct ospf_neighbor *n)
}
else
{
sk_send_to_agt(sk, len, ifa, NEIGHBOR_EXCHANGE);
if((ifa->state==OSPF_IS_DR)||(ifa->state==OSPF_IS_BACKUP))
{
sk_send_to_agt(sk, len, ifa, NEIGHBOR_EXCHANGE);
}
else
{
sk_send_to_bdr(sk, len, ifa);
}
}
fill_ospf_pkt_hdr(n->ifa, pk, LSACK_P);
......
......@@ -149,7 +149,9 @@ flood_lsa(struct ospf_neighbor *n, struct ospf_lsa_header *hn,
if(ifa->type==OSPF_IT_NBMA)
{
sk_send_to_agt(sk ,len, ifa, NEIGHBOR_EXCHANGE);
if((ifa->state==OSPF_IS_BACKUP)||(ifa->state==OSPF_IS_DR))
sk_send_to_agt(sk ,len, ifa, NEIGHBOR_EXCHANGE);
else sk_send_to_bdr(sk ,len, ifa);
}
else
{
......
......@@ -192,3 +192,15 @@ sk_send_to_agt(sock *sk, u16 len, struct ospf_iface *ifa, u8 state)
if(n->state>=state)
sk_send_to(sk, len, n->ip, OSPF_PROTO);
}
void
sk_send_to_bdr(sock *sk, u16 len, struct ospf_iface *ifa)
{
struct ospf_neighbor *n;
if(ipa_compare(ifa->drip,ipa_from_u32(0))!=0)
sk_send_to(sk, len, ifa->drip, OSPF_PROTO);
if(ipa_compare(ifa->bdrip,ipa_from_u32(0))!=0)
sk_send_to(sk, len, ifa->bdrip, OSPF_PROTO);
}
......@@ -17,5 +17,6 @@ int ospf_rx_hook(sock *sk, int size);
void ospf_tx_hook(sock *sk);
void ospf_err_hook(sock *sk, int err);
void sk_send_to_agt(sock *sk, u16 len, struct ospf_iface *ifa, u8 state);
void sk_send_to_bdr(sock *sk, u16 len, struct ospf_iface *ifa);
#endif /* _BIRD_OSPF_PACKET_H_ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment