#pragma once #include #include #include #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);