X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vswitchd%2Fbridge.c;h=6ce7d2b3346919c9b438530887d37271382e90e2;hb=f263172c99fd0a72c3f6666ffbaeaab786a3f1a8;hp=a5de8ce42bd1c195104c51588bfb890eb641c79e;hpb=3388e51a73f6f6539f83980270a4f31592928b7e;p=sliver-openvswitch.git diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index a5de8ce42..6ce7d2b33 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -984,12 +984,19 @@ bridge_configure_sflow(struct bridge *br, int *sflow_bridge_number) sset_destroy(&oso.targets); } +/* Returns whether a IPFIX row is valid. */ +static bool +ovsrec_ipfix_is_valid(const struct ovsrec_ipfix *ipfix) +{ + return ipfix && ipfix->n_targets > 0; +} + /* Returns whether a Flow_Sample_Collector_Set row is valid. */ static bool ovsrec_fscs_is_valid(const struct ovsrec_flow_sample_collector_set *fscs, const struct bridge *br) { - return fscs->ipfix && fscs->bridge == br->cfg; + return ovsrec_ipfix_is_valid(fscs->ipfix) && fscs->bridge == br->cfg; } /* Set IPFIX configuration on 'br'. */ @@ -997,6 +1004,7 @@ static void bridge_configure_ipfix(struct bridge *br) { const struct ovsrec_ipfix *be_cfg = br->cfg->ipfix; + bool valid_be_cfg = ovsrec_ipfix_is_valid(be_cfg); const struct ovsrec_flow_sample_collector_set *fe_cfg; struct ofproto_ipfix_bridge_exporter_options be_opts; struct ofproto_ipfix_flow_exporter_options *fe_opts = NULL; @@ -1008,12 +1016,12 @@ bridge_configure_ipfix(struct bridge *br) } } - if (!be_cfg && n_fe_opts == 0) { + if (!valid_be_cfg && n_fe_opts == 0) { ofproto_set_ipfix(br->ofproto, NULL, NULL, 0); return; } - if (be_cfg) { + if (valid_be_cfg) { memset(&be_opts, 0, sizeof be_opts); sset_init(&be_opts.targets); @@ -1057,10 +1065,10 @@ bridge_configure_ipfix(struct bridge *br) } } - ofproto_set_ipfix(br->ofproto, be_cfg ? &be_opts : NULL, fe_opts, + ofproto_set_ipfix(br->ofproto, valid_be_cfg ? &be_opts : NULL, fe_opts, n_fe_opts); - if (be_cfg) { + if (valid_be_cfg) { sset_destroy(&be_opts.targets); }