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
89
90
91
92
93
94
95
96
97
|
#pragma once
#include <cJSON.h>
#include <adapter_define.h>
#include <sc_common.h>
#define MAX_RULES 1024
/* Public enum */
enum ruleset_type
{
RULESET_TYPE_CLASSIFIER = 0,
RULESET_TYPE_PORT,
RULESET_TYPE_MAX,
};
enum action_type
{
ACTION_MISS = 0,
ACTION_DROP,
ACTION_NF_STEERING,
ACTION_MAX,
};
enum rule_attribute
{
RULE_ATTR_STATIC = 0,
RULE_ATTR_DYNAMIC,
};
enum rule_state
{
RULE_STATE_PENDING = 0,
RULE_STATE_ACTIVE,
RULE_STATE_INACTIVE,
};
struct adapter_info
{
enum adapter_type type;
uint16_t id;
};
struct action
{
enum action_type type;
uint32_t rule_id;
union {
uint16_t sid;
uint16_t data;
};
};
struct rule_field_parser
{
uint8_t proto;
uint8_t proto_mask;
uint8_t priority;
uint8_t rule_state;
uint16_t ether_type;
uint16_t src_port_start;
uint16_t src_port_end;
uint16_t dst_port_start;
uint16_t dst_port_end;
uint32_t src_addr_mask_len;
uint32_t dst_addr_mask_len;
uint32_t rule_id;
enum rule_attribute rule_attr;
union {
uint32_t src_addr_v4;
uint32_t src_addr_v6[4];
uint8_t u8_src_addr_v6[16];
};
union {
uint32_t dst_addr_v4;
uint32_t dst_addr_v6[4];
uint8_t u8_dst_addr_v6[16];
};
struct adapter_info adapter;
struct action action;
};
struct rule_list_parsed
{
uint16_t nr_rules;
uint16_t nr_static_rules;
uint16_t nr_dynamic_rules;
struct rule_field_parser rules[MAX_RULES];
};
int pkt_classifier_rule_parser(const struct sc_main * sc, enum ruleset_type ruleset_type, enum rule_attribute rule_attr,
struct rule_list_parsed * out_rule_list);
void classifier_rule_list_dump(struct rule_list_parsed * rule_list);
|