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

This commit is contained in:
Ondrej Filip 2000-06-06 00:08:27 +00:00
parent e5b5d18c1c
commit eb436e16fd
4 changed files with 24 additions and 2 deletions

View file

@ -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);

View file

@ -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
{

View file

@ -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);
}

View file

@ -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_ */