summaryrefslogtreecommitdiff
path: root/trafgen_conf.h
blob: 8a6e4d613033a505bba7a7d0af6f841bcc0ba5bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#ifndef TRAFGEN_CONF
#define TRAFGEN_CONF

#include <stdint.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>

#include "trafgen_proto.h"

#define PROTO_MAX_LAYERS	16

#define TYPE_INC	0
#define TYPE_DEC	1

enum csum {
	CSUM_IP,
	CSUM_UDP,
	CSUM_TCP,
	CSUM_UDP6,
	CSUM_TCP6,
	CSUM_ICMP6,
};

struct counter {
	int type, inc;
	uint8_t min, max, val;
	off_t off;
};

struct randomizer {
	off_t off;
};

struct csum16 {
	off_t off, from, to;
	enum csum which;
};

struct packet {
	uint32_t id;
	uint8_t *payload;
	size_t len;
	struct proto_hdr *headers[PROTO_MAX_LAYERS];
	size_t headers_count;
	struct timespec tstamp;
	bool is_created;
};

struct packet_dyn {
	struct counter *cnt;
	size_t clen;
	struct randomizer *rnd;
	size_t rlen;
	struct csum16 *csum;
	size_t slen;
	struct proto_field **fields;
	size_t flen;
};

static inline bool packet_dyn_has_elems(struct packet_dyn *p)
{
	return (p->clen || p->rlen || p->slen);
}

static inline bool packet_dyn_has_only_csums(struct packet_dyn *p)
{
	return (p->clen == 0 && p->rlen == 0 && p->slen);
}

static inline bool packet_dyn_has_fields(struct packet_dyn *p)
{
	return p->flen;
}

extern void compile_packets_str(char *str, bool verbose, unsigned int cpu);
extern void compile_packets(char *file, bool verbose, unsigned int cpu,
			    bool invoke_cpp, char *const cpp_argv[]);
extern void cleanup_packets(void);

extern void set_fill(uint8_t val, size_t len);

extern struct packet *current_packet(void);
extern uint32_t current_packet_id(void);
extern struct packet *packet_get(uint32_t id);
extern struct packet *realloc_packet(void);

#endif /* TRAFGEN_CONF */