diff options
author | Pravin B Shelar <pshelar@nicira.com> | 2015-02-25 12:01:53 -0800 |
---|---|---|
committer | Pravin B Shelar <pshelar@nicira.com> | 2015-03-03 13:37:34 -0800 |
commit | e14deea0bd133796872d06f39a14d0393880f5bb (patch) | |
tree | 8b9d71706a059aad0e33c3483b39c78994de4e1b /lib/dp-packet.c | |
parent | 5aa5d00e989c31650501d96c38c835e256c47593 (diff) | |
download | openvswitch-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.c | 71 |
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; +} |