OFPP_MAX = 0x100,
/* Fake output "ports". */
- OFPP_NORMAL = 0xfffa, /* Process with normal L2/L3 switching */
+ OFPP_TABLE = 0xfff9, /* Perform actions in flow table.
+ * NB: This can only be the destination
+ * port for packet-out messages.
+ */
+ OFPP_NORMAL = 0xfffa, /* Process with normal L2/L3 switching. */
OFPP_FLOOD = 0xfffb, /* All physical ports except input port and
those disabled by STP. */
OFPP_ALL = 0xfffc, /* All physical ports except input port. */
struct ofp_match match; /* Description of fields */
uint32_t duration; /* Time flow has been alive in seconds. Only
used for non-aggregated results. */
- uint64_t packet_count;
- uint64_t byte_count;
+ uint64_t packet_count; /* Number of packets in flow. */
+ uint64_t byte_count; /* Number of bytes in flow. */
+ uint8_t table_id; /* ID of table flow came from. */
+ uint8_t pad[7]; /* Align to 64-bits. */
};
enum ofp_stat_type {
struct ofp_flow_stat_request {
struct ofp_header header;
struct ofp_match match; /* Fields to match */
+ uint8_t table_id; /* ID of table to read (from ofp_table_stats)
+ or 0xffff for all tables. */
uint8_t type; /* One of OFPFS_ */
- uint8_t pad[3]; /* Align to 32-bits */
+ uint16_t pad; /* Align to 32-bits */
};
/* Current flow statistics reply */
struct ofp_flow_stats flows[0];
};
-/* Table attributes collected at runtime */
-struct ofp_table {
+/* Current table statistics request */
+struct ofp_table_stat_request {
+ struct ofp_header header;
+};
+
+/* Statistics about a particular table */
+struct ofp_table_stats {
+ uint8_t table_id;
+ uint8_t pad[3]; /* Align to 32-bits */
+ char name[OFP_MAX_TABLE_NAME_LEN];
+ uint32_t max_entries; /* Max number of entries supported */
+ uint32_t active_count; /* Number of active entries */
+ uint64_t matched_count; /* Number of packets that hit table */
+};
+
+/* Current table statistics reply */
+struct ofp_table_stat_reply {
+ struct ofp_header header;
+ struct ofp_table_stats tables[]; /* The number of entries is inferred from
+ the length field in the header. */
+};
+
+/* Statistics about a particular port */
+struct ofp_port_stats {
+ uint16_t port_no;
+ uint8_t pad[2]; /* Align to 32-bits */
+ uint64_t rx_count; /* Number of received packets */
+ uint64_t tx_count; /* Number of transmitted packets */
+ uint64_t drop_count; /* Number of packets dropped by interface */
+};
+
+/* Current port statistics request */
+struct ofp_port_stat_request {
+ struct ofp_header header;
+};
+
+/* Current port statistics reply */
+struct ofp_port_stat_reply {
struct ofp_header header;
- char name[OFP_MAX_TABLE_NAME_LEN];
- uint16_t table_id;
- unsigned long int n_flows;
- unsigned long int max_flows;
+ struct ofp_port_stats ports[]; /* The number of entries is inferred from
+ the length field in the header. */
};
#endif /* openflow.h */