+ /* Local vconns. */
+ dp_parse_name(argv[0], &s->dp_name, &s->dp_type);
+
+ /* Figure out controller names. */
+ s->run_forever = false;
+ if (!controllers.n) {
+ svec_add_nocopy(&controllers, xasprintf("punix:%s/%s.mgmt",
+ ovs_rundir(), s->dp_name));
+ }
+ for (i = 1; i < argc; i++) {
+ if (!strcmp(argv[i], "none")) {
+ s->run_forever = true;
+ } else {
+ svec_add(&controllers, argv[i]);
+ }
+ }
+ if (argc < 2) {
+ svec_add(&controllers, "discover");
+ }
+
+ /* Set up controllers. */
+ s->n_controllers = controllers.n;
+ s->controllers = xmalloc(s->n_controllers * sizeof *s->controllers);
+ for (i = 0; i < s->n_controllers; i++) {
+ s->controllers[i] = controller_opts;
+ s->controllers[i].target = controllers.names[i];
+ }
+
+ /* Sanity check. */
+ if (controller_opts.band == OFPROTO_OUT_OF_BAND) {
+ for (i = 0; i < s->n_controllers; i++) {
+ if (!strcmp(s->controllers[i].target, "discover")) {
+ ovs_fatal(0, "Cannot perform discovery with out-of-band "
+ "control");
+ }
+ }