+ if (controller_relay) {
+ /* FIXME: should also fail open when controller_relay is NULL. */
+ failing_open(controller_relay);
+ }
+ if (dhcp) {
+ if (rconn_is_connectivity_questionable(remote_rconn)) {
+ dhclient_force_renew(dhcp, 15);
+ }
+ dhclient_run(dhcp);
+ if (dhclient_changed(dhcp)) {
+ free(controller_name);
+ if (dhclient_is_bound(dhcp)) {
+ controller_name = dhcp_msg_get_string(
+ dhclient_get_config(dhcp),
+ DHCP_CODE_OFP_CONTROLLER_VCONN);
+ VLOG_WARN("%s: discovered controller",
+ controller_name);
+ rconn_connect(remote_rconn, controller_name);
+ } else if (controller_name) {
+ VLOG_WARN("%s: discover controller no longer available",
+ controller_name);
+ controller_name = NULL;
+ rconn_disconnect(remote_rconn);
+ }
+ }
+ }