X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utilities%2Fovs-controller.c;h=92b84ae12838b8d9f45c420f654d9b1e50333614;hb=f22716dcca299b863dd72eb193fb1283c5f686da;hp=0e453f48dc3b444f81eb2ce13cbe3289f2cd3d4e;hpb=fe55ad159d8fd396a9e4914a03eea93d096d03b1;p=openvswitch diff --git a/utilities/ovs-controller.c b/utilities/ovs-controller.c index 0e453f48..92b84ae1 100644 --- a/utilities/ovs-controller.c +++ b/utilities/ovs-controller.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009 Nicira Networks. + * Copyright (c) 2008, 2009, 2010 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ #include "command-line.h" #include "compiler.h" #include "daemon.h" -#include "fault.h" #include "learning-switch.h" #include "ofpbuf.h" #include "openflow/openflow.h" @@ -37,9 +36,9 @@ #include "unixctl.h" #include "util.h" #include "vconn.h" - #include "vlog.h" -#define THIS_MODULE VLM_controller + +VLOG_DEFINE_THIS_MODULE(controller) #define MAX_SWITCHES 16 #define MAX_LISTENERS 16 @@ -68,8 +67,14 @@ static int max_idle = 60; * of their messages (for debugging fail-open mode). */ static bool mute = false; +/* -q, --queue: OpenFlow queue to use, or the default queue if UINT32_MAX. */ +static uint32_t queue_id = UINT32_MAX; + +/* --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; @@ -83,10 +88,8 @@ main(int argc, char *argv[]) int retval; int i; + proctitle_init(argc, argv); set_program_name(argv[0]); - register_fault_handlers(); - time_init(); - vlog_init(); parse_options(argc, argv); signal(SIGPIPE, SIG_IGN); @@ -106,7 +109,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; @@ -129,9 +132,9 @@ 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) { - ovs_fatal(retval, "Could not listen for unixctl connections"); + exit(EXIT_FAILURE); } daemonize_complete(); @@ -148,7 +151,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 { @@ -206,12 +209,14 @@ 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); + lswitch_set_queue(sw->lswitch, queue_id); } static int @@ -243,6 +248,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[] = { @@ -252,6 +258,8 @@ 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}, + {"queue", required_argument, 0, 'q'}, + {"unixctl", required_argument, 0, OPT_UNIXCTL}, {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, DAEMON_LONG_OPTIONS, @@ -306,6 +314,14 @@ parse_options(int argc, char *argv[]) } break; + case 'q': + queue_id = atoi(optarg); + break; + + case OPT_UNIXCTL: + unixctl_path = optarg; + break; + case 'h': usage(); @@ -350,6 +366,8 @@ 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" + " -q, --queue=QUEUE OpenFlow queue ID to use for output\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);