From 0ae60917fcc827f69c6e12c2f1afd170178f5668 Mon Sep 17 00:00:00 2001 From: Justin Pettit Date: Sat, 18 Dec 2010 01:07:06 -0800 Subject: [PATCH] ovs-dpctl: Print extended information about vports. When "ovs-dpctl show" is run, return additional information about the port. For example, tunnel ports will print the remote_ip, local_ip, and in_key when defined. --- lib/odp-util.c | 29 +++++++++++++++++++++++++++++ lib/odp-util.h | 1 + utilities/ovs-dpctl.c | 10 ++++++---- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/lib/odp-util.c b/lib/odp-util.c index 09f8b838..1f6d93e9 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -24,6 +24,7 @@ #include "dynamic-string.h" #include "flow.h" #include "netlink.h" +#include "openvswitch/tunnel.h" #include "packets.h" #include "timeval.h" #include "util.h" @@ -216,6 +217,34 @@ format_odp_flow(struct ds *ds, const struct odp_flow *f) ds_put_cstr(ds, ", actions:"); format_odp_actions(ds, f->actions, f->actions_len); } + +void +format_odp_port_type(struct ds *ds, const struct odp_port *p) +{ + if (!strcmp(p->type, "gre") + || !strcmp(p->type, "capwap")) { + const struct tnl_port_config *config; + + config = (struct tnl_port_config *)p->config; + + ds_put_format(ds, " (%s: remote_ip="IP_FMT, + p->type, IP_ARGS(&config->daddr)); + + if (config->saddr) { + ds_put_format(ds, ", local_ip="IP_FMT, IP_ARGS(&config->saddr)); + } + + if (config->in_key) { + ds_put_format(ds, ", in_key=%#"PRIx64, ntohll(config->in_key)); + } + + ds_put_cstr(ds, ")"); + } else if (!strcmp(p->type, "patch")) { + ds_put_format(ds, " (%s: peer=%s)", p->type, (char *)p->config); + } else if (strcmp(p->type, "system")) { + ds_put_format(ds, " (%s)", p->type); + } +} void odp_flow_key_from_flow(struct odp_flow_key *key, const struct flow *flow) diff --git a/lib/odp-util.h b/lib/odp-util.h index 6051c52d..c8333be0 100644 --- a/lib/odp-util.h +++ b/lib/odp-util.h @@ -62,6 +62,7 @@ void format_odp_actions(struct ds *, const struct nlattr *odp_actions, size_t actions_len); void format_odp_flow_stats(struct ds *, const struct odp_flow_stats *); void format_odp_flow(struct ds *, const struct odp_flow *); +void format_odp_port_type(struct ds *, const struct odp_port *); void odp_flow_key_from_flow(struct odp_flow_key *, const struct flow *); void odp_flow_key_to_flow(const struct odp_flow_key *, struct flow *); diff --git a/utilities/ovs-dpctl.c b/utilities/ovs-dpctl.c index 8f2a2bc6..b12ceb75 100644 --- a/utilities/ovs-dpctl.c +++ b/utilities/ovs-dpctl.c @@ -375,12 +375,14 @@ show_dpif(struct dpif *dpif) 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); -- 2.30.2