learn_parse() and learn_check() are supposed to apply the same checks, but
they are implemented very differently. It seems best to have learn_parse()
actually call learn_check() just to be sure.
This would have caught the bug fixed in the previous commit, because
the tests actually contain instances of "learn" actions that trigger the
bug, but the tests only parsed the actions without ever doing anything
that checked them (like sending them to ovs-vswitchd over OpenFlow).
char *name, *value;
size_t learn_ofs;
size_t len;
+ int error;
struct nx_action_learn *learn;
struct cls_rule rule;
}
}
}
- free(orig);
put_u16(b, 0);
learn = ofpbuf_at_assert(b, learn_ofs, sizeof *learn);
learn->len = htons(b->size - learn_ofs);
+
+ /* In theory the above should have caught any errors, but... */
+ error = learn_check(learn, flow);
+ if (error) {
+ char *msg = ofputil_error_to_string(error);
+ ovs_fatal(0, "%s: %s", orig, msg);
+ }
+ free(orig);
}
void