-/* Extract 'flow' with 'wildcards' into the OpenFlow match structure
- * 'match'. 'flow_format' should be one of NXFF_*. */
-void
-flow_to_match(const struct flow *flow, uint32_t wildcards,
- int flow_format, struct ofp_match *match)
-{
- if (flow_format != NXFF_TUN_ID_FROM_COOKIE) {
- wildcards &= OFPFW_ALL;
- }
- match->wildcards = htonl(wildcards);
-
- match->in_port = htons(flow->in_port == ODPP_LOCAL ? OFPP_LOCAL
- : flow->in_port);
- match->dl_vlan = flow->dl_vlan;
- match->dl_vlan_pcp = flow->dl_vlan_pcp;
- memcpy(match->dl_src, flow->dl_src, ETH_ADDR_LEN);
- memcpy(match->dl_dst, flow->dl_dst, ETH_ADDR_LEN);
- match->dl_type = flow->dl_type;
- match->nw_src = flow->nw_src;
- match->nw_dst = flow->nw_dst;
- match->nw_tos = flow->nw_tos;
- match->nw_proto = flow->nw_proto;
- match->tp_src = flow->tp_src;
- match->tp_dst = flow->tp_dst;
- memset(match->pad1, '\0', sizeof match->pad1);
- memset(match->pad2, '\0', sizeof match->pad2);
-}
-
-void
-flow_from_match(const struct ofp_match *match, int flow_format,
- ovs_be64 cookie, struct flow *flow, uint32_t *flow_wildcards)
-{
- uint32_t wildcards = ntohl(match->wildcards);
-
- flow->nw_src = match->nw_src;
- flow->nw_dst = match->nw_dst;
- if (flow_format == NXFF_TUN_ID_FROM_COOKIE && !(wildcards & NXFW_TUN_ID)) {
- flow->tun_id = htonl(ntohll(cookie) >> 32);
- } else {
- wildcards |= NXFW_TUN_ID;
- flow->tun_id = 0;
- }
- flow->in_port = (match->in_port == htons(OFPP_LOCAL) ? ODPP_LOCAL
- : ntohs(match->in_port));
- flow->dl_vlan = match->dl_vlan;
- flow->dl_vlan_pcp = match->dl_vlan_pcp;
- flow->dl_type = match->dl_type;
- flow->tp_src = match->tp_src;
- flow->tp_dst = match->tp_dst;
- memcpy(flow->dl_src, match->dl_src, ETH_ADDR_LEN);
- memcpy(flow->dl_dst, match->dl_dst, ETH_ADDR_LEN);
- flow->nw_tos = match->nw_tos;
- flow->nw_proto = match->nw_proto;
- if (flow_wildcards) {
- *flow_wildcards = wildcards;
- }
-}
-