Neighbors on OSPF broadcast networks should be identified by IP address, not RID.
Allows simple support for multiple interfaces to the same network.
This commit is contained in:
parent
4e5fb4b60c
commit
9d1ee13887
1 changed files with 22 additions and 3 deletions
|
@ -242,6 +242,19 @@ ospf_pkt_checkauth(struct ospf_neighbor *n, struct ospf_iface *ifa, struct ospf_
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OSPFv2
|
||||||
|
static inline struct ospf_neighbor *
|
||||||
|
find_neigh_by_ip(struct ospf_iface *ifa, ip_addr ip)
|
||||||
|
{
|
||||||
|
struct ospf_neighbor *n;
|
||||||
|
WALK_LIST(n, ifa->neigh_list)
|
||||||
|
if (ipa_equal(n->ip, ip))
|
||||||
|
return n;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ospf_rx_hook
|
* ospf_rx_hook
|
||||||
|
@ -419,10 +432,16 @@ ospf_rx_hook(sock *sk, int size)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is deviation from RFC 2328 - neighbours should be identified by
|
#ifdef OSPFv2
|
||||||
* IP address on broadcast and NBMA networks.
|
/* In OSPFv2, neighbors are identified by either IP or Router ID, base on network type */
|
||||||
*/
|
struct ospf_neighbor *n;
|
||||||
|
if ((ifa->type == OSPF_IT_BCAST) || (ifa->type == OSPF_IT_NBMA))
|
||||||
|
n = find_neigh_by_ip(ifa, sk->faddr);
|
||||||
|
else
|
||||||
|
n = find_neigh(ifa, rid);
|
||||||
|
#else
|
||||||
struct ospf_neighbor *n = find_neigh(ifa, rid);
|
struct ospf_neighbor *n = find_neigh(ifa, rid);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!n && (ps->type != HELLO_P))
|
if(!n && (ps->type != HELLO_P))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue