X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=lib%2Fofp-util.h;h=f7490a6ebdb3e917e384a900409b78fc9ffb9ed5;hb=e5b2afdbde9b7d6dc8d2f1bc641b6bcd3a1c7395;hp=c87b04b745a42f8531ae3223549471ad9ac1605c;hpb=007948177581f3b3dad188221593d0e4bdca6ba0;p=openvswitch diff --git a/lib/ofp-util.h b/lib/ofp-util.h index c87b04b7..f7490a6e 100644 --- a/lib/ofp-util.h +++ b/lib/ofp-util.h @@ -99,11 +99,11 @@ ovs_be32 ofputil_wcbits_to_netmask(int wcbits); int ofputil_netmask_to_wcbits(ovs_be32 netmask); /* Work with OpenFlow 1.0 ofp_match. */ +void ofputil_wildcard_from_openflow(uint32_t ofpfw, struct flow_wildcards *); void ofputil_cls_rule_from_match(const struct ofp_match *, unsigned int priority, struct cls_rule *); +void ofputil_normalize_rule(struct cls_rule *, enum nx_flow_format); void ofputil_cls_rule_to_match(const struct cls_rule *, struct ofp_match *); -void normalize_match(struct ofp_match *); -char *ofp_match_to_literal_string(const struct ofp_match *match); /* dl_type translation between OpenFlow and 'struct flow' format. */ ovs_be16 ofputil_dl_type_to_openflow(ovs_be16 flow_dl_type); @@ -163,14 +163,27 @@ struct ofputil_flow_stats { uint32_t duration_nsec; uint16_t idle_timeout; uint16_t hard_timeout; - uint64_t packet_count; - uint64_t byte_count; + uint64_t packet_count; /* Packet count, UINT64_MAX if unknown. */ + uint64_t byte_count; /* Byte count, UINT64_MAX if unknown. */ union ofp_action *actions; size_t n_actions; }; int ofputil_decode_flow_stats_reply(struct ofputil_flow_stats *, struct ofpbuf *msg); +void ofputil_append_flow_stats_reply(const struct ofputil_flow_stats *, + struct list *replies); + +/* Aggregate stats reply, independent of flow format. */ +struct ofputil_aggregate_stats { + uint64_t packet_count; /* Packet count, UINT64_MAX if unknown. */ + uint64_t byte_count; /* Byte count, UINT64_MAX if unknown. */ + uint32_t flow_count; +}; + +struct ofpbuf *ofputil_encode_aggregate_stats_reply( + const struct ofputil_aggregate_stats *stats, + const struct ofp_stats_msg *request); /* Flow removed message, independent of flow format. */ struct ofputil_flow_removed { @@ -180,8 +193,8 @@ struct ofputil_flow_removed { uint32_t duration_sec; uint32_t duration_nsec; uint16_t idle_timeout; - uint64_t packet_count; - uint64_t byte_count; + uint64_t packet_count; /* Packet count, UINT64_MAX if unknown. */ + uint64_t byte_count; /* Byte count, UINT64_MAX if unknown. */ }; int ofputil_decode_flow_removed(struct ofputil_flow_removed *, @@ -221,10 +234,16 @@ void *put_nxmsg_xid(size_t openflow_len, uint32_t subtype, ovs_be32 xid, void update_openflow_length(struct ofpbuf *); -void *ofputil_make_stats_request(size_t body_len, uint16_t type, - struct ofpbuf **); -void *ofputil_make_nxstats_request(size_t openflow_len, uint32_t subtype, - struct ofpbuf **); +void *ofputil_make_stats_request(size_t openflow_len, uint16_t type, + uint32_t subtype, struct ofpbuf **); +void *ofputil_make_stats_reply(size_t openflow_len, + const struct ofp_stats_msg *request, + struct ofpbuf **); + +void ofputil_start_stats_reply(const struct ofp_stats_msg *request, + struct list *); +struct ofpbuf *ofputil_reserve_stats_reply(size_t len, struct list *); +void *ofputil_append_stats_reply(size_t len, struct list *); const void *ofputil_stats_body(const struct ofp_header *); size_t ofputil_stats_body_len(const struct ofp_header *); @@ -272,6 +291,10 @@ bool action_outputs_to_port(const union ofp_action *, ovs_be16 port); int ofputil_pull_actions(struct ofpbuf *, unsigned int actions_len, union ofp_action **, size_t *); + +bool ofputil_actions_equal(const union ofp_action *a, size_t n_a, + const union ofp_action *b, size_t n_b); +union ofp_action *ofputil_actions_clone(const union ofp_action *, size_t n); /* OpenFlow vendors. *