X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ofproto%2Fofproto.c;h=46b577afbf2414fe06789f146fe98ea078f03343;hb=88258e0034cc7ca6ffde0974f1fb92d26289ad6a;hp=32757b578b8027048e51fa26d8d62ba33c135b8d;hpb=c475ae67206ef40a32b07b886c2d619e9c170440;p=openvswitch diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 32757b57..46b577af 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -48,12 +48,12 @@ #include "shash.h" #include "status.h" #include "stp.h" +#include "stream-ssl.h" #include "svec.h" #include "tag.h" #include "timeval.h" #include "unixctl.h" #include "vconn.h" -#include "vconn-ssl.h" #include "xtoxll.h" #define THIS_MODULE VLM_ofproto @@ -345,13 +345,6 @@ ofproto_create(const char *datapath, const struct ofhooks *ofhooks, void *aux, p->ss_cat = switch_status_register(p->switch_status, "remote", rconn_status_cb, p->controller->rconn); - /* Almost done... */ - error = init_ports(p); - if (error) { - ofproto_destroy(p); - return error; - } - /* Pick final datapath ID. */ p->datapath_id = pick_datapath_id(p); VLOG_INFO("using datapath ID %012"PRIx64, p->datapath_id); @@ -743,6 +736,10 @@ ofproto_run1(struct ofproto *p) int error; int i; + if (shash_is_empty(&p->port_by_name)) { + init_ports(p); + } + for (i = 0; i < 50; i++) { struct ofpbuf *buf; int error; @@ -1069,13 +1066,19 @@ refresh_port_groups(struct ofproto *p) static struct ofport * make_ofport(const struct odp_port *odp_port) { + struct netdev_options netdev_options; enum netdev_flags flags; struct ofport *ofport; struct netdev *netdev; bool carrier; int error; - error = netdev_open(odp_port->devname, NETDEV_ETH_TYPE_NONE, &netdev); + memset(&netdev_options, 0, sizeof netdev_options); + netdev_options.name = odp_port->devname; + netdev_options.ethertype = NETDEV_ETH_TYPE_NONE; + netdev_options.may_open = true; + + error = netdev_open(&netdev_options, &netdev); if (error) { VLOG_WARN_RL(&rl, "ignoring port %s (%"PRIu16") because netdev %s " "cannot be opened (%s)",