main(int argc, char *argv[])
{
struct switch_ switches[MAX_SWITCHES];
- struct vconn *listeners[MAX_LISTENERS];
+ struct pvconn *listeners[MAX_LISTENERS];
int n_switches, n_listeners;
int retval;
int i;
struct vconn *vconn;
int retval;
- retval = vconn_open(name, &vconn);
- if (retval) {
- VLOG_ERR("%s: connect: %s", name, strerror(retval));
- continue;
- }
-
- if (vconn_is_passive(vconn)) {
- if (n_listeners >= MAX_LISTENERS) {
- ofp_fatal(0, "max %d passive connections", n_listeners);
- }
- listeners[n_listeners++] = vconn;
- } else {
+ retval = vconn_open(name, OFP_VERSION, &vconn);
+ if (!retval) {
if (n_switches >= MAX_SWITCHES) {
ofp_fatal(0, "max %d switch connections", n_switches);
}
new_switch(&switches[n_switches++], vconn, name);
+ continue;
+ } else if (retval == EAFNOSUPPORT) {
+ struct pvconn *pvconn;
+ retval = pvconn_open(name, &pvconn);
+ if (!retval) {
+ if (n_listeners >= MAX_LISTENERS) {
+ ofp_fatal(0, "max %d passive connections", n_listeners);
+ }
+ listeners[n_listeners++] = pvconn;
+ }
+ }
+ if (retval) {
+ VLOG_ERR("%s: connect: %s", name, strerror(retval));
}
}
if (n_switches == 0 && n_listeners == 0) {
struct vconn *new_vconn;
int retval;
- retval = vconn_accept(listeners[i], &new_vconn);
+ retval = pvconn_accept(listeners[i], OFP_VERSION, &new_vconn);
if (!retval || retval == EAGAIN) {
if (!retval) {
new_switch(&switches[n_switches++], new_vconn, "tcp");
}
i++;
} else {
- vconn_close(listeners[i]);
+ pvconn_close(listeners[i]);
listeners[i] = listeners[--n_listeners];
}
}
/* Wait for something to happen. */
if (n_switches < MAX_SWITCHES) {
for (i = 0; i < n_listeners; i++) {
- vconn_accept_wait(listeners[i]);
+ pvconn_wait(listeners[i]);
}
}
for (i = 0; i < n_switches; i++) {