[ovs-dev] [PATCH 09/41] ofp-util: Prepare Packet Out decoder for other Open Flow versions
Ben Pfaff
blp at nicira.com
Wed Aug 8 23:42:30 UTC 2012
On Wed, Aug 08, 2012 at 06:49:44AM +0900, Simon Horman wrote:
> Signed-off-by: Simon Horman <horms at verge.net.au>
> {
> - const struct ofp_packet_out *opo;
> - enum ofperr error;
> enum ofpraw raw;
> struct ofpbuf b;
> + enum ofperr bad_in_port_err = OFPERR_OFPET_BAD_REQUEST;
>
> ofpbuf_use_const(&b, oh, ntohs(oh->length));
> raw = ofpraw_pull_assert(&b);
> - assert(raw == OFPRAW_OFPT10_PACKET_OUT);
>
> - opo = ofpbuf_pull(&b, sizeof *opo);
> - po->buffer_id = ntohl(opo->buffer_id);
> - po->in_port = ntohs(opo->in_port);
> + if (raw == OFPRAW_OFPT10_PACKET_OUT) {
> + enum ofperr error;
> + const struct ofp_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
> +
> + po->buffer_id = ntohl(opo->buffer_id);
> + po->in_port = ntohs(opo->in_port);
> +
> + error = ofpacts_pull_openflow10(&b, ntohs(opo->actions_len), ofpacts);
> + if (error) {
> + return error;
> + }
> + bad_in_port_err = OFPERR_NXBRC_BAD_IN_PORT;
> + } else {
> + NOT_REACHED();
> + }
I think that we should consistently use OFPERR_NXBRC_BAD_IN_PORT.
OFPERR_OFPET_BAD_REQUEST isn't a good substitute because it isn't
encodable as an error at all (it is an error category, not an error
itself).
If there's a better choice for a standard error code in some OpenFlow
version then I'm happy to use that.
More information about the dev
mailing list