Esempio n. 1
0
/* 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;
}
Esempio n. 2
0
/* 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;
}
Esempio n. 3
0
/* 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;
}
Esempio n. 4
0
/* 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);
}