bridge: Populate interface status/statistics as soon as a port is added.
authorAndrew Evans <aevans@nicira.com>
Tue, 28 Jun 2011 20:17:54 +0000 (13:17 -0700)
committerAndrew Evans <aevans@nicira.com>
Tue, 28 Jun 2011 20:17:54 +0000 (13:17 -0700)
Currently there's a lag of up to five seconds before the status and statistics
columns in the Interface table are populated when a port is first added to a
bridge. This may confuse systems that expect those columns to be populated
right away.

Bug #6145.

vswitchd/bridge.c

index d0a5764d37394b8ba69578d8c80365d3c5876980..935440323bae031ab4b59ddea506e5337cd91f1a 100644 (file)
@@ -195,7 +195,9 @@ static void iface_set_mac(struct iface *);
 static void iface_set_ofport(const struct ovsrec_interface *, int64_t ofport);
 static void iface_configure_qos(struct iface *, const struct ovsrec_qos *);
 static void iface_configure_cfm(struct iface *);
-static bool iface_refresh_cfm_stats(struct iface *iface);
+static bool iface_refresh_cfm_stats(struct iface *);
+static void iface_refresh_stats(struct iface *);
+static void iface_refresh_status(struct iface *);
 static bool iface_get_carrier(const struct iface *);
 static bool iface_is_synthetic(const struct iface *);
 
@@ -866,6 +868,12 @@ bridge_add_ofproto_ports(struct bridge *br)
                           iface->name, strerror(error));
             }
 
+            /* Populate stats columns in new Interface rows. */
+            if (!iface->cfg->mtu) {
+                iface_refresh_stats(iface);
+                iface_refresh_status(iface);
+            }
+
             /* Add the port, if necessary. */
             if (iface->netdev && iface->ofp_port < 0) {
                 uint16_t ofp_port;