ofpbuf: Add ofpbuf_init_dpdk()
authorPravin Shelar <pshelar@nicira.com>
Mon, 31 Mar 2014 20:22:39 +0000 (13:22 -0700)
committerPravin B Shelar <pshelar@nicira.com>
Sun, 30 Mar 2014 13:18:48 +0000 (06:18 -0700)
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
lib/ofpbuf.c
lib/ofpbuf.h

index 56521b7..21d8df6 100644 (file)
 #include "netdev-dpdk.h"
 #include "util.h"
 
+static void
+ofpbuf_init__(struct ofpbuf *b, size_t allocated, enum ofpbuf_source source)
+{
+    b->allocated = allocated;
+    b->source = source;
+    b->l2 = NULL;
+    b->l2_5_ofs = b->l3_ofs = b->l4_ofs = UINT16_MAX;
+    list_poison(&b->list_node);
+}
+
 static void
 ofpbuf_use__(struct ofpbuf *b, void *base, size_t allocated,
              enum ofpbuf_source source)
@@ -30,11 +40,7 @@ ofpbuf_use__(struct ofpbuf *b, void *base, size_t allocated,
     ofpbuf_set_data(b, base);
     ofpbuf_set_size(b, 0);
 
-    b->allocated = allocated;
-    b->source = source;
-    b->l2 = NULL;
-    b->l2_5_ofs = b->l3_ofs = b->l4_ofs = UINT16_MAX;
-    list_poison(&b->list_node);
+    ofpbuf_init__(b, allocated, source);
 }
 
 /* Initializes 'b' as an empty ofpbuf that contains the 'allocated' bytes of
@@ -101,6 +107,18 @@ ofpbuf_use_const(struct ofpbuf *b, const void *data, size_t size)
     ofpbuf_set_size(b, size);
 }
 
+/* Initializes 'b' as an empty ofpbuf that contains the 'allocated' bytes of
+ * memory starting at 'base'.  DPDK allocated ofpbuf and *data is allocated
+ * from one continous memory region, so in memory data start right after
+ * ofpbuf.  Therefore there is special method to free this type of
+ * buffer.  ofpbuf base, data and size are initialized by dpdk rcv() so no
+ * need to initialize those fields. */
+void
+ofpbuf_init_dpdk(struct ofpbuf *b, size_t allocated)
+{
+    ofpbuf_init__(b, allocated, OFPBUF_DPDK);
+}
+
 /* Initializes 'b' as an empty ofpbuf with an initial capacity of 'size'
  * bytes. */
 void
index 975438b..f19da7b 100644 (file)
@@ -85,6 +85,8 @@ void ofpbuf_use_stack(struct ofpbuf *, void *, size_t);
 void ofpbuf_use_stub(struct ofpbuf *, void *, size_t);
 void ofpbuf_use_const(struct ofpbuf *, const void *, size_t);
 
+void ofpbuf_init_dpdk(struct ofpbuf *b, size_t allocated);
+
 void ofpbuf_init(struct ofpbuf *, size_t);
 void ofpbuf_uninit(struct ofpbuf *);
 static inline void *ofpbuf_get_uninit_pointer(struct ofpbuf *);