11 #include <arpa/inet.h>
13 #include "odp_ipfragreass_helpers.h"
14 #include "odp_ipfragreass_ip.h"
16 #define IP_SRC_ADDR 0xC0A80001
17 #define IP_DST_ADDR 0xC0A80002
19 static void set_random_payload(
odp_packet_t packet, uint32_t payload_offset,
23 unsigned char *buffer;
24 unsigned char seed = rand() % (UINT8_MAX + 1);
25 uint32_t bytes_remaining = 0;
31 for (i = 0; i < size; ++i) {
33 &bytes_remaining, NULL);
34 for (j = 0; i < size && j < bytes_remaining; ++j, ++i)
35 buffer[j] = (
unsigned char)(seed + i);
40 uint32_t max_size, uint32_t min_size)
43 unsigned char *buffer;
44 odph_ipv4hdr_t *header;
47 uint32_t header_len_words;
49 size = (rand() % (max_size - min_size)) + min_size;
56 header_len_words = (rand() % (IP_IHL_MAX - IP_IHL_MIN + 1));
57 header_len_words += IP_IHL_MIN;
58 header_len = WORDS_TO_BYTES(header_len_words);
59 assert(header_len >= IP_HDR_LEN_MIN && header_len <= IP_HDR_LEN_MAX);
63 header = (odph_ipv4hdr_t *)buffer;
66 header->proto = ODPH_IPPROTO_UDP;
69 ipv4hdr_set_ihl_words(header, header_len_words);
70 ipv4hdr_set_payload_len(header, size - header_len);
72 odph_ipv4_csum_update(result);
76 set_random_payload(result, header_len, size);
88 for (i = 0; i < num_packets; ++i) {
90 int j = rand() % num_packets;
92 packets[i] = packets[j];
98 uint32_t offset_b, uint32_t length)
101 void *data_a, *data_b;
102 uint32_t bytes_remaining_a = 0;
103 uint32_t bytes_remaining_b = 0;
107 uint32_t bytes_remaining;
113 bytes_remaining = min(bytes_remaining_a, bytes_remaining_b);
114 bytes_remaining = min(bytes_remaining, length - i);
115 assert(bytes_remaining != 0 && data_a && data_b);
117 status = memcmp(data_a, data_b, bytes_remaining);
120 i += bytes_remaining;
odp_u16be_t odp_cpu_to_be_16(uint16_t cpu16)
Convert cpu native uint16_t to 16bit big endian.
uint16_t odp_u16be_t
unsigned 16bit big endian
odp_u32be_t odp_cpu_to_be_32(uint32_t cpu32)
Convert cpu native uint32_t to 32bit big endian.
int odp_packet_l3_offset_set(odp_packet_t pkt, uint32_t offset)
Set layer 3 start offset.
void * odp_packet_data(odp_packet_t pkt)
Packet data pointer.
odp_packet_t odp_packet_alloc(odp_pool_t pool, uint32_t len)
Allocate a packet from a packet pool.
#define ODP_PACKET_INVALID
Invalid packet.
void odp_packet_ts_set(odp_packet_t pkt, odp_time_t timestamp)
Set packet timestamp.
void * odp_packet_offset(odp_packet_t pkt, uint32_t offset, uint32_t *len, odp_packet_seg_t *seg)
Packet offset pointer.
void odp_packet_has_ipv4_set(odp_packet_t pkt, int val)
Set flag for IPv4.
odp_time_t odp_time_global(void)
Current global time.