When ovs-vswitchd has dropped its connection to ovn-controller, rconn_get_version() will return -1. OpenFlow messages built by ofctrl_put() in this condition will have an invalid OpenFlow version value of 255, which eventually leads to ovn-controller crashing due to an assertion failure in raw_instance_get().
Avoid this crash by improving the ofctrl_can_put() test to ensure that the negotiated version is available. (Note that checking rconn_is_connected() would not be sufficient since rconn S_IDLE state is considered "connected" but version negotiation is not necessarily complete). Signed-off-by: Lance Richardson <[email protected]> --- ovn/controller/ofctrl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c index 277d3d7..5aff230 100644 --- a/ovn/controller/ofctrl.c +++ b/ovn/controller/ofctrl.c @@ -817,7 +817,8 @@ bool ofctrl_can_put(void) { if (state != S_UPDATE_FLOWS - || rconn_packet_counter_n_packets(tx_counter)) { + || rconn_packet_counter_n_packets(tx_counter) + || rconn_get_version(swconn) < 0) { return false; } return true; -- 2.9.4 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
