X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fofp-util.c;h=b4b7ecddd33138ae76b4a08e45290fa5f770b758;hb=b9298d3f825703063c9538aa37407da43e1e4781;hp=1cafd862bac2cb9b8ac2641f105820a57cf48ca0;hpb=ff9d38264c74e2e807ba0fd759e44116d1203670;p=sliver-openvswitch.git diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 1cafd862b..b4b7ecddd 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -127,10 +127,10 @@ ofputil_cls_rule_from_match(const struct ofp_match *match, wc->nw_dst_mask = ofputil_wcbits_to_netmask(ofpfw >> OFPFW_NW_DST_SHIFT); if (flow_format == NXFF_TUN_ID_FROM_COOKIE && !(ofpfw & NXFW_TUN_ID)) { - rule->flow.tun_id = htonl(ntohll(cookie) >> 32); + rule->flow.tun_id = htonll(ntohll(cookie) >> 32); } else { wc->wildcards |= FWW_TUN_ID; - rule->flow.tun_id = htonl(0); + rule->flow.tun_id = htonll(0); } if (ofpfw & OFPFW_DL_DST) { @@ -233,7 +233,7 @@ ofputil_cls_rule_to_match(const struct cls_rule *rule, ofpfw |= NXFW_TUN_ID; } else { uint32_t cookie_lo = ntohll(cookie_in); - uint32_t cookie_hi = ntohl(rule->flow.tun_id); + uint32_t cookie_hi = ntohll(rule->flow.tun_id); cookie_in = htonll(cookie_lo | ((uint64_t) cookie_hi << 32)); } } @@ -856,7 +856,7 @@ ofputil_min_flow_format(const struct cls_rule *rule, bool cookie_support, || !regs_fully_wildcarded(wc) || (!(wc->wildcards & FWW_TUN_ID) && (!cookie_support - || (cookie_hi && cookie_hi != rule->flow.tun_id)))) { + || (cookie_hi && cookie_hi != ntohll(rule->flow.tun_id))))) { return NXFF_NXM; } else if (!(wc->wildcards & FWW_TUN_ID)) { return NXFF_TUN_ID_FROM_COOKIE; @@ -1741,6 +1741,10 @@ check_nicira_action(const union ofp_action *a, unsigned int len, case NXAST_NOTE: return 0; + case NXAST_SET_TUNNEL64: + return check_action_exact_len(a, len, + sizeof(struct nx_action_set_tunnel64)); + case NXAST_SNAT__OBSOLETE: default: return ofp_mkerr(OFPET_BAD_ACTION, OFPBAC_BAD_VENDOR_TYPE);