#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
return 1;
}
- /* This is deviation from RFC 2328 - neighbours should be identified by
- * IP address on broadcast and NBMA networks.
- */
+#ifdef OSPFv2
+ /* 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);
+#endif
if(!n && (ps->type != HELLO_P))
{