[ovs-dev] [bondlib 04/19] packets: Reserve headroom for VLAN header in eth_compose(), snap_compose().

Ben Pfaff blp at nicira.com
Fri Mar 25 17:35:37 UTC 2011


This allows callers to add a VLAN header to the composed packet and send
it out on a VLAN without copying the whole payload.
---
 lib/packets.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/packets.c b/lib/packets.c
index 4c6cc48..25c5dda 100644
--- a/lib/packets.c
+++ b/lib/packets.c
@@ -236,7 +236,8 @@ eth_compose(struct ofpbuf *b, const uint8_t eth_dst[ETH_ADDR_LEN],
 
     ofpbuf_clear(b);
 
-    ofpbuf_prealloc_tailroom(b, ETH_HEADER_LEN + size);
+    ofpbuf_prealloc_tailroom(b, ETH_HEADER_LEN + VLAN_HEADER_LEN + size);
+    ofpbuf_reserve(b, VLAN_HEADER_LEN);
     eth = ofpbuf_put_uninit(b, ETH_HEADER_LEN);
     data = ofpbuf_put_uninit(b, size);
 
@@ -263,7 +264,9 @@ snap_compose(struct ofpbuf *b, const uint8_t eth_dst[ETH_ADDR_LEN],
     /* Compose basic packet structure.  (We need the payload size to stick into
      * the 802.2 header.) */
     ofpbuf_clear(b);
-    ofpbuf_prealloc_tailroom(b, ETH_HEADER_LEN + LLC_SNAP_HEADER_LEN + size);
+    ofpbuf_prealloc_tailroom(b, ETH_HEADER_LEN + VLAN_HEADER_LEN
+                             + LLC_SNAP_HEADER_LEN + size);
+    ofpbuf_reserve(b, VLAN_HEADER_LEN);
     eth = ofpbuf_put_zeros(b, ETH_HEADER_LEN);
     llc_snap = ofpbuf_put_zeros(b, LLC_SNAP_HEADER_LEN);
     payload = ofpbuf_put_uninit(b, size);
-- 
1.7.1




More information about the dev mailing list