X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fbridge.c;h=6c271fb7acf80807d733d2b859b827537ff46a02;hb=998bb652ecb494af8aa38ed0ae4e653cd8dff709;hp=77eb152ce7cd3d8361a4e3496935ea8ef151b51d;hpb=ce8876775477a359f3ae14b8cae0ef2212f1681b;p=openvswitch diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 77eb152c..6c271fb7 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -189,10 +189,10 @@ static struct list all_bridges = LIST_INITIALIZER(&all_bridges); /* OVSDB IDL used to obtain configuration. */ static struct ovsdb_idl *idl; -/* Each time this timer expires, the bridge fetches statistics for every - * interface and pushes them into the database. */ -#define IFACE_STATS_INTERVAL (5 * 1000) /* In milliseconds. */ -static long long int iface_stats_timer = LLONG_MIN; +/* Each time this timer expires, the bridge fetches systems and interface + * statistics and pushes them into the database. */ +#define STATS_INTERVAL (5 * 1000) /* In milliseconds. */ +static long long int stats_timer = LLONG_MIN; static struct bridge *bridge_create(const struct ovsrec_bridge *br_cfg); static void bridge_destroy(struct bridge *); @@ -307,7 +307,7 @@ bridge_configure_once(const struct ovsrec_open_vswitch *cfg) } already_configured_once = true; - iface_stats_timer = time_msec() + IFACE_STATS_INTERVAL; + stats_timer = time_msec() + STATS_INTERVAL; /* Get all the configured bridges' names from 'cfg' into 'bridge_names'. */ svec_init(&bridge_names); @@ -374,6 +374,20 @@ set_up_iface(const struct ovsrec_interface *iface_cfg, struct iface *iface, xstrdup(iface_cfg->value_options[i])); } + /* Include 'other_config' keys in hash of netdev options. The + * namespace of 'other_config' and 'options' must be disjoint. + * Prefer 'options' keys over 'other_config' keys. */ + for (i = 0; i < iface_cfg->n_other_config; i++) { + char *value = xstrdup(iface_cfg->value_other_config[i]); + if (!shash_add_once(&options, iface_cfg->key_other_config[i], + value)) { + VLOG_WARN("%s: \"other_config\" key %s conflicts with existing " + "\"other_config\" or \"options\" entry...ignoring", + iface_cfg->name, iface_cfg->key_other_config[i]); + free(value); + } + } + if (create) { struct netdev_options netdev_options; @@ -1166,8 +1180,8 @@ bridge_run(void) } #endif - /* Refresh interface stats if necessary. */ - if (time_msec() >= iface_stats_timer) { + /* Refresh system and interface stats if necessary. */ + if (time_msec() >= stats_timer) { if (cfg) { struct ovsdb_idl_txn *txn; @@ -1190,7 +1204,7 @@ bridge_run(void) ovsdb_idl_txn_destroy(txn); /* XXX */ } - iface_stats_timer = time_msec() + IFACE_STATS_INTERVAL; + stats_timer = time_msec() + STATS_INTERVAL; } } @@ -1209,7 +1223,7 @@ bridge_wait(void) bond_wait(br); } ovsdb_idl_wait(idl); - poll_timer_wait_until(iface_stats_timer); + poll_timer_wait_until(stats_timer); } /* Forces 'br' to revalidate all of its flows. This is appropriate when 'br''s