7 #ifndef _RTE_REGEXDEV_H_
8 #define _RTE_REGEXDEV_H_
202 #include <rte_config.h>
208 #define RTE_REGEXDEV_NAME_MAX_LEN RTE_DEV_NAME_MAX_LEN
210 extern int rte_regexdev_logtype;
212 #define RTE_REGEXDEV_LOG(level, ...) \
213 rte_log(RTE_LOG_ ## level, rte_regexdev_logtype, "" __VA_ARGS__)
216 #define RTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, retval) do { \
217 if (!rte_regexdev_is_valid_dev(dev_id)) { \
218 RTE_REGEXDEV_LOG(ERR, "Invalid dev_id=%u\n", dev_id); \
223 #define RTE_REGEXDEV_VALID_DEV_ID_OR_RET(dev_id) do { \
224 if (!rte_regexdev_is_valid_dev(dev_id)) { \
225 RTE_REGEXDEV_LOG(ERR, "Invalid dev_id=%u\n", dev_id); \
278 #define RTE_REGEXDEV_CAPA_RUNTIME_COMPILATION_F (1ULL << 0)
287 #define RTE_REGEXDEV_CAPA_SUPP_PCRE_START_ANCHOR_F (1ULL << 1)
298 #define RTE_REGEXDEV_CAPA_SUPP_PCRE_ATOMIC_GROUPING_F (1ULL << 2)
310 #define RTE_REGEXDEV_SUPP_PCRE_BACKTRACKING_CTRL_F (1ULL << 3)
318 #define RTE_REGEXDEV_SUPP_PCRE_CALLOUTS_F (1ULL << 4)
328 #define RTE_REGEXDEV_SUPP_PCRE_BACKREFERENCE_F (1ULL << 5)
336 #define RTE_REGEXDEV_SUPP_PCRE_GREEDY_F (1ULL << 6)
345 #define RTE_REGEXDEV_SUPP_PCRE_MATCH_ALL_F (1ULL << 7)
354 #define RTE_REGEXDEV_SUPP_PCRE_LOOKAROUND_ASRT_F (1ULL << 8)
364 #define RTE_REGEXDEV_SUPP_PCRE_MATCH_POINT_RST_F (1ULL << 9)
373 #define RTE_REGEXDEV_SUPP_NEWLINE_CONVENTIONS_F (1ULL << 10)
385 #define RTE_REGEXDEV_SUPP_PCRE_NEWLINE_SEQ_F (1ULL << 11)
393 #define RTE_REGEXDEV_SUPP_PCRE_POSSESSIVE_QUALIFIERS_F (1ULL << 12)
403 #define RTE_REGEXDEV_SUPP_PCRE_SUBROUTINE_REFERENCES_F (1ULL << 13)
412 #define RTE_REGEXDEV_SUPP_PCRE_UTF_8_F (1ULL << 14)
418 #define RTE_REGEXDEV_SUPP_PCRE_UTF_16_F (1ULL << 15)
424 #define RTE_REGEXDEV_SUPP_PCRE_UTF_32_F (1ULL << 16)
430 #define RTE_REGEXDEV_SUPP_PCRE_WORD_BOUNDARY_F (1ULL << 17)
437 #define RTE_REGEXDEV_SUPP_PCRE_FORWARD_REFERENCES_F (1ULL << 18)
446 #define RTE_REGEXDEV_SUPP_MATCH_AS_END_F (1ULL << 19)
456 #define RTE_REGEXDEV_SUPP_CROSS_BUFFER_F (1ULL << 20)
472 #define RTE_REGEXDEV_SUPP_MATCH_ALL_F (1ULL << 21)
481 #define RTE_REGEXDEV_CAPA_QUEUE_PAIR_OOS_F (1ULL << 22)
491 #define RTE_REGEX_PCRE_RULE_ALLOW_EMPTY_F (1ULL << 0)
499 #define RTE_REGEX_PCRE_RULE_ANCHORED_F (1ULL << 1)
508 #define RTE_REGEX_PCRE_RULE_CASELESS_F (1ULL << 2)
516 #define RTE_REGEX_PCRE_RULE_DOTALL_F (1ULL << 3)
524 #define RTE_REGEX_PCRE_RULE_DUPNAMES_F (1ULL << 4)
532 #define RTE_REGEX_PCRE_RULE_EXTENDED_F (1ULL << 5)
540 #define RTE_REGEX_PCRE_RULE_MATCH_UNSET_BACKREF_F (1ULL << 6)
548 #define RTE_REGEX_PCRE_RULE_MULTILINE_F (1ULL << 7)
557 #define RTE_REGEX_PCRE_RULE_NO_AUTO_CAPTURE_F (1ULL << 8)
567 #define RTE_REGEX_PCRE_RULE_UCP_F (1ULL << 9)
575 #define RTE_REGEX_PCRE_RULE_UNGREEDY_F (1ULL << 10)
584 #define RTE_REGEX_PCRE_RULE_UTF_F (1ULL << 11)
593 #define RTE_REGEX_PCRE_RULE_NEVER_BACKSLASH_C_F (1ULL << 12)
652 #define RTE_REGEXDEV_CFG_CROSS_BUFFER_SCAN_F (1ULL << 0)
665 #define RTE_REGEXDEV_CFG_MATCH_AS_END_F (1ULL << 1)
675 #define RTE_REGEXDEV_CFG_MATCH_ALL_F (1ULL << 2)
751 #define RTE_REGEX_QUEUE_PAIR_CFG_OOS_F (1ULL << 0)
945 const void *attr_value);
1061 uint32_t rule_db_len);
1089 #define RTE_REGEXDEV_XSTATS_NAME_SIZE 64
1153 uint64_t *values, uint16_t nb_values);
1180 uint16_t *
id, uint64_t *value);
1278 #define RTE_REGEX_OPS_REQ_GROUP_ID0_VALID_F (1 << 0)
1281 #define RTE_REGEX_OPS_REQ_GROUP_ID1_VALID_F (1 << 1)
1284 #define RTE_REGEX_OPS_REQ_GROUP_ID2_VALID_F (1 << 2)
1287 #define RTE_REGEX_OPS_REQ_GROUP_ID3_VALID_F (1 << 3)
1290 #define RTE_REGEX_OPS_REQ_STOP_ON_MATCH_F (1 << 4)
1293 #define RTE_REGEX_OPS_REQ_MATCH_HIGH_PRIORITY_F (1 << 5)
1305 #define RTE_REGEX_OPS_RSP_PMI_SOJ_F (1 << 0)
1312 #define RTE_REGEX_OPS_RSP_PMI_EOJ_F (1 << 1)
1319 #define RTE_REGEX_OPS_RSP_MAX_SCAN_TIMEOUT_F (1 << 2)
1326 #define RTE_REGEX_OPS_RSP_MAX_MATCH_F (1 << 3)
1333 #define RTE_REGEX_OPS_RSP_MAX_PREFIX_F (1 << 4)
1340 #define RTE_REGEX_OPS_RSP_RESOURCE_LIMIT_REACHED_F (1 << 4)
1472 static inline uint16_t
1476 struct rte_regexdev *dev = &rte_regex_devices[dev_id];
1477 #ifdef RTE_LIBRTE_REGEXDEV_DEBUG
1478 RTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);
1479 RTE_FUNC_PTR_OR_ERR_RET(*dev->enqueue, -ENOTSUP);
1480 if (qp_id >= dev->data->dev_conf.nb_queue_pairs) {
1481 RTE_REGEXDEV_LOG(ERR,
"Invalid queue %d\n", qp_id);
1485 return (*dev->enqueue)(dev, qp_id, ops, nb_ops);
1531 static inline uint16_t
1535 struct rte_regexdev *dev = &rte_regex_devices[dev_id];
1536 #ifdef RTE_LIBRTE_REGEXDEV_DEBUG
1537 RTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);
1538 RTE_FUNC_PTR_OR_ERR_RET(*dev->dequeue, -ENOTSUP);
1539 if (qp_id >= dev->data->dev_conf.nb_queue_pairs) {
1540 RTE_REGEXDEV_LOG(ERR,
"Invalid queue %d\n", qp_id);
1544 return (*dev->dequeue)(dev, qp_id, ops, nb_ops);
__rte_experimental int rte_regexdev_rule_db_compile_activate(uint8_t dev_id)
__rte_experimental int rte_regexdev_close(uint8_t dev_id)
__rte_experimental uint8_t rte_regexdev_count(void)
__rte_experimental int rte_regexdev_get_dev_id(const char *name)
__rte_experimental int rte_regexdev_info_get(uint8_t dev_id, struct rte_regexdev_info *dev_info)
__rte_experimental int rte_regexdev_dump(uint8_t dev_id, FILE *f)
__rte_experimental int rte_regexdev_stop(uint8_t dev_id)
__rte_experimental int rte_regexdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id, const struct rte_regexdev_qp_conf *qp_conf)
static __rte_experimental uint16_t rte_regexdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id, struct rte_regex_ops **ops, uint16_t nb_ops)
@ RTE_REGEXDEV_ATTR_MAX_PREFIX
@ RTE_REGEXDEV_ATTR_SOCKET_ID
@ RTE_REGEXDEV_ATTR_MAX_SCAN_TIMEOUT
@ RTE_REGEXDEV_ATTR_MAX_MATCHES
__rte_experimental int rte_regexdev_selftest(uint8_t dev_id)
__rte_experimental int rte_regexdev_xstats_reset(uint8_t dev_id, const uint16_t *ids, uint16_t nb_ids)
__rte_experimental int rte_regexdev_xstats_names_get(uint8_t dev_id, struct rte_regexdev_xstats_map *xstats_map)
__rte_experimental int rte_regexdev_xstats_get(uint8_t dev_id, const uint16_t *ids, uint64_t *values, uint16_t nb_values)
__rte_experimental int rte_regexdev_xstats_by_name_get(uint8_t dev_id, const char *name, uint16_t *id, uint64_t *value)
__rte_experimental int rte_regexdev_rule_db_export(uint8_t dev_id, char *rule_db)
__rte_experimental int rte_regexdev_is_valid_dev(uint16_t dev_id)
__rte_experimental int rte_regexdev_rule_db_import(uint8_t dev_id, const char *rule_db, uint32_t rule_db_len)
void(* regexdev_stop_flush_t)(uint8_t dev_id, uint16_t qp_id, struct rte_regex_ops *op)
__rte_experimental int rte_regexdev_attr_get(uint8_t dev_id, enum rte_regexdev_attr_id attr_id, void *attr_value)
__rte_experimental int rte_regexdev_rule_db_update(uint8_t dev_id, const struct rte_regexdev_rule *rules, uint32_t nb_rules)
@ RTE_REGEX_RULE_OP_REMOVE
static __rte_experimental uint16_t rte_regexdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id, struct rte_regex_ops **ops, uint16_t nb_ops)
__rte_experimental int rte_regexdev_configure(uint8_t dev_id, const struct rte_regexdev_config *cfg)
__rte_experimental int rte_regexdev_attr_set(uint8_t dev_id, enum rte_regexdev_attr_id attr_id, const void *attr_value)
__rte_experimental int rte_regexdev_start(uint8_t dev_id)
#define RTE_REGEXDEV_XSTATS_NAME_SIZE
uint16_t nb_actual_matches
struct rte_regexdev_match matches[]
uint32_t nb_rules_per_group
uint32_t max_rules_per_group
uint16_t max_payload_size
enum rte_regexdev_rule_op op
char name[RTE_REGEXDEV_XSTATS_NAME_SIZE]