summaryrefslogtreecommitdiff
path: root/service/include/sc_classifier_rule_parser.h
blob: c072559d3a4b772084d8fb62213ffb92020c868a (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
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);