summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRomain Lenglet <rlenglet@vmware.com>2013-11-20 10:57:53 -0800
committerBen Pfaff <blp@nicira.com>2013-11-20 16:31:26 -0800
commit88afd5fcc3c7b45c073966f5c6f25e04f5c6c077 (patch)
treea7ba9fd3fb73927550f4bfba501719caa074ff57
parent3388e51a73f6f6539f83980270a4f31592928b7e (diff)
downloadopenvswitch-88afd5fcc3c7b45c073966f5c6f25e04f5c6c077.tar.gz
ipfix: allow empty targets column in table IPFIX
The "targets" column in IPFIX had a min=1 constraints, so OVSDB implicitly adds an empty string "" into that column if no value is given. No connection can be opened to a target with address "", so the whole IPFIX exporter for that row was disabled until that "" target was removed by users. That behavior is correct but proved to be unintuitive to users. This patch removes the min=1 constraint, to avoid the trouble for users who insert IPFIX rows with no targets: it eliminates the log messages due to failed connections to target "", and eliminates the need to manually remove the "" target after row insertion. This doesn't impact the behavior for any existing row, whether it has a "" target or not. Signed-off-by: Romain Lenglet <rlenglet@vmware.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
-rw-r--r--vswitchd/bridge.c18
-rw-r--r--vswitchd/vswitch.ovsschema4
2 files changed, 15 insertions, 7 deletions
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);
}
diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema
index 78ebc8931..9392457ef 100644
--- a/vswitchd/vswitch.ovsschema
+++ b/vswitchd/vswitch.ovsschema
@@ -1,6 +1,6 @@
{"name": "Open_vSwitch",
"version": "7.3.0",
- "cksum": "2811681289 20311",
+ "cksum": "2495231516 20311",
"tables": {
"Open_vSwitch": {
"columns": {
@@ -412,7 +412,7 @@
"IPFIX": {
"columns": {
"targets": {
- "type": {"key": "string", "min": 1, "max": "unlimited"}},
+ "type": {"key": "string", "min": 0, "max": "unlimited"}},
"sampling": {
"type": {"key": {"type": "integer",
"minInteger": 1,