-/* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
+/* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
OFPROTO_FLOW_LIMIT_DEFAULT));
ofproto_set_max_idle(smap_get_int(&ovs_cfg->other_config, "max-idle",
OFPROTO_MAX_IDLE_DEFAULT));
- ofproto_set_n_dpdk_rxqs(smap_get_int(&ovs_cfg->other_config,
- "n-dpdk-rxqs", 0));
ofproto_set_cpu_mask(smap_get(&ovs_cfg->other_config, "pmd-cpu-mask"));
ofproto_set_threads(
add_del_bridges(const struct ovsrec_open_vswitch *cfg)
{
struct bridge *br, *next;
+ struct shash_node *node;
struct shash new_br;
size_t i;
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
const struct ovsrec_bridge *br_cfg = cfg->bridges[i];
- if (strchr(br_cfg->name, '/')) {
+ if (strchr(br_cfg->name, '/') || strchr(br_cfg->name, '\\')) {
/* Prevent remote ovsdb-server users from accessing arbitrary
- * directories, e.g. consider a bridge named "../../../etc/". */
+ * directories, e.g. consider a bridge named "../../../etc/".
+ *
+ * Prohibiting "\" is only necessary on Windows but it's no great
+ * loss elsewhere. */
VLOG_WARN_RL(&rl, "ignoring bridge with invalid name \"%s\"",
br_cfg->name);
} else if (!shash_add_once(&new_br, br_cfg->name, br_cfg)) {
}
/* Add new bridges. */
- for (i = 0; i < cfg->n_bridges; i++) {
- const struct ovsrec_bridge *br_cfg = cfg->bridges[i];
+ SHASH_FOR_EACH(node, &new_br) {
+ const struct ovsrec_bridge *br_cfg = node->data;
struct bridge *br = bridge_lookup(br_cfg->name);
if (!br) {
bridge_create(br_cfg);