diff -uprN bird-1.2.0/proto/bgp/packets.c bird-1.2.0-new/proto/bgp/packets.c --- bird-1.2.0/proto/bgp/packets.c 2010-01-14 11:06:27.000000000 +0100 +++ bird-1.2.0-new/proto/bgp/packets.c 2010-01-28 19:14:39.000000000 +0100 @@ -1001,6 +1001,10 @@ bgp_rx_update(struct bgp_conn *conn, byt BGP_TRACE_RL(&rl_rcv_update, D_PACKETS, "Got UPDATE"); + /* Workaround for some BGP implementations that skip initial KEEPALIVE */ + if (conn->state == BS_OPENCONFIRM) + bgp_conn_enter_established_state(conn); + if (conn->state != BS_ESTABLISHED) { bgp_error(conn, 5, 0, NULL, 0); return; } bgp_start_timer(conn->hold_timer, conn->hold_time);