@@ -1702,7 +1702,16 @@ expr_simplify_ne(struct expr *expr)
new = expr_combine(EXPR_T_OR, new, e);
}
- ovs_assert(new);
+ if (!new) {
+ /* Handle a comparison like "ip4.dst != 0/0", where the mask has no
+ * 1-bits.
+ *
+ * The correct result for this expression may not be obvious. It's
+ * easier to understand that "ip4.dst == 0/0" should be true, since 0/0
+ * matches every IPv4 address; then, "ip4.dst != 0/0" should have the
+ * opposite result. */
+ new = expr_create_boolean(false);
+ }
expr_destroy(expr);
@@ -431,6 +431,8 @@ simplify() {
}
AT_CHECK([simplify 'eth.dst == 0/0'], [0], [1
])
+AT_CHECK([simplify 'eth.dst != 0/0'], [0], [0
+])
AT_CLEANUP
AT_SETUP([ovn -- 4-term numeric expression normalization])
The test added by this commit is very specific to the particular problem, whereas a more general test would be better. A later commit adds the general test. Signed-off-by: Ben Pfaff <blp@ovn.org> --- ovn/lib/expr.c | 11 ++++++++++- tests/ovn.at | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-)