2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-30 22:05:19 +00:00

flow: Zero tun_id if wildcarded.

Normally match fields are zeroed if they are wildcarded in
normalize_match().  However, tun_id isn't part of struct ofp_match
so do it when we convert to a flow instead.
This commit is contained in:
Jesse Gross
2010-05-10 18:23:18 -07:00
parent 54adbf40ff
commit 2455c7fac2

View File

@@ -273,20 +273,16 @@ flow_to_match(const flow_t *flow, uint32_t wildcards, bool tun_id_from_cookie,
void
flow_from_match(const struct ofp_match *match, bool tun_id_from_cookie,
uint64_t cookie, flow_t *flow, uint32_t *wildcards)
uint64_t cookie, flow_t *flow, uint32_t *flow_wildcards)
{
if (wildcards) {
*wildcards = ntohl(match->wildcards);
uint32_t wildcards = ntohl(match->wildcards);
if (!tun_id_from_cookie) {
*wildcards |= NXFW_TUN_ID;
}
}
flow->nw_src = match->nw_src;
flow->nw_dst = match->nw_dst;
if (tun_id_from_cookie) {
if (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
@@ -301,6 +297,10 @@ flow_from_match(const struct ofp_match *match, bool tun_id_from_cookie,
flow->nw_tos = match->nw_tos;
flow->nw_proto = match->nw_proto;
memset(flow->reserved, 0, sizeof flow->reserved);
if (flow_wildcards) {
*flow_wildcards = wildcards;
}
}
char *