On Thu, Jul 05, 2012 at 11:12:29PM -0700, Ben Pfaff wrote:
> OpenFlow headers are not as uniform as they could be, with size, alignment,
> and numbering changes from one version to another and across varieties
> (e.g. ordinary messages vs. "stats" messages). Until now the Open vSwitch
> internal APIs haven't done a good job of abstracting those differences in
> header formats. This commit changes that; from this commit forward very
> little code actually needs to understand the header format or numbering.
> Instead, it can just encode or decode, or pull or put, the header using
> a more abstract API using the ofpraw_, ofptype_, and other APIs in the
> new ofp-msgs module.
>
> Signed-off-by: Ben Pfaff <[email protected]>
> ---
> v3: New commit. This isn't complete yet: in particular the program for
> extracting the numbers from the ofp-msgs.h header file isn't written,
> although there's a skeleton. That means that nothing has been tested or
> carefully looked over, either.
>
> v3->v4: Almost ready. The ofp-msgs.c functions need some comments
> and careful review.
>
> v4->v5: Ready for review.
I noticed a compile time warning.
This is different to the warning I reported in a separate email.
[snip]
> diff --git a/lib/ofp-util.c b/lib/ofp-util.c
[snip]
> @@ -2975,12 +2417,18 @@ ofputil_put_switch_features_port(const struct
> ofputil_phy_port *pp,
> /* Decodes the OpenFlow "port status" message in '*ops' into an abstract form
> * in '*ps'. Returns 0 if successful, otherwise an OFPERR_* value. */
> enum ofperr
> -ofputil_decode_port_status(const struct ofp_port_status *ops,
> +ofputil_decode_port_status(const struct ofp_header *oh,
> struct ofputil_port_status *ps)
> {
> + const struct ofp_port_status *ops;
> + enum ofpraw raw;
> struct ofpbuf b;
> int retval;
>
> + ofpbuf_use_const(&b, oh, ntohs(oh->length));
> + raw = ofpraw_pull_assert(&b);
> + ops = ofpbuf_pull(&b, sizeof *ops);
> +
> if (ops->reason != OFPPR_ADD &&
> ops->reason != OFPPR_DELETE &&
> ops->reason != OFPPR_MODIFY) {
The variable raw seems to be unused in this function,
perhaps it could be removed?
> @@ -2988,9 +2436,7 @@ ofputil_decode_port_status(const struct ofp_port_status
> *ops,
> }
> ps->reason = ops->reason;
>
> - ofpbuf_use_const(&b, ops, ntohs(ops->header.length));
> - ofpbuf_pull(&b, sizeof *ops);
> - retval = ofputil_pull_phy_port(ops->header.version, &b, &ps->desc);
> + retval = ofputil_pull_phy_port(oh->version, &b, &ps->desc);
> assert(retval != EOF);
> return retval;
> }
[snip]
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev