Drop unnecessary conditional and incorrect comment.
[sliver-openvswitch.git] / secchan / secchan.c
index cc9e3bc..34c13e7 100644 (file)
@@ -67,8 +67,6 @@
 #include "vlog.h"
 #define THIS_MODULE VLM_secchan
 
-#include "ofp-print.h"
-
 static const char *listen_vconn_name;
 
 struct half {
@@ -135,6 +133,10 @@ static struct dhclient *dhcp;
 static const char *accept_controller_re;
 static regex_t accept_controller_regex;
 
+/* --no-resolv-conf: Update resolv.conf upon successful controller
+ * discovery? */
+static bool update_resolv_conf = true;
+
 static void parse_options(int argc, char *argv[]);
 static void usage(void) NO_RETURN;
 
@@ -289,18 +291,20 @@ main(int argc, char *argv[])
                 new_management_connection(nl_name, new_remote);
             }
         }
-        if (controller_relay) {
-            /* FIXME: should also fail open when controller_relay is NULL. */
-            failing_open(controller_relay); 
-        }
+        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);
+                dhclient_configure_netdev(dhcp);
+                if (update_resolv_conf) {
+                    dhclient_update_resolv_conf(dhcp);
+                }
+
                 if (dhclient_is_bound(dhcp)) {
+                    free(controller_name);
                     controller_name = dhcp_msg_get_string(
                         dhclient_get_config(dhcp),
                         DHCP_CODE_OFP_CONTROLLER_VCONN);
@@ -310,6 +314,7 @@ main(int argc, char *argv[])
                 } else if (controller_name) {
                     VLOG_WARN("%s: discover controller no longer available",
                               controller_name);
+                    free(controller_name);
                     controller_name = NULL;
                     rconn_disconnect(remote_rconn);
                 }
@@ -667,6 +672,10 @@ validate_dhcp_offer(const struct dhcp_msg *msg, void *aux)
         return false;
     }
     accept = !regexec(&accept_controller_regex, vconn_name, 0, NULL, 0);
+    if (!accept) {
+        VLOG_WARN("rejecting controller vconn that fails to match %s",
+                  accept_controller_re);
+    }
     free(vconn_name);
     return accept;
 }
@@ -676,12 +685,14 @@ parse_options(int argc, char *argv[])
 {
     enum {
         OPT_ACCEPT_VCONN = UCHAR_MAX + 1,
+        OPT_NO_RESOLV_CONF,
         OPT_INACTIVITY_PROBE,
         OPT_MAX_IDLE,
         OPT_MAX_BACKOFF
     };
     static struct option long_options[] = {
         {"accept-vconn", required_argument, 0, OPT_ACCEPT_VCONN},
+        {"no-resolv-conf", no_argument, 0, OPT_NO_RESOLV_CONF},
         {"fail",        required_argument, 0, 'f'},
         {"inactivity-probe", required_argument, 0, OPT_INACTIVITY_PROBE},
         {"max-idle",    required_argument, 0, OPT_MAX_IDLE},
@@ -712,6 +723,10 @@ parse_options(int argc, char *argv[])
                                     : xasprintf("^%s", optarg));
             break;
 
+        case OPT_NO_RESOLV_CONF:
+            update_resolv_conf = false;
+            break;
+
         case 'f':
             if (!strcmp(optarg, "open")) {
                 fail_mode = FAIL_OPEN;
@@ -756,7 +771,7 @@ parse_options(int argc, char *argv[])
             break;
 
         case 'P':
-            set_pidfile(optarg ? optarg : "secchan.pid");
+            set_pidfile(optarg);
             break;
 
         case 'l':
@@ -799,8 +814,10 @@ usage(void)
            "omitted, then secchan performs controller autodiscovery.\n",
            program_name, program_name);
     vconn_usage(true, true);
-    printf("\nNetworking options:\n"
+    printf("\nController discovery options:\n"
            "  --accept-vconn=REGEX    accept matching discovered controllers\n"
+           "  --no-resolv-conf        do not update /etc/resolv.conf\n"
+           "\nNetworking options:\n"
            "  -f, --fail=open|closed  when controller connection fails:\n"
            "                            closed: drop all packets\n"
            "                            open (default): act as learning switch\n"