X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fdiscovery.c;h=d7189fc6f1fdf25dc0bb6de1ad2763ac2de6b90a;hb=3ff4f87161e4e82eec2393db067cf57c5721ea0b;hp=372c3afe10cf117d13340761993e60a149c8ae24;hpb=67a4917b07031b387beafaedce413b4207214059;p=sliver-openvswitch.git diff --git a/ofproto/discovery.c b/ofproto/discovery.c index 372c3afe1..d7189fc6f 100644 --- a/ofproto/discovery.c +++ b/ofproto/discovery.c @@ -18,6 +18,7 @@ #include "discovery.h" #include #include +#include #include #include #include @@ -29,12 +30,13 @@ #include "openflow/openflow.h" #include "packets.h" #include "status.h" -#include "vconn-ssl.h" - -#define THIS_MODULE VLM_discovery +#include "stream-ssl.h" #include "vlog.h" +VLOG_DEFINE_THIS_MODULE(discovery) + struct discovery { + char *dpif_name; char *re; bool update_resolv_conf; regex_t *regex; @@ -58,7 +60,7 @@ discovery_status_cb(struct status_reply *sr, void *d_) if (d->dhcp) { status_reply_put(sr, "state=%s", dhclient_get_state(d->dhcp)); status_reply_put(sr, "state-elapsed=%u", - dhclient_get_state_elapsed(d->dhcp)); + dhclient_get_state_elapsed(d->dhcp)); if (dhclient_is_bound(d->dhcp)) { uint32_t ip = dhclient_get_ip(d->dhcp); uint32_t netmask = dhclient_get_netmask(d->dhcp); @@ -102,7 +104,9 @@ discovery_create(const char *re, bool update_resolv_conf, char local_name[IF_NAMESIZE]; int error; - d = xcalloc(1, sizeof *d); + d = xzalloc(sizeof *d); + + d->dpif_name = xstrdup(dpif_base_name(dpif)); /* Controller regular expression. */ error = discovery_set_accept_controller_re(d, re); @@ -115,13 +119,15 @@ discovery_create(const char *re, bool update_resolv_conf, error = dpif_port_get_name(dpif, ODPP_LOCAL, local_name, sizeof local_name); if (error) { - VLOG_ERR("failed to query datapath local port: %s", strerror(error)); + VLOG_ERR("%s: failed to query datapath local port: %s", + d->dpif_name, strerror(error)); goto error_regfree; } error = dhclient_create(local_name, modify_dhcp_request, validate_dhcp_offer, d, &d->dhcp); if (error) { - VLOG_ERR("failed to initialize DHCP client: %s", strerror(error)); + VLOG_ERR("%s: failed to initialize DHCP client: %s", + d->dpif_name, strerror(error)); goto error_regfree; } dhclient_set_max_timeout(d->dhcp, 3); @@ -137,6 +143,7 @@ error_regfree: regfree(d->regex); free(d->regex); error_free: + free(d->dpif_name); free(d); *discoveryp = 0; return error; @@ -151,10 +158,17 @@ discovery_destroy(struct discovery *d) free(d->regex); dhclient_destroy(d->dhcp); switch_status_unregister(d->ss_cat); + free(d->dpif_name); free(d); } } +bool +discovery_get_update_resolv_conf(const struct discovery *d) +{ + return d->update_resolv_conf; +} + void discovery_set_update_resolv_conf(struct discovery *d, bool update_resolv_conf) @@ -162,6 +176,12 @@ discovery_set_update_resolv_conf(struct discovery *d, d->update_resolv_conf = update_resolv_conf; } +const char * +discovery_get_accept_controller_re(const struct discovery *d) +{ + return d->re; +} + int discovery_set_accept_controller_re(struct discovery *d, const char *re_) { @@ -169,7 +189,7 @@ discovery_set_accept_controller_re(struct discovery *d, const char *re_) int error; char *re; - re = (!re_ ? xstrdup(vconn_ssl_is_configured() ? "^ssl:.*" : "^tcp:.*") + re = (!re_ ? xstrdup(stream_ssl_is_configured() ? "^ssl:.*" : "^tcp:.*") : re_[0] == '^' ? xstrdup(re_) : xasprintf("^%s", re_)); regex = xmalloc(sizeof *regex); error = regcomp(regex, re, REG_NOSUB | REG_EXTENDED); @@ -177,7 +197,7 @@ discovery_set_accept_controller_re(struct discovery *d, const char *re_) size_t length = regerror(error, regex, NULL, 0); char *buffer = xmalloc(length); regerror(error, regex, buffer, length); - VLOG_WARN("%s: %s", re, buffer); + VLOG_WARN("%s: %s: %s", d->dpif_name, re, buffer); free(regex); free(re); return EINVAL; @@ -198,7 +218,7 @@ void discovery_question_connectivity(struct discovery *d) { if (d->dhcp) { - dhclient_force_renew(d->dhcp, 15); + dhclient_force_renew(d->dhcp, 15); } } @@ -223,12 +243,14 @@ discovery_run(struct discovery *d, char **controller_name) if (dhclient_is_bound(d->dhcp)) { *controller_name = dhcp_msg_get_string(dhclient_get_config(d->dhcp), DHCP_CODE_OFP_CONTROLLER_VCONN); - VLOG_INFO("%s: discovered controller", *controller_name); + VLOG_INFO("%s: discovered controller %s", + d->dpif_name, *controller_name); d->n_changes++; } else { *controller_name = NULL; if (d->n_changes) { - VLOG_INFO("discovered controller no longer available"); + VLOG_INFO("%s: discovered controller no longer available", + d->dpif_name); d->n_changes++; } } @@ -239,7 +261,7 @@ void discovery_wait(struct discovery *d) { if (d->dhcp) { - dhclient_wait(d->dhcp); + dhclient_wait(d->dhcp); } } @@ -258,13 +280,14 @@ validate_dhcp_offer(const struct dhcp_msg *msg, void *d_) vconn_name = dhcp_msg_get_string(msg, DHCP_CODE_OFP_CONTROLLER_VCONN); if (!vconn_name) { - VLOG_WARN_RL(&rl, "rejecting DHCP offer missing controller vconn"); + VLOG_WARN_RL(&rl, "%s: rejecting DHCP offer missing controller vconn", + d->dpif_name); return false; } accept = !regexec(d->regex, vconn_name, 0, NULL, 0); if (!accept) { - VLOG_WARN_RL(&rl, "rejecting controller vconn that fails to match %s", - d->re); + VLOG_WARN_RL(&rl, "%s: rejecting controller vconn that fails to " + "match %s", d->dpif_name, d->re); } free(vconn_name); return accept;