X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fflow.h;h=a154df2b92235d3d55bcb3d0b154d54c5e15cd7b;hb=81c9dad242f14fd9e25cd66d162d0b90a0b68806;hp=7667cb049c6cd0007c2570a0e962a7c0e0eaffc2;hpb=494e43a517694cff1ca6304f6456ba0edbb924e2;p=openvswitch diff --git a/lib/flow.h b/lib/flow.h index 7667cb04..a154df2b 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -59,9 +59,9 @@ int flow_extract(struct ofpbuf *, ovs_be32 tun_id, uint16_t in_port, struct flow *); void flow_extract_stats(const struct flow *flow, struct ofpbuf *packet, struct odp_flow_stats *stats); -void flow_to_match(const struct flow *, uint32_t wildcards, bool tun_id_cookie, +void flow_to_match(const struct flow *, uint32_t wildcards, int flow_format, struct ofp_match *); -void flow_from_match(const struct ofp_match *, bool tun_id_from_cookie, +void flow_from_match(const struct ofp_match *, int flow_format, ovs_be64 cookie, struct flow *, uint32_t *wildcards); char *flow_to_string(const struct flow *); void flow_format(struct ds *, const struct flow *); @@ -88,7 +88,23 @@ flow_hash(const struct flow *flow, uint32_t basis) return hash_bytes(flow, FLOW_SIG_SIZE, basis); } -/* Information on wildcards for a flow, as a supplement to struct flow. */ +/* Information on wildcards for a flow, as a supplement to "struct flow". + * + * The flow_wildcards_*() functions below both depend on and maintain the + * following important invariants: + * + * 1. 'wildcards' is nonzero if and only if at least one bit or field is + * wildcarded. + * + * 2. Bits in 'wildcards' not included in OVSFW_ALL are set to 0. (This is a + * corollary to invariant #1.) + * + * 3. The fields in 'wildcards' masked by OFPFW_NW_SRC_MASK and + * OFPFW_NW_DST_MASK have values between 0 and 32, inclusive. + * + * 4. The fields masked by OFPFW_NW_SRC_MASK and OFPFW_NW_DST_MASK correspond + * correctly to the masks in 'nw_src_mask' and 'nw_dst_mask', respectively. + */ struct flow_wildcards { uint32_t wildcards; /* enum ofp_flow_wildcards. */ ovs_be32 nw_src_mask; /* 1-bit in each significant nw_src bit. */ @@ -102,4 +118,14 @@ void flow_wildcards_init_exact(struct flow_wildcards *); bool flow_wildcards_set_nw_src_mask(struct flow_wildcards *, ovs_be32); bool flow_wildcards_set_nw_dst_mask(struct flow_wildcards *, ovs_be32); +void flow_wildcards_combine(struct flow_wildcards *dst, + const struct flow_wildcards *src1, + const struct flow_wildcards *src2); +bool flow_wildcards_has_extra(const struct flow_wildcards *, + const struct flow_wildcards *); + +uint32_t flow_wildcards_hash(const struct flow_wildcards *); +bool flow_wildcards_equal(const struct flow_wildcards *, + const struct flow_wildcards *); + #endif /* flow.h */