X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fflow.h;h=a154df2b92235d3d55bcb3d0b154d54c5e15cd7b;hb=81c9dad242f14fd9e25cd66d162d0b90a0b68806;hp=ba376812cab1b83855f14c01aac46a9f021918c4;hpb=5436300437bd20c5e8e006fedc55c517cb090de5;p=openvswitch diff --git a/lib/flow.h b/lib/flow.h index ba376812..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. */ @@ -97,5 +113,19 @@ struct flow_wildcards { ovs_be32 flow_nw_bits_to_mask(uint32_t wildcards, int shift); void flow_wildcards_init(struct flow_wildcards *, uint32_t wildcards); +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 */