X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fofp-util.h;h=eccce883ba8f5fa5c3c432ffcb6cc75db11501d2;hb=b2dd70be133bf86c3b8a1d597594489827887b69;hp=2de6e769f18bb2eaefb420b451e21d335e0db724;hpb=0fb7792ab3428a28044e53b443388cbc1231035a;p=sliver-openvswitch.git diff --git a/lib/ofp-util.h b/lib/ofp-util.h index 2de6e769f..eccce883b 100644 --- a/lib/ofp-util.h +++ b/lib/ofp-util.h @@ -31,6 +31,7 @@ struct ofpbuf; union ofp_action; +struct ofpact_set_field; /* Port numbers. */ enum ofperr ofputil_port_from_ofp11(ovs_be32 ofp11_port, @@ -89,6 +90,7 @@ enum ofputil_protocol { OFPUTIL_P_OF10_NXM_TID = 1 << 3, #define OFPUTIL_P_OF10_STD_ANY (OFPUTIL_P_OF10_STD | OFPUTIL_P_OF10_STD_TID) #define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID) +#define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY) /* OpenFlow 1.1 protocol. * @@ -376,19 +378,33 @@ struct ofpbuf *ofputil_encode_flow_removed(const struct ofputil_flow_removed *, /* Abstract packet-in message. */ struct ofputil_packet_in { + /* Packet data and metadata. + * + * To save bandwidth, in some cases a switch may send only the first + * several bytes of a packet, indicated by 'packet_len < total_len'. When + * the full packet is included, 'packet_len == total_len'. */ const void *packet; - size_t packet_len; - - enum ofp_packet_in_reason reason; /* One of OFPR_*. */ - uint16_t controller_id; /* Controller ID to send to. */ - uint8_t table_id; - ovs_be64 cookie; + size_t packet_len; /* Number of bytes in 'packet'. */ + size_t total_len; /* Size of packet, pre-truncation. */ + struct flow_metadata fmd; + /* Identifies a buffer in the switch that contains the full packet, to + * allow the controller to reference it later without having to send the + * entire packet back to the switch. + * + * UINT32_MAX indicates that the packet is not buffered in the switch. A + * switch should only use UINT32_MAX when it sends the entire packet. */ uint32_t buffer_id; - int send_len; - uint16_t total_len; /* Full length of frame. */ - struct flow_metadata fmd; /* Metadata at creation time. */ + /* Reason that the packet-in is being sent. */ + enum ofp_packet_in_reason reason; /* One of OFPR_*. */ + + /* Information about the OpenFlow flow that triggered the packet-in. + * + * A packet-in triggered by a flow table miss has no associated flow. In + * that case, 'cookie' is UINT64_MAX. */ + uint8_t table_id; /* OpenFlow table ID. */ + ovs_be64 cookie; /* Flow's cookie. */ }; enum ofperr ofputil_decode_packet_in(struct ofputil_packet_in *, @@ -677,11 +693,23 @@ struct ofputil_role_request { uint64_t generation_id; }; +struct ofputil_role_status { + enum ofp12_controller_role role; + enum ofp14_controller_role_reason reason; + uint64_t generation_id; +}; + enum ofperr ofputil_decode_role_message(const struct ofp_header *, struct ofputil_role_request *); struct ofpbuf *ofputil_encode_role_reply(const struct ofp_header *, const struct ofputil_role_request *); +struct ofpbuf *ofputil_encode_role_status( + const struct ofputil_role_status *status, + enum ofputil_protocol protocol); + +enum ofperr ofputil_decode_role_status(const struct ofp_header *oh, + struct ofputil_role_status *rs); /* Abstract table stats. * * For now we use ofp12_table_stats as a superset of the other protocol @@ -691,6 +719,34 @@ struct ofpbuf *ofputil_encode_table_stats_reply( const struct ofp12_table_stats[], int n, const struct ofp_header *request); +/* Queue configuration request. */ +struct ofpbuf *ofputil_encode_queue_get_config_request(enum ofp_version, + ofp_port_t port); +enum ofperr ofputil_decode_queue_get_config_request(const struct ofp_header *, + ofp_port_t *port); + +/* Queue configuration reply. */ +struct ofputil_queue_config { + uint32_t queue_id; + + /* Each of these optional values is expressed in tenths of a percent. + * Values greater than 1000 indicate that the feature is disabled. + * UINT16_MAX indicates that the value is omitted. */ + uint16_t min_rate; + uint16_t max_rate; +}; + +struct ofpbuf *ofputil_encode_queue_get_config_reply( + const struct ofp_header *request); +void ofputil_append_queue_get_config_reply( + struct ofpbuf *reply, const struct ofputil_queue_config *); + +enum ofperr ofputil_decode_queue_get_config_reply(struct ofpbuf *reply, + ofp_port_t *); +int ofputil_pull_queue_get_config_reply(struct ofpbuf *reply, + struct ofputil_queue_config *); + + /* Abstract nx_flow_monitor_request. */ struct ofputil_flow_monitor_request { uint32_t id;