X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=utilities%2Fovs-controller.c;h=f4358e9f352fb9276625da74982505e8b5f26c7b;hb=656a0e37da750d8e3e7bde3fe27e45d1a332f15a;hp=0497d9a48154ea1cd1c34500b84cabf9db91210b;hpb=a0bc29a541fc7dc6e20137d5558e2094d614e6ab;p=sliver-openvswitch.git diff --git a/utilities/ovs-controller.c b/utilities/ovs-controller.c index 0497d9a48..f4358e9f3 100644 --- a/utilities/ovs-controller.c +++ b/utilities/ovs-controller.c @@ -67,8 +67,11 @@ static int max_idle = 60; * of their messages (for debugging fail-open mode). */ static bool mute = false; +/* --unixctl: Name of unixctl socket, or null to use the default. */ +static char *unixctl_path = NULL; + static int do_switching(struct switch_ *); -static void new_switch(struct switch_ *, struct vconn *, const char *name); +static void new_switch(struct switch_ *, struct vconn *); static void parse_options(int argc, char *argv[]); static void usage(void) NO_RETURN; @@ -105,7 +108,7 @@ main(int argc, char *argv[]) if (n_switches >= MAX_SWITCHES) { ovs_fatal(0, "max %d switch connections", n_switches); } - new_switch(&switches[n_switches++], vconn, name); + new_switch(&switches[n_switches++], vconn); continue; } else if (retval == EAFNOSUPPORT) { struct pvconn *pvconn; @@ -128,7 +131,7 @@ main(int argc, char *argv[]) die_if_already_running(); daemonize_start(); - retval = unixctl_server_create(NULL, &unixctl); + retval = unixctl_server_create(unixctl_path, &unixctl); if (retval) { exit(EXIT_FAILURE); } @@ -147,7 +150,7 @@ main(int argc, char *argv[]) retval = pvconn_accept(listeners[i], OFP_VERSION, &new_vconn); if (!retval || retval == EAGAIN) { if (!retval) { - new_switch(&switches[n_switches++], new_vconn, "tcp"); + new_switch(&switches[n_switches++], new_vconn); } i++; } else { @@ -205,9 +208,10 @@ main(int argc, char *argv[]) } static void -new_switch(struct switch_ *sw, struct vconn *vconn, const char *name) +new_switch(struct switch_ *sw, struct vconn *vconn) { - sw->rconn = rconn_new_from_vconn(name, vconn); + sw->rconn = rconn_create(60, 0); + rconn_connect_unreliably(sw->rconn, vconn, NULL); sw->lswitch = lswitch_create(sw->rconn, learn_macs, exact_flows, set_up_flows ? max_idle : -1, action_normal); @@ -242,6 +246,7 @@ parse_options(int argc, char *argv[]) OPT_MAX_IDLE = UCHAR_MAX + 1, OPT_PEER_CA_CERT, OPT_MUTE, + OPT_UNIXCTL, VLOG_OPTION_ENUMS }; static struct option long_options[] = { @@ -251,6 +256,7 @@ parse_options(int argc, char *argv[]) {"wildcard", no_argument, 0, 'w'}, {"max-idle", required_argument, 0, OPT_MAX_IDLE}, {"mute", no_argument, 0, OPT_MUTE}, + {"unixctl", required_argument, 0, OPT_UNIXCTL}, {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, DAEMON_LONG_OPTIONS, @@ -305,6 +311,10 @@ parse_options(int argc, char *argv[]) } break; + case OPT_UNIXCTL: + unixctl_path = optarg; + break; + case 'h': usage(); @@ -349,6 +359,7 @@ usage(void) " --max-idle=SECS max idle time for new flows\n" " -N, --normal use OFPAT_NORMAL action\n" " -w, --wildcard use wildcards, not exact-match rules\n" + " --unixctl=SOCKET override default control socket name\n" " -h, --help display this help message\n" " -V, --version display version information\n"); exit(EXIT_SUCCESS);