blob: 37845d31177f02a800a616104a02b5b4a2054e0b (
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
|
/**
* struct field - Pre-computed field data
* @offset: Offset in packet header, bytes
* @groups: Number of 4-bit groups
* @rules: Number of inserted rules
* @bsize: Lookup table bucket size, bytes
* @lt: Lookup table
* @mt: Mapping table (n:m rules in next field)
*/
struct field {
int offset;
int groups;
int rules;
int bsize;
uint8_t *lt;
union map_bucket *mt;
};
/**
* struct set - Array of sets
* @fields: Composing fields
*/
struct set {
struct field *fields;
};
#define for_each_field(f, s, layout) \
for ((i) = 0, (f) = (s)->fields; \
(layout)[(i)]->type != KEY; \
i++, f++)
int init(struct set *s, struct desc_spec **layout);
int add(struct set *s, struct desc_spec **layout, uint8_t *data);
int list_or_del(struct set *s, struct desc_spec **layout, uint8_t *match);
#ifdef VERBOSE
void show_lookup(struct field *f);
void show_mapping(struct field *f, int to_key);
#else
#define show_lookup(...) do { } while (0)
#define show_mapping(...) do { } while (0)
#endif
|