summaryrefslogtreecommitdiff
path: root/lib/dp-packet.c
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2015-02-25 12:01:53 -0800
committerPravin B Shelar <pshelar@nicira.com>2015-03-03 13:37:34 -0800
commite14deea0bd133796872d06f39a14d0393880f5bb (patch)
tree8b9d71706a059aad0e33c3483b39c78994de4e1b /lib/dp-packet.c
parent5aa5d00e989c31650501d96c38c835e256c47593 (diff)
downloadopenvswitch-e14deea0bd133796872d06f39a14d0393880f5bb.tar.gz
dpif_packet: Rename to dp_packet
dp_packet is short and better name for datapath packet structure. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
Diffstat (limited to 'lib/dp-packet.c')
-rw-r--r--lib/dp-packet.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/dp-packet.c b/lib/dp-packet.c
new file mode 100644
index 000000000..d77f8e4c9
--- /dev/null
+++ b/lib/dp-packet.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2014 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <config.h>
+#include "dp-packet.h"
+
+#include "ofpbuf.h"
+
+struct dp_packet *
+dp_packet_new_with_headroom(size_t size, size_t headroom)
+{
+ struct dp_packet *p = xmalloc(sizeof *p);
+ struct ofpbuf *b = &p->ofpbuf;
+
+ ofpbuf_init(b, size + headroom);
+ ofpbuf_reserve(b, headroom);
+ p->md = PKT_METADATA_INITIALIZER(0);
+
+ return p;
+}
+
+struct dp_packet *
+dp_packet_clone_from_ofpbuf(const struct ofpbuf *b)
+{
+ struct dp_packet *p = xmalloc(sizeof *p);
+ size_t headroom = ofpbuf_headroom(b);
+
+ ofpbuf_init(&p->ofpbuf, ofpbuf_size(b) + headroom);
+ p->md = PKT_METADATA_INITIALIZER(0);
+ ofpbuf_reserve(&p->ofpbuf, headroom);
+
+ ofpbuf_put(&p->ofpbuf, ofpbuf_data(b), ofpbuf_size(b));
+
+ if (b->frame) {
+ uintptr_t data_delta
+ = (char *)ofpbuf_data(&p->ofpbuf) - (char *)ofpbuf_data(b);
+
+ p->ofpbuf.frame = (char *) b->frame + data_delta;
+ }
+ p->ofpbuf.l2_5_ofs = b->l2_5_ofs;
+ p->ofpbuf.l3_ofs = b->l3_ofs;
+ p->ofpbuf.l4_ofs = b->l4_ofs;
+
+ return p;
+}
+
+struct dp_packet *
+dp_packet_clone(struct dp_packet *p)
+{
+ struct dp_packet *newp;
+
+ newp = dp_packet_clone_from_ofpbuf(&p->ofpbuf);
+ memcpy(&newp->md, &p->md, sizeof p->md);
+
+ dp_packet_set_dp_hash(newp, dp_packet_get_dp_hash(p));
+
+ return newp;
+}