Hi! We are having a problem were sometimes bird ospf neighbor state machine becomes stuck in a 2-way state. This happens when two broadcast interfaces are connected, one of them is running quagga and the other end is running bird. The quagga router has prio 0 and bird prio 5, i.e. quagga is not eligible to become DR.
Why does not bird transition from 2-way to ExStart? I believe the following lines causes me.dr to become 0.0.0.0. Bird adds itself as an eligible router as described in section 10.4, but with the address of zero? me.dr = ospf_is_v2(p) ? ipa_to_u32(ifa->drip) : ifa->drid; me.bdr = ospf_is_v2(p) ? ipa_to_u32(ifa->bdrip) : ifa->bdrid; me.iface_id = ifa->iface_id; add_tail(&ifa->neigh_list, NODE & me); nbdr = elect_bdr(p, ifa->neigh_list); ndr = elect_dr(p, ifa->neigh_list); Due to the above, I believe later in "can_do_adj" the following will not become true; case OSPF_IS_DROTHER: if (((n->rid == ifa->drid) || (n->rid == ifa->bdrid)) && (n->state >= NEIGHBOR_2WAY)) i = 1; The quagga router says that bird is the DR, see tcpdump below and bird logs below; bird> show ospf interface ospfv2_1: Interface eth1 (10.210.138.68/30) Type: broadcast Area: 2.2.2.2 (33686018) State: DROther Priority: 5 Cost: 10 Hello timer: 10 Wait timer: 40 Dead timer: 40 Retransmit timer: 5 Designated router (ID): 0.0.0.0 Designated router (IP): 0.0.0.0 Backup designated router (ID): 0.0.0.0 Backup designated router (IP): 0.0.0.0 bird> show ospf neighbors ospfv2_1: Router ID Pri State DTime Interface Router IP 10.210.138.70 0 2-Way/Other 35.744 eth1 10.210.138.7 0 A tcpdump showing the OSPF hellos between the two routers. 10.210.138.69 is running bird and 10.210.138.70 is running quagga. # tcpdump -r ospf_bird.pcap -Z root -v reading from file ospf_bird.pcap, link-type EN10MB (Ethernet) 09:16:31.311431 IP (tos 0xc0, ttl 1, id 44687, offset 0, flags [none], proto OSPF (89), length 52) 10.210.138.70 > 10.210.138.69: OSPFv2, Database Description, length: 32 Router-ID: 10.210.138.70, Area 2.2.2.2, Authentication Type: none (0) Options: [External], DD Flags: [Init, More, Master] 09:16:34.705820 IP (tos 0xc0, ttl 1, id 55304, offset 0, flags [none], proto OSPF (89), length 68) 10.210.138.69 > 224.0.0.5: OSPFv2, Hello, length: 48 Router-ID: 10.210.138.69, Area 2.2.2.2, Authentication Type: none (0) Options: [External] Hello Timer: 10s, Dead Timer 40s, Mask: 255.255.255.252, Priority: 5 Neighbor List: 10.210.138.70 09:16:36.292044 IP (tos 0xc0, ttl 1, id 44688, offset 0, flags [none], proto OSPF (89), length 68) 10.210.138.70 > 224.0.0.5: OSPFv2, Hello, length: 48 Router-ID: 10.210.138.70, Area 2.2.2.2, Authentication Type: none (0) Options: [External] Hello Timer: 10s, Dead Timer 40s, Mask: 255.255.255.252, Priority: 0 Designated Router 10.210.138.69, Backup Designated Router 10.210.138.69 Neighbor List: 10.210.138.69 09:16:36.311317 IP (tos 0xc0, ttl 1, id 44689, offset 0, flags [none], proto OSPF (89), length 52) 10.210.138.70 > 10.210.138.69: OSPFv2, Database Description, length: 32 Router-ID: 10.210.138.70, Area 2.2.2.2, Authentication Type: none (0) Options: [External], DD Flags: [Init, More, Master] #