mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-17 16:48:43 +00:00
NBMA networks seems to work, but this should be better. :-)
This commit is contained in:
parent
e5b5d18c1c
commit
eb436e16fd
@ -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_ */
|
||||
|
Loading…
Reference in New Issue
Block a user