ofpbuf: Abstract 'l2' pointer and document usage conventions.
authorJarno Rajahalme <jrajahalme@nicira.com>
Wed, 2 Apr 2014 22:44:21 +0000 (15:44 -0700)
committerJarno Rajahalme <jrajahalme@nicira.com>
Thu, 3 Apr 2014 18:51:59 +0000 (11:51 -0700)
commitcf3b7538666cd1efa314ce4944e4efdf3dd81d99
treec7272f8d75909ce3e2270b36b5f412c00318bcab
parent6b8c377a6e25b18da473c3a24dfad8ec9e01ad7f
ofpbuf: Abstract 'l2' pointer and document usage conventions.

Rename 'l2' to 'frame' and add new ofpbuf_set_frame() and ofpbuf_l2().
ofpbuf_set_frame() alse resets all the layer offsets.  ofpbuf_l2()
returns NULL if the packet has no Ethernet header, as indicated either
by unset l3 offset or NULL frame pointer.  Callers of ofpbuf_l2() are
supposed to check the return value, unless they can otherwise be sure
that the packet has a valid Ethernet header.

The recent commit 437d0d22 made some assumptions that were not valid
regarding the use of the 'l2' pointer in rconn module and by
compose_rarp().  This is now fixed as follows: rconn now relies on the
fact that once OpenFlow messages are given to rconn for transport, the
frame pointer is no longer needed to refer to the OpenFlow header; and
compose_rarp() now sets the frame pointer and offsets as expected.

In addition to storing network frames, ofpbufs are also used for
handling OpenFlow messages and action lists.  lib/ofpbuf.h now has a
comment documenting the current usage conventions and invariants.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
16 files changed:
lib/bundle.c
lib/cfm.c
lib/flow.c
lib/learn.c
lib/odp-execute.c
lib/ofp-actions.c
lib/ofp-msgs.c
lib/ofp-parse.c
lib/ofp-util.c
lib/ofpbuf.c
lib/ofpbuf.h
lib/packets.c
lib/rconn.c
lib/stp.c
ofproto/ofproto-dpif.c
utilities/ovs-ofctl.c