summaryrefslogtreecommitdiff
path: root/include/openflow/openflow.h
diff options
context:
space:
mode:
authorJustin Pettit <jpettit@nicira.com>2010-01-19 15:35:02 -0800
committerJustin Pettit <jpettit@nicira.com>2010-02-20 02:22:28 -0800
commit26c3f94a553be66dd037159148f30b47ef2c6f4b (patch)
tree7405f30565e3fa6ee75af7db7539c1593ba4a5fb /include/openflow/openflow.h
parentfb892732bac6787c6fb943554f8000e26477dd85 (diff)
downloadopenvswitch-26c3f94a553be66dd037159148f30b47ef2c6f4b.tar.gz
ofproto: Improve resolution of flow stats and removed messages (OpenFlow 1.0)
OpenFlow 1.0 increases the resolution of flow stats and flow removed messages from seconds to (potentially) nanoseconds. The spec stats that only millisecond granularity is required, so that's all we provide at this time. Increasing to nanoseconds would require more significant code change and would not provide an appreciable improvement in real world use. NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until the final commit in this OpenFlow 1.0 set.
Diffstat (limited to 'include/openflow/openflow.h')
-rw-r--r--include/openflow/openflow.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/include/openflow/openflow.h b/include/openflow/openflow.h
index b655acf56..654682d0b 100644
--- a/include/openflow/openflow.h
+++ b/include/openflow/openflow.h
@@ -583,9 +583,11 @@ struct ofp_flow_removed {
uint8_t reason; /* One of OFPRR_*. */
uint8_t pad[1]; /* Align to 32-bits. */
- uint32_t duration; /* Time flow was alive in seconds. */
+ uint32_t duration_sec; /* Time flow was alive in seconds. */
+ uint32_t duration_nsec; /* Time flow was alive in nanoseconds beyond
+ duration_sec. */
uint16_t idle_timeout; /* Idle timeout from original flow mod. */
- uint8_t pad2[6]; /* Align to 64-bits. */
+ uint8_t pad2[2]; /* Align to 64-bits. */
uint64_t packet_count;
uint64_t byte_count;
};
@@ -752,18 +754,20 @@ struct ofp_flow_stats {
uint8_t table_id; /* ID of table flow came from. */
uint8_t pad;
struct ofp_match match; /* Description of fields. */
- uint32_t duration; /* Time flow has been alive in seconds. */
+ uint32_t duration_sec; /* Time flow has been alive in seconds. */
+ uint32_t duration_nsec; /* Time flow has been alive in nanoseconds
+ beyond duration_sec. */
uint16_t priority; /* Priority of the entry. Only meaningful
when this is not an exact-match entry. */
uint16_t idle_timeout; /* Number of seconds idle before expiration. */
uint16_t hard_timeout; /* Number of seconds before expiration. */
- uint8_t pad2[2]; /* Align to 64 bits. */
+ uint8_t pad2[6]; /* Align to 64 bits. */
uint64_t cookie; /* Opaque controller-issued identifier. */
uint64_t packet_count; /* Number of packets in flow. */
uint64_t byte_count; /* Number of bytes in flow. */
struct ofp_action_header actions[0]; /* Actions. */
};
-OFP_ASSERT(sizeof(struct ofp_flow_stats) == 80);
+OFP_ASSERT(sizeof(struct ofp_flow_stats) == 88);
/* Body for ofp_stats_request of type OFPST_AGGREGATE. */
struct ofp_aggregate_stats_request {