X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnx-match.c;h=8b2a82292e9e37eab5c9fc7a46ef39f6a877c7f4;hb=a3a0c29e2b11d8fcae86043cd16520ecbaa03731;hp=3e3b4c69b1b3d547cd7b5739d55398d71f095554;hpb=edce886c92dc34797a36fd9dd20c530e1799f082;p=openvswitch diff --git a/lib/nx-match.c b/lib/nx-match.c index 3e3b4c69..8b2a8229 100644 --- a/lib/nx-match.c +++ b/lib/nx-match.c @@ -99,6 +99,14 @@ nx_pull_match__(struct ofpbuf *b, unsigned int match_len, bool strict, assert((cookie != NULL) == (cookie_mask != NULL)); + cls_rule_init_catchall(rule, priority); + if (cookie) { + *cookie = *cookie_mask = htonll(0); + } + if (!match_len) { + return 0; + } + p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8)); if (!p) { VLOG_DBG_RL(&rl, "nx_match length %u, rounded up to a " @@ -107,10 +115,6 @@ nx_pull_match__(struct ofpbuf *b, unsigned int match_len, bool strict, return OFPERR_OFPBMC_BAD_LEN; } - cls_rule_init_catchall(rule, priority); - if (cookie) { - *cookie = *cookie_mask = htonll(0); - } for (; (header = nx_entry_ok(p, match_len)) != 0; p += 4 + NXM_LENGTH(header), match_len -= 4 + NXM_LENGTH(header)) {