static bool
get_port_number(struct dpif *dpif, const char *name, uint16_t *port)
{
- struct odp_port *ports;
- size_t n_ports;
- size_t i;
+ struct odp_port odp_port;
- query_ports(dpif, &ports, &n_ports);
- for (i = 0; i < n_ports; i++) {
- if (!strcmp(name, ports[i].devname)) {
- *port = ports[i].port;
- free(ports);
- return true;
- }
+ if (!dpif_port_query_by_name(dpif, name, &odp_port)) {
+ *port = odp_port.port;
+ return true;
+ } else {
+ ovs_error(0, "no port named %s", name);
+ return false;
}
- free(ports);
- ovs_error(0, "no port named %s", name);
- return false;
}
static void
query_ports(dpif, &ports, &n_ports);
for (i = 0; i < n_ports; i++) {
const struct odp_port *p = &ports[i];
+ struct ds ds;
printf("\tport %u: %s", p->port, p->devname);
- if (strcmp(p->type, "system")) {
- printf(" (%s)", p->type);
- }
- printf("\n");
+
+ ds_init(&ds);
+ format_odp_port_type(&ds, p);
+ printf("%s\n", ds_cstr(&ds));
+ ds_destroy(&ds);
}
free(ports);
dpif_close(dpif);
}
}
} else {
- unsigned int i;
- for (i = 0; i < ODP_MAX; i++) {
- char name[128];
- struct dpif *dpif;
- int error;
-
- sprintf(name, "dp%u", i);
- error = parsed_dpif_open(name, false, &dpif);
- if (!error) {
- show_dpif(dpif);
- } else if (error != ENODEV) {
- ovs_error(error, "opening datapath %s failed", name);
+ struct svec types;
+ const char *type;
+ size_t i;
+
+ svec_init(&types);
+ dp_enumerate_types(&types);
+ SVEC_FOR_EACH (i, type, &types) {
+ struct svec names;
+ const char *name;
+ size_t j;
+
+ svec_init(&names);
+ if (dp_enumerate_names(type, &names)) {
failure = true;
+ continue;
+ }
+ SVEC_FOR_EACH (j, name, &names) {
+ struct dpif *dpif;
+ int error;
+
+ error = dpif_open(name, type, &dpif);
+ if (!error) {
+ show_dpif(dpif);
+ } else {
+ ovs_error(error, "opening datapath %s failed", name);
+ failure = true;
+ }
}
+ svec_destroy(&names);
}
+ svec_destroy(&types);
}
if (failure) {
exit(EXIT_FAILURE);