Merge remote branch 'repo/master' into stats
[openvswitch] / include / openflow.h
index 8b8513ed4558ac4e006140bc1c9610b0393ff20e..7462b884fd3ca59e3561ff43de4349d3df164dbc 100644 (file)
@@ -61,7 +61,11 @@ enum ofp_port {
     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. */
@@ -350,8 +354,10 @@ struct ofp_flow_stats {
     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 {
@@ -363,8 +369,10 @@ 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 */
@@ -381,13 +389,47 @@ struct ofp_flow_stat_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 */