Finish removing references to the MAC table.
[sliver-openvswitch.git] / include / openflow.h
index 96a60c2..43fb817 100644 (file)
@@ -43,7 +43,7 @@
 #endif
 
 /* Maximum length of a OpenFlow packet. */
-#define OFP_MAXLEN (sizeof(struct ofp_data_hello) \
+#define OFP_MAXLEN (sizeof(struct ofp_switch_features) \
         + (sizeof(struct ofp_phy_port) * OFPP_MAX) + 200)
 
 #define OFP_VERSION   1
@@ -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. */
@@ -71,21 +75,24 @@ enum ofp_port {
 };
 
 enum ofp_type {
-    OFPT_CONTROL_HELLO,      /* 0  Controller/switch message */
-    OFPT_DATA_HELLO,         /* 1  Controller/switch message */
-    OFPT_PACKET_IN,          /* 2  Async message */
-    OFPT_PACKET_OUT,         /* 3  Controller/switch message */
-    OFPT_FLOW_MOD,           /* 4  Controller/switch message */
-    OFPT_FLOW_EXPIRED,       /* 5  Async message */
-    OFPT_TABLE,              /* 6  Controller/switch message */
-    OFPT_PORT_MOD,           /* 7  Controller/switch message */
-    OFPT_PORT_STATUS,        /* 8  Async message */
-    OFPT_FLOW_STAT_REQUEST,  /* 9  Controller/switch message */
-    OFPT_FLOW_STAT_REPLY,    /* 10 Controller/switch message */
-    OFPT_TABLE_STAT_REQUEST, /* 11 Controller/switch message */
-    OFPT_TABLE_STAT_REPLY,   /* 12 Controller/switch message */
-    OFPT_PORT_STAT_REQUEST,  /* 13 Controller/switch message */
-    OFPT_PORT_STAT_REPLY     /* 14 Controller/switch message */
+    OFPT_FEATURES_REQUEST,   /*  0 Controller/switch message */
+    OFPT_FEATURES_REPLY,     /*  1 Controller/switch message */
+    OFPT_GET_CONFIG_REQUEST, /*  2 Controller/switch message */
+    OFPT_GET_CONFIG_REPLY,   /*  3 Controller/switch message */
+    OFPT_SET_CONFIG,         /*  4 Controller/switch message */
+    OFPT_PACKET_IN,          /*  5 Async message */
+    OFPT_PACKET_OUT,         /*  6 Controller/switch message */
+    OFPT_FLOW_MOD,           /*  7 Controller/switch message */
+    OFPT_FLOW_EXPIRED,       /*  8 Async message */
+    OFPT_TABLE,              /*  9 Controller/switch message */
+    OFPT_PORT_MOD,           /* 10 Controller/switch message */
+    OFPT_PORT_STATUS,        /* 11 Async message */
+    OFPT_FLOW_STAT_REQUEST,  /* 12 Controller/switch message */
+    OFPT_FLOW_STAT_REPLY,    /* 13 Controller/switch message */
+    OFPT_TABLE_STAT_REQUEST, /* 14 Controller/switch message */
+    OFPT_TABLE_STAT_REPLY,   /* 15 Controller/switch message */
+    OFPT_PORT_STAT_REQUEST,  /* 16 Controller/switch message */
+    OFPT_PORT_STAT_REPLY     /* 17 Controller/switch message */
 };
 
 /* Header on all OpenFlow packets. */
@@ -99,22 +106,18 @@ struct ofp_header {
 };
 
 #define OFP_DEFAULT_MISS_SEND_LEN   128
-#define OFP_MISS_SEND_LEN_UNCHANGED 0xffff
 
-/* Flag to indicate that datapath should notify the controller of
- * expired flow entries.
- */
-#define OFP_CHELLO_SEND_FLOW_EXP 0x0001
+enum ofp_config_flags {
+    /* Tells datapath to notify the controller of expired flow entries. */
+    OFPC_SEND_FLOW_EXP = 1 << 0
+};
 
-/* Controller hello (controller -> datapath). */
-struct ofp_control_hello {
+/* Switch configuration. */
+struct ofp_switch_config {
     struct ofp_header header;
-    uint32_t version;         /* Max supported protocol version (?) */
-    uint16_t flags;           
-    uint16_t miss_send_len;   /* Max bytes of new flow that datapath should 
-                                 send to the controller.  A value of 
-                                 OFP_MISS_SEND_LEN_UNCHANGED leaves the 
-                                 currently configured value unchanged. */
+    uint16_t flags;             /* OFPC_* flags. */
+    uint16_t miss_send_len;     /* Max bytes of new flow that datapath should
+                                   send to the controller. */
 };
 
 /* Capabilities supported by the datapath. */
@@ -154,14 +157,13 @@ struct ofp_phy_port {
     uint32_t features;      /* Bitmap of supported "ofp_port_features"s. */
 };
 
-/* Datapath hello (datapath -> controller). */
-struct ofp_data_hello {
+/* Switch features. */
+struct ofp_switch_features {
     struct ofp_header header;
     uint64_t datapath_id;   /* Datapath unique ID */
 
     /* Table info. */
     uint32_t n_exact;       /* Max exact-match table entries. */
-    uint32_t n_mac_only;    /* Max mac-only table entries. */
     uint32_t n_compression; /* Max entries compressed on service port.  */
     uint32_t n_general;     /* Max entries of arbitrary form. */
 
@@ -173,15 +175,9 @@ struct ofp_data_hello {
     uint32_t capabilities;  /* Bitmap of support "ofp_capabilities". */
     uint32_t actions;       /* Bitmap of supported "ofp_action_type"s. */
 
-    /* Miscellany */
-    uint16_t miss_send_len; /* Currently configured value for max bytes 
-                               of new flow that datapath will send to the 
-                               controller. */
-    uint8_t pad[2];         /* Align to 32-bits */
-
     /* Port info.*/
     struct ofp_phy_port ports[0];   /* Port definitions.  The number of ports
-                                      is inferred from the length field in 
+                                      is inferred from the length field in
                                       the header. */
 };
 
@@ -357,8 +353,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 {
@@ -370,8 +368,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 */
@@ -388,13 +388,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 */