rstp: Show some useful rstp port fields.
authorJarno Rajahalme <jrajahalme@nicira.com>
Thu, 13 Nov 2014 22:55:25 +0000 (14:55 -0800)
committerJarno Rajahalme <jrajahalme@nicira.com>
Thu, 13 Nov 2014 22:55:25 +0000 (14:55 -0800)
designated_bridge_id, designated_port_id and designated_path_cost are
now displayed in rstp_status when using 'ovs-vsctl list port'.

Signed-off-by: Daniele Venturino <daniele.venturino@m3s.it>
Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
lib/rstp.c
lib/rstp.h
ofproto/ofproto-dpif.c
ofproto/ofproto.h
vswitchd/bridge.c

index b37ad68..0f96749 100644 (file)
@@ -1264,8 +1264,10 @@ rstp_port_get_state(const struct rstp_port *p)
 void
 rstp_port_get_status(const struct rstp_port *p, uint16_t *id,
                      enum rstp_state *state, enum rstp_port_role *role,
-                     int *tx_count, int *rx_count, int *error_count,
-                     int *uptime)
+                     rstp_identifier *designated_bridge_id,
+                     uint16_t *designated_port_id,
+                     uint32_t *designated_path_cost, int *tx_count,
+                     int *rx_count, int *error_count, int *uptime)
     OVS_EXCLUDED(rstp_mutex)
 {
     ovs_mutex_lock(&rstp_mutex);
@@ -1273,6 +1275,10 @@ rstp_port_get_status(const struct rstp_port *p, uint16_t *id,
     *state = p->rstp_state;
     *role = p->role;
 
+    *designated_bridge_id = p->port_priority.designated_bridge_id;
+    *designated_port_id = p->port_priority.designated_port_id;
+    *designated_path_cost = p->port_priority.root_path_cost;
+
     *tx_count = p->tx_count;
     *rx_count = p->rx_rstp_bpdu_cnt;
     *error_count = p->error_count;
index 364a181..ccf8292 100644 (file)
@@ -219,8 +219,10 @@ enum rstp_state rstp_port_get_state(const struct rstp_port *)
 
 void rstp_port_get_status(const struct rstp_port *, uint16_t *id,
                           enum rstp_state *state, enum rstp_port_role *role,
-                          int *tx_count, int *rx_count, int *error_count,
-                          int *uptime)
+                          rstp_identifier *designated_bridge_id,
+                          uint16_t *designated_port_id,
+                          uint32_t *designated_path_cost, int *tx_count,
+                          int *rx_count, int *error_count, int *uptime)
     OVS_EXCLUDED(rstp_mutex);
 
 void * rstp_get_port_aux(struct rstp *rstp, uint16_t port_number)
index df963f8..a056a63 100644 (file)
@@ -2453,7 +2453,9 @@ get_rstp_port_status(struct ofport *ofport_,
     }
 
     s->enabled = true;
-    rstp_port_get_status(rp, &s->port_id, &s->state, &s->role, &s->tx_count,
+    rstp_port_get_status(rp, &s->port_id, &s->state, &s->role,
+                         &s->designated_bridge_id, &s->designated_port_id,
+                         &s->designated_path_cost, &s->tx_count,
                          &s->rx_count, &s->error_count, &s->uptime);
 }
 
index f2c8bf4..a17d1bc 100644 (file)
@@ -110,6 +110,9 @@ struct ofproto_port_rstp_status {
     uint16_t port_id;
     enum rstp_port_role role;
     enum rstp_state state;
+    rstp_identifier designated_bridge_id;
+    uint16_t designated_port_id;
+    uint32_t designated_path_cost;
     int tx_count;               /* Number of BPDUs transmitted. */
     int rx_count;               /* Number of valid BPDUs received. */
     int error_count;            /* Number of bad BPDUs received. */
index 33d8d6a..f346522 100644 (file)
@@ -2456,7 +2456,7 @@ br_refresh_rstp_status(struct bridge *br)
     }
     smap_add_format(&smap, "rstp_bridge_id", RSTP_ID_FMT,
                     RSTP_ID_ARGS(status.bridge_id));
-    smap_add_format(&smap, "rstp_root_path_cost", "%d",
+    smap_add_format(&smap, "rstp_root_path_cost", "%"PRIu32,
                     status.root_path_cost);
     smap_add_format(&smap, "rstp_root_id", RSTP_ID_FMT,
                     RSTP_ID_ARGS(status.root_id));
@@ -2509,6 +2509,12 @@ port_refresh_rstp_status(struct port *port)
                     rstp_port_role_name(status.role));
     smap_add_format(&smap, "rstp_port_state", "%s",
                     rstp_state_name(status.state));
+    smap_add_format(&smap, "rstp_designated_bridge_id", RSTP_ID_FMT,
+                    RSTP_ID_ARGS(status.designated_bridge_id));
+    smap_add_format(&smap, "rstp_designated_port_id", RSTP_PORT_ID_FMT,
+                    status.designated_port_id);
+    smap_add_format(&smap, "rstp_designated_path_cost", "%"PRIu32,
+                    status.designated_path_cost);
 
     ovsrec_port_set_rstp_status(port->cfg, &smap);
     smap_destroy(&smap);