/* Creates and returns a new dp_packet whose data are copied from 'buffer'. The * returned dp_packet will additionally have 'headroom' bytes of headroom. */ struct dp_packet * dp_packet_clone_with_headroom(const struct dp_packet *buffer, size_t headroom) { struct dp_packet *new_buffer; new_buffer = dp_packet_clone_data_with_headroom(dp_packet_data(buffer), dp_packet_size(buffer), headroom); new_buffer->l2_pad_size = buffer->l2_pad_size; new_buffer->l2_5_ofs = buffer->l2_5_ofs; new_buffer->l3_ofs = buffer->l3_ofs; new_buffer->l4_ofs = buffer->l4_ofs; new_buffer->md = buffer->md; new_buffer->cutlen = buffer->cutlen; new_buffer->packet_type = buffer->packet_type; #ifdef DPDK_NETDEV new_buffer->mbuf.ol_flags = buffer->mbuf.ol_flags; #else new_buffer->rss_hash_valid = buffer->rss_hash_valid; #endif if (dp_packet_rss_valid(new_buffer)) { #ifdef DPDK_NETDEV new_buffer->mbuf.hash.rss = buffer->mbuf.hash.rss; #else new_buffer->rss_hash = buffer->rss_hash; #endif } return new_buffer; }
/* Creates and returns a new dp_packet whose data are copied from 'buffer'. The * returned dp_packet will additionally have 'headroom' bytes of headroom. */ struct dp_packet * dp_packet_clone_with_headroom(const struct dp_packet *buffer, size_t headroom) { struct dp_packet *new_buffer; new_buffer = dp_packet_clone_data_with_headroom(dp_packet_data(buffer), dp_packet_size(buffer), headroom); new_buffer->l2_pad_size = buffer->l2_pad_size; new_buffer->l2_5_ofs = buffer->l2_5_ofs; new_buffer->l3_ofs = buffer->l3_ofs; new_buffer->l4_ofs = buffer->l4_ofs; new_buffer->md = buffer->md; return new_buffer; }
/* Creates and returns a new dp_packet whose data are copied from 'buffer'. The * returned dp_packet will additionally have 'headroom' bytes of headroom. */ struct dp_packet * dp_packet_clone_with_headroom(const struct dp_packet *buffer, size_t headroom) { struct dp_packet *new_buffer; new_buffer = dp_packet_clone_data_with_headroom(dp_packet_data(buffer), dp_packet_size(buffer), headroom); if (buffer->frame) { uintptr_t data_delta = (char *)dp_packet_data(new_buffer) - (char *)dp_packet_data(buffer); new_buffer->frame = (char *) buffer->frame + data_delta; } new_buffer->l2_pad_size = buffer->l2_pad_size; new_buffer->l2_5_ofs = buffer->l2_5_ofs; new_buffer->l3_ofs = buffer->l3_ofs; new_buffer->l4_ofs = buffer->l4_ofs; new_buffer->md = buffer->md; return new_buffer; }
/* Creates and returns a new dp_packet that initially contains a copy of the * 'size' bytes of data starting at 'data' with no headroom or tailroom. */ struct dp_packet * dp_packet_clone_data(const void *data, size_t size) { return dp_packet_clone_data_with_headroom(data, size, 0); }