diff options
author | Ben Pfaff <blp@ovn.org> | 2016-12-01 23:24:41 -0800 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2016-12-19 21:02:10 -0800 |
commit | 4fbc56c424aedf7379f17b0f35147d7601d85afd (patch) | |
tree | 05a265a21ffdf2be6c886dfa790e4d3a1c424a40 /ovn | |
parent | 9d1d784407ae9563f5c50806a28df01b408e2f85 (diff) | |
download | openvswitch-4fbc56c424aedf7379f17b0f35147d7601d85afd.tar.gz |
lport: Be a little more careful building lport index.
It seems like a good idea to check for and warn about all kinds of
duplicates, and to avoid segfaulting if a datapath column is empty.
(However, the database schema should prevent both issues.)
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Mickey Spiegel <mickeys.dev@gmail.com>
Diffstat (limited to 'ovn')
-rw-r--r-- | ovn/controller/lport.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/ovn/controller/lport.c b/ovn/controller/lport.c index e1ecf21fd..3484c2c87 100644 --- a/ovn/controller/lport.c +++ b/ovn/controller/lport.c @@ -37,12 +37,24 @@ lport_index_init(struct lport_index *lports, struct ovsdb_idl *ovnsb_idl) const struct sbrec_port_binding *pb; SBREC_PORT_BINDING_FOR_EACH (pb, ovnsb_idl) { + if (!pb->datapath) { + continue; + } + if (lport_lookup_by_name(lports, pb->logical_port)) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); VLOG_WARN_RL(&rl, "duplicate logical port name '%s'", pb->logical_port); continue; } + if (lport_lookup_by_key(lports, pb->datapath->tunnel_key, + pb->tunnel_key)) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); + VLOG_WARN_RL(&rl, "duplicate logical port %"PRId64" in logical " + "datapath %"PRId64, + pb->tunnel_key, pb->datapath->tunnel_key); + continue; + } struct lport *p = xmalloc(sizeof *p); hmap_insert(&lports->by_name, &p->name_node, |