When the database is initially created there may no be columns in the Open_vSwitch table. In this case, the ovsrec_open_vswitch passed to bridge_init_ofproto() is NULL and causes a segmentation fault.
Signed-off-by: Ethan Jackson <[email protected]> --- vswitchd/bridge.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 9fcc970..8f544a9 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -276,25 +276,27 @@ bridge_init_ofproto(const struct ovsrec_open_vswitch *cfg) shash_init(&iface_hints); - for (i = 0; i < cfg->n_bridges; i++) { - const struct ovsrec_bridge *br_cfg = cfg->bridges[i]; - int j; - - for (j = 0; j < br_cfg->n_ports; j++) { - struct ovsrec_port *port_cfg = br_cfg->ports[j]; - int k; - - for (k = 0; k < port_cfg->n_interfaces; k++) { - struct ovsrec_interface *if_cfg = port_cfg->interfaces[k]; - struct iface_hint *iface_hint; - - iface_hint = xmalloc(sizeof *iface_hint); - iface_hint->br_name = br_cfg->name; - iface_hint->br_type = br_cfg->datapath_type; - iface_hint->ofp_port = if_cfg->n_ofport_request ? - *if_cfg->ofport_request : OFPP_NONE; - - shash_add(&iface_hints, if_cfg->name, iface_hint); + if (cfg) { + for (i = 0; i < cfg->n_bridges; i++) { + const struct ovsrec_bridge *br_cfg = cfg->bridges[i]; + int j; + + for (j = 0; j < br_cfg->n_ports; j++) { + struct ovsrec_port *port_cfg = br_cfg->ports[j]; + int k; + + for (k = 0; k < port_cfg->n_interfaces; k++) { + struct ovsrec_interface *if_cfg = port_cfg->interfaces[k]; + struct iface_hint *iface_hint; + + iface_hint = xmalloc(sizeof *iface_hint); + iface_hint->br_name = br_cfg->name; + iface_hint->br_type = br_cfg->datapath_type; + iface_hint->ofp_port = if_cfg->n_ofport_request ? + *if_cfg->ofport_request : OFPP_NONE; + + shash_add(&iface_hints, if_cfg->name, iface_hint); + } } } } -- 1.7.9.5 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
