Пример #1
0
int
main(int argc, char *argv[])
{
    struct rconn *rconn;
    int error;

    set_program_name(argv[0]);
    register_fault_handlers();
    time_init();
    vlog_init();
    parse_options(argc, argv);
    signal(SIGPIPE, SIG_IGN);

    if (argc - optind != 1) {
        ofp_fatal(0, "missing controller argument; use --help for usage");
    }


    rconn = rconn_create(60, max_backoff);
    error = rconn_connect(rconn, argv[optind]);
    if (error == EAFNOSUPPORT) {
        ofp_fatal(0, "no support for %s vconn", argv[optind]);
    }
    error = dp_new(&dp, dpid, rconn);
    if (listen_pvconn_name) {
        struct pvconn *listen_pvconn;
        int retval;

        retval = pvconn_open(listen_pvconn_name, &listen_pvconn);
        if (retval && retval != EAGAIN) {
            ofp_fatal(retval, "opening %s", listen_pvconn_name);
        }
        dp_add_listen_pvconn(dp, listen_pvconn);
    }
    if (error) {
        ofp_fatal(error, "could not create datapath");
    }
    if (port_list) {
        add_ports(dp, port_list); 
    }

    die_if_already_running();
    daemonize();

    error = vlog_server_listen(NULL, NULL);
    if (error) {
        ofp_fatal(error, "could not listen for vlog connections");
    }

    for (;;) {
        dp_run(dp);
        dp_wait(dp);
        poll_block();
    }

    return 0;
}
Пример #2
0
void dp_baselist_run(dp_baselist_t *bl, uint32_t rmask) {
 uint32_t i;
 /* printf("-cd dp_baselist_run\n"); */
 if (bl && bl->valid) {
  for (i=0;i<bl->count;i++) {
   /* printf("-ci- running object %s\n",dp_get_name(bl->list[i])); */
   dp_run(bl->list[i],rmask);
  }
 }
}
Пример #3
0
int
udatapath_cmd(int argc, char *argv[])
{
    int n_listeners;
    int error;
    int i;

    set_program_name(argv[0]);
    register_fault_handlers();
    time_init();
    vlog_init();

    dp = dp_new();

    parse_options(dp, argc, argv);
    signal(SIGPIPE, SIG_IGN);

    if (argc - optind < 1) {
        OFP_FATAL(0, "at least one listener argument is required; "
          "use --help for usage");
    }

    if (use_multiple_connections && (argc - optind) % 2 != 0)
        OFP_FATAL(0, "when using multiple connections, you must specify an even number of listeners");
        
    n_listeners = 0;
    for (i = optind; i < argc; i += 2) {
        const char *pvconn_name = argv[i];
        const char *pvconn_name_aux = NULL;
        if (use_multiple_connections)
            pvconn_name_aux = argv[i + 1];

        struct pvconn *pvconn, *pvconn_aux = NULL;
        int retval, retval_aux;

        retval = pvconn_open(pvconn_name, &pvconn);
        if (!retval || retval == EAGAIN) {
            // Get another listener if we are using auxiliary connections
            if (use_multiple_connections) {
                retval_aux = pvconn_open(pvconn_name_aux, &pvconn_aux);
                if (retval_aux && retval_aux != EAGAIN) {
                    ofp_error(retval_aux, "opening auxiliary %s", pvconn_name_aux);
                    pvconn_aux = NULL;
                }
            }
            dp_add_pvconn(dp, pvconn, pvconn_aux);
            n_listeners++;
        } else {
            ofp_error(retval, "opening %s", pvconn_name);
        }
    }
    if (n_listeners == 0) {
        OFP_FATAL(0, "could not listen for any connections");
    }

    if (port_list != NULL) {
        add_ports(dp, port_list);
    }
    if (local_port != NULL) {
        error = dp_ports_add_local(dp, local_port);
        if (error) {
            OFP_FATAL(error, "failed to add local port %s", local_port);
        }
    }

    error = vlog_server_listen(NULL, NULL);
    if (error) {
        OFP_FATAL(error, "could not listen for vlog connections");
    }

    die_if_already_running();
    daemonize();

    for (;;) {

        dp_run(dp);
        dp_wait(dp);
        poll_block();

    }

    return 0;
}
Пример #4
0
int
udatapath_cmd(int argc, char *argv[])
{
    int n_listeners;
    int error;
    int i;

    set_program_name(argv[0]);
    register_fault_handlers();
    time_init();
    vlog_init();
    parse_options(argc, argv);
    signal(SIGPIPE, SIG_IGN);

    if (argc - optind < 1) {
        OFP_FATAL(0, "at least one listener argument is required; "
          "use --help for usage");
    }

    error = dp_new(&dp, dpid);

    n_listeners = 0;
    for (i = optind; i < argc; i++) {
        const char *pvconn_name = argv[i];
        struct pvconn *pvconn;
        int retval;

        retval = pvconn_open(pvconn_name, &pvconn);
        if (!retval || retval == EAGAIN) {
            dp_add_pvconn(dp, pvconn);
            n_listeners++;
        } else {
            ofp_error(retval, "opening %s", pvconn_name);
        }
    }
    if (!n_listeners) {
        OFP_FATAL(0, "could not listen for any connections");
    }

    if (port_list) {
        add_ports(dp, port_list);
    }
    if (local_port) {
        error = dp_add_local_port(dp, local_port, 0);
        if (error) {
            OFP_FATAL(error, "failed to add local port %s", local_port);
        }
    }

    error = vlog_server_listen(NULL, NULL);
    if (error) {
        OFP_FATAL(error, "could not listen for vlog connections");
    }

    die_if_already_running();
    daemonize();

    for (;;) {
        dp_run(dp);
        dp_wait(dp);
        poll_block();
    }

    return 0;
}
Пример #5
0
int
udatapath_cmd(int argc, char *argv[])
{
    int n_listeners;
    int error;
    int i;

    set_program_name(argv[0]);
    register_fault_handlers();
    time_init();
    vlog_init();
    parse_options(argc, argv);
    signal(SIGPIPE, SIG_IGN);

    if (argc - optind < 1) {
        OFP_FATAL(0, "at least one listener argument is required; "
          "use --help for usage");
    }

    error = dp_new(&dp, dpid);
    if (error) {
        OFP_FATAL(error, "Failed to create datapath.  Exiting.");
    }
#if defined(OF_HW_PLAT)
    if (got_mac) {
        memcpy(dp->dp_mgmt.mac, dp_mac, ETH_ADDR_LEN);
    } else {  /* Use OF OUI and 3 bytes of DPID */
        dp->dp_mgmt.mac[0] = 0;
        dp->dp_mgmt.mac[1] = 0x26;
        dp->dp_mgmt.mac[2] = 0xe1;
        dp->dp_mgmt.mac[3] = dp->id & 0xff;
        dp->dp_mgmt.mac[4] = (dp->id >> 8) & 0xff;
        dp->dp_mgmt.mac[5] = (dp->id >> 16) & 0xff;
    }
    dp_port_add_state_set(dp, port_add_state);

    dp->dp_mgmt.enabled = dp_mgmt;
    dp->dp_mgmt.port_fixed = dp_mgmt_port_fixed;
    dp->dp_mgmt.port = dp_mgmt_port;
    dp->dp_mgmt.vid_fixed = dp_mgmt_vid_fixed;
    dp->dp_mgmt.vid = dp_mgmt_vid;
    if (dp_mgmt_oob) {
        if (!dp->dp_mgmt.vid_fixed && !dp->dp_mgmt.port_fixed) {
            printf("WARNING:  dp_mgmt misconfig: OOB requires fixed port\n");
            printf("WARNING:  Removing OOB management\n");
            fprintf(stderr, "WARNING:  dp_mgmt misconfig: OOB requires "
                    "fixed port\n");
            fprintf(stderr, "WARNING:  Removing OOB management\n");
            dp_mgmt_oob = false;
        }
    }
    dp->dp_mgmt.oob = dp_mgmt_oob;
    dp_mgmt_set(dp);

    /* Get hw_desc/dp_desc from hw-lib if not set by command args */
    if (!hw_desc_set && dp->hw_drv != NULL && dp->hw_drv->hw_desc != NULL) {
        strncpy(hw_desc, dp->hw_drv->hw_desc, sizeof(hw_desc) - 1);
    }
    if (!dp_desc_set && dp->hw_drv != NULL && dp->hw_drv->dp_desc != NULL) {
        strncpy(dp->dp_desc, dp->hw_drv->dp_desc, sizeof(dp->dp_desc) - 1);
    }
#endif

    n_listeners = 0;
    for (i = optind; i < argc; i++) {
        const char *pvconn_name = argv[i];
        struct pvconn *pvconn;
        int retval;

        retval = pvconn_open(pvconn_name, &pvconn);
        if (!retval || retval == EAGAIN) {
            dp_add_pvconn(dp, pvconn);
            n_listeners++;
        } else {
            ofp_error(retval, "opening %s", pvconn_name);
        }
    }
    if (!n_listeners) {
        OFP_FATAL(0, "could not listen for any connections");
    }

    if (port_list) {
        add_ports(dp, port_list);
    }
    if (max_port_set) {
        printf("Adding port range %d to %d\n", min_port, max_port);
        add_ports_range(dp, min_port, max_port);
    }
    if (local_port) {
        printf("Adding local port\n");
        error = dp_add_local_port(dp, local_port, 0);
        if (error) {
            OFP_FATAL(error, "failed to add local port %s", local_port);
        }
    }

    error = vlog_server_listen(NULL, NULL);
    if (error) {
        OFP_FATAL(error, "could not listen for vlog connections");
    }

    die_if_already_running();
    daemonize();

    WATCHDOG_START;

    dp->rx_enabled = 1;

    system("touch /tmp/ofswd-ready");

    printf("Entering event loop");
    for (;;) {
        WATCHDOG_STROKE;
        dp_run(dp);
        dp_wait(dp);
        poll_block();
    }

    WATCHDOG_STOP;

    return 0;
}