DPDK  19.08.0-rc0
rte_regexdev.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2019 Marvell International Ltd.
3  */
4 
5 #ifndef _RTE_REGEXDEV_H_
6 #define _RTE_REGEXDEV_H_
7 
193 #ifdef __cplusplus
194 extern "C" {
195 #endif
196 
197 #include <rte_common.h>
198 #include <rte_config.h>
199 #include <rte_dev.h>
200 #include <rte_errno.h>
201 #include <rte_memory.h>
202 
210 uint8_t
211 rte_regex_dev_count(void);
212 
223 int
224 rte_regex_dev_get_dev_id(const char *name);
225 
226 /* Enumerates RegEx device capabilities */
227 #define RTE_REGEX_DEV_CAPA_RUNTIME_COMPILATION_F (1ULL << 0)
228 
236 /* Enumerates unsupported PCRE features for the RegEx device */
237 #define RTE_REGEX_DEV_PCRE_UNSUP_START_ANCHOR_F (1ULL << 0)
238 
247 #define RTE_REGEX_DEV_PCRE_UNSUP_ATOMIC_GROUPING_F (1ULL << 1)
248 
258 #define RTE_REGEX_DEV_PCRE_UNSUP_BACKTRACKING_CTRL_F (1ULL << 2)
259 
265 #define RTE_REGEX_DEV_PCRE_UNSUP_CALLOUTS_F (1ULL << 3)
266 
274 #define RTE_REGEX_DEV_PCRE_UNSUP_BACKREFERENCE_F (1ULL << 4)
275 
281 #define RTE_REGEX_DEV_PCRE_UNSUP_GREEDY_F (1ULL << 5)
282 
289 #define RTE_REGEX_DEV_PCRE_UNSUP_LOOKAROUND_ASRT_F (1ULL << 6)
290 
298 #define RTE_REGEX_DEV_PCRE_UNSUP_MATCH_POINT_RST_F (1ULL << 7)
299 
306 #define RTE_REGEX_DEV_PCRE_UNSUP_NEWLINE_CONVENTIONS_F (1ULL << 8)
307 
317 #define RTE_REGEX_DEV_PCRE_UNSUP_NEWLINE_SEQ_F (1ULL << 9)
318 
324 #define RTE_REGEX_DEV_PCRE_UNSUP_POSSESSIVE_QUALIFIERS_F (1ULL << 10)
325 
333 #define RTE_REGEX_DEV_PCRE_UNSUP_SUBROUTINE_REFERENCES_F (1ULL << 11)
334 
341 #define RTE_REGEX_DEV_PCRE_UNSUP_UTF_8_F (1ULL << 12)
342 
346 #define RTE_REGEX_DEV_PCRE_UNSUP_UTF_16_F (1ULL << 13)
347 
351 #define RTE_REGEX_DEV_PCRE_UNSUP_UTF_32_F (1ULL << 14)
352 
356 #define RTE_REGEX_DEV_PCRE_UNSUP_WORD_BOUNDARY_F (1ULL << 15)
357 
362 #define RTE_REGEX_DEV_PCRE_UNSUP_FORWARD_REFERENCES_F (1ULL << 16)
363 
370 /* Enumerates PCRE rule flags */
371 #define RTE_REGEX_PCRE_RULE_ALLOW_EMPTY_F (1ULL << 0)
372 
377 #define RTE_REGEX_PCRE_RULE_ANCHORED_F (1ULL << 1)
378 
384 #define RTE_REGEX_PCRE_RULE_CASELESS_F (1ULL << 2)
385 
390 #define RTE_REGEX_PCRE_RULE_DOTALL_F (1ULL << 3)
391 
396 #define RTE_REGEX_PCRE_RULE_DUPNAMES_F (1ULL << 4)
397 
402 #define RTE_REGEX_PCRE_RULE_EXTENDED_F (1ULL << 5)
403 
408 #define RTE_REGEX_PCRE_RULE_MATCH_UNSET_BACKREF_F (1ULL << 6)
409 
415 #define RTE_REGEX_PCRE_RULE_MULTILINE_F (1ULL << 7)
416 
422 #define RTE_REGEX_PCRE_RULE_NO_AUTO_CAPTURE_F (1ULL << 8)
423 
430 #define RTE_REGEX_PCRE_RULE_UCP_F (1ULL << 9)
431 
436 #define RTE_REGEX_PCRE_RULE_UNGREEDY_F (1ULL << 10)
437 
443 #define RTE_REGEX_PCRE_RULE_UTF_F (1ULL << 11)
444 
450 #define RTE_REGEX_PCRE_RULE_NEVER_BACKSLASH_C_F (1ULL << 12)
451 
463  const char *driver_name;
464  struct rte_device *dev;
465  uint8_t max_matches;
467  uint16_t max_queue_pairs;
475  uint16_t max_groups;
477  uint32_t regex_dev_capa;
479  uint64_t rule_flags;
487 };
488 
504 int
505 rte_regex_dev_info_get(uint8_t dev_id, struct rte_regex_dev_info *dev_info);
506 
507 /* Enumerates RegEx device configuration flags */
508 #define RTE_REGEX_DEV_CFG_CROSS_BUFFER_SCAN_F (1ULL << 0)
509 
523  uint8_t nb_max_matches;
530  uint16_t nb_queue_pairs;
544  uint16_t nb_groups;
550  const char *rule_db;
559  uint32_t rule_db_len;
561  uint32_t dev_cfg_flags;
563 };
564 
584 int
585 rte_regex_dev_configure(uint8_t dev_id, const struct rte_regex_dev_config *cfg);
586 
587 /* Enumerates RegEx queue pair configuration flags */
588 #define RTE_REGEX_QUEUE_PAIR_CFG_OOS_F (1ULL << 0)
589 
597 struct rte_regex_ops;
598 typedef void (*regexdev_stop_flush_t)(uint8_t dev_id, uint16_t qp_id,
599  struct rte_regex_ops *op);
606  uint32_t qp_conf_flags;
608  uint16_t nb_desc;
618 };
619 
636 int
637 rte_regex_queue_pair_setup(uint8_t dev_id, uint8_t queue_pair_id,
638  const struct rte_regex_qp_conf *qp_conf);
639 
655 int
656 rte_regex_dev_start(uint8_t dev_id);
657 
673 void
674 rte_regex_dev_stop(uint8_t dev_id);
675 
686 int
687 rte_regex_dev_close(uint8_t dev_id);
688 
689 /* Device get/set attributes */
690 
721 };
722 
736 int
737 rte_regex_dev_attr_get(uint8_t dev_id, enum rte_regex_dev_attr_id attr_id,
738  void *attr_value);
739 
753 int
754 rte_regex_dev_attr_set(uint8_t dev_id, enum rte_regex_dev_attr_id attr_id,
755  const void *attr_value);
756 
757 /* Rule related APIs */
764 };
765 
770  uint16_t group_id;
772  uint32_t rule_id;
774  const char *pcre_rule;
776  uint16_t pcre_rule_len;
778  uint64_t rule_flags;
779  /* PCRE rule flags. Supported device specific PCRE rules enumerated
780  * in struct rte_regex_dev_info::rule_flags. For successful rule
781  * database update, application needs to provide only supported
782  * rule flags.
783  * @See RTE_REGEX_PCRE_RULE_*, struct rte_regex_dev_info::rule_flags
784  */
785 };
786 
812 uint16_t
813 rte_regex_rule_db_update(uint8_t dev_id, const struct rte_regex_rule *rules,
814  uint16_t nb_rules);
815 
833 int
834 rte_regex_rule_db_import(uint8_t dev_id, const char *rule_db,
835  uint32_t rule_db_len);
836 
853 int
854 rte_regex_rule_db_export(uint8_t dev_id, char *rule_db);
855 
856 /* Extended statistics */
858 #define RTE_REGEX_DEV_XSTATS_NAME_SIZE 64
859 
867  uint16_t id;
871 };
872 
889 int
890 rte_regex_dev_xstats_names_get(uint8_t dev_id,
891  struct rte_regex_dev_xstats_map *xstats_map);
892 
912 int
913 rte_regex_dev_xstats_get(uint8_t dev_id, const uint16_t ids[],
914  uint64_t values[], uint16_t n);
915 
935 int
936 rte_regex_dev_xstats_by_name_get(uint8_t dev_id, const char *name,
937  uint16_t *id, uint64_t *value);
938 
954 int
955 rte_regex_dev_xstats_reset(uint8_t dev_id, const uint16_t ids[],
956  uint16_t nb_ids);
957 
968 int rte_regex_dev_selftest(uint8_t dev_id);
969 
983 int
984 rte_regex_dev_dump(uint8_t dev_id, FILE *f);
985 
986 /* Fast path APIs */
987 
994  union {
995  uint64_t u64;
996  struct {
997  uint32_t rule_id:20;
1001  uint32_t group_id:12;
1005  uint16_t offset;
1007  uint16_t len;
1009  };
1010  };
1011 };
1012 
1013 /* Enumerates RegEx request flags. */
1014 #define RTE_REGEX_OPS_REQ_GROUP_ID1_VALID_F (1 << 0)
1015 
1017 #define RTE_REGEX_OPS_REQ_GROUP_ID2_VALID_F (1 << 1)
1018 
1020 #define RTE_REGEX_OPS_REQ_GROUP_ID3_VALID_F (1 << 2)
1021 
1023 #define RTE_REGEX_OPS_REQ_STOP_ON_MATCH_F (1 << 4)
1024 
1026 #define RTE_REGEX_OPS_REQ_MATCH_HIGH_PRIORITY_F (1 << 5)
1027 
1037 /* Enumerates RegEx response flags. */
1038 #define RTE_REGEX_OPS_RSP_PMI_SOJ_F (1 << 0)
1039 
1045 #define RTE_REGEX_OPS_RSP_PMI_EOJ_F (1 << 1)
1046 
1052 #define RTE_REGEX_OPS_RSP_MAX_SCAN_TIMEOUT_F (1 << 2)
1053 
1059 #define RTE_REGEX_OPS_RSP_MAX_MATCH_F (1 << 3)
1060 
1066 #define RTE_REGEX_OPS_RSP_MAX_PREFIX_F (1 << 4)
1067 
1078  /* W0 */
1079  uint16_t req_flags;
1083  uint16_t scan_size;
1085  uint16_t rsp_flags;
1091  uint8_t nb_matches;
1099  /* W1 */
1100  RTE_STD_C11
1101  union {
1102  uint64_t u64;
1104  void *buf_addr;
1106  };
1107 
1108  /* W2 */
1112  /* W3 */
1113  uint16_t group_id0;
1122  uint16_t group_id1;
1127  uint16_t group_id2;
1132  uint16_t group_id3;
1138  /* W4 */
1139  RTE_STD_C11
1140  union {
1141  uint64_t user_id;
1147  void *user_ptr;
1149  };
1150 
1151  /* W5 */
1159 };
1160 
1195 uint16_t
1196 rte_regex_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
1197  struct rte_regex_ops **ops, uint16_t nb_ops);
1198 
1239 uint16_t
1240 rte_regex_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
1241  struct rte_regex_ops **ops, uint16_t nb_ops);
1242 
1243 #ifdef __cplusplus
1244 }
1245 #endif
1246 
1247 #endif /* _RTE_REGEXDEV_H_ */
uint32_t rule_id
Definition: rte_regexdev.h:772
int rte_regex_dev_dump(uint8_t dev_id, FILE *f)
uint16_t group_id0
int rte_regex_dev_configure(uint8_t dev_id, const struct rte_regex_dev_config *cfg)
rte_regex_rule_op
Definition: rte_regexdev.h:759
int rte_regex_dev_selftest(uint8_t dev_id)
uint32_t rule_id
Definition: rte_regexdev.h:997
uint32_t regex_dev_capa
Definition: rte_regexdev.h:477
const char * rule_db
Definition: rte_regexdev.h:550
uint16_t pcre_rule_len
Definition: rte_regexdev.h:776
uint16_t max_queue_pairs
Definition: rte_regexdev.h:467
uint8_t rte_regex_dev_count(void)
uint16_t max_rules_per_group
Definition: rte_regexdev.h:473
uint32_t qp_conf_flags
Definition: rte_regexdev.h:606
regexdev_stop_flush_t cb
Definition: rte_regexdev.h:610
int rte_regex_dev_xstats_reset(uint8_t dev_id, const uint16_t ids[], uint16_t nb_ids)
int rte_regex_dev_attr_set(uint8_t dev_id, enum rte_regex_dev_attr_id attr_id, const void *attr_value)
uint16_t group_id2
struct rte_regex_match matches[]
uint8_t nb_actual_matches
int rte_regex_dev_info_get(uint8_t dev_id, struct rte_regex_dev_info *dev_info)
void(* regexdev_stop_flush_t)(uint8_t dev_id, uint16_t qp_id, struct rte_regex_ops *op)
Definition: rte_regexdev.h:598
uint16_t group_id1
uint16_t group_id
Definition: rte_regexdev.h:770
int rte_regex_dev_get_dev_id(const char *name)
uint16_t rte_regex_enqueue_burst(uint8_t dev_id, uint16_t qp_id, struct rte_regex_ops **ops, uint16_t nb_ops)
uint16_t req_flags
uint16_t group_id3
int rte_regex_dev_xstats_get(uint8_t dev_id, const uint16_t ids[], uint64_t values[], uint16_t n)
int rte_regex_rule_db_export(uint8_t dev_id, char *rule_db)
int rte_regex_queue_pair_setup(uint8_t dev_id, uint8_t queue_pair_id, const struct rte_regex_qp_conf *qp_conf)
uint16_t rte_regex_dequeue_burst(uint8_t dev_id, uint16_t qp_id, struct rte_regex_ops **ops, uint16_t nb_ops)
uint8_t nb_matches
struct rte_device * dev
Definition: rte_regexdev.h:464
uint16_t scan_size
uint16_t rsp_flags
rte_regex_dev_attr_id
Definition: rte_regexdev.h:692
#define RTE_STD_C11
Definition: rte_common.h:40
int rte_regex_dev_xstats_names_get(uint8_t dev_id, struct rte_regex_dev_xstats_map *xstats_map)
enum rte_regex_rule_op op
Definition: rte_regexdev.h:768
int rte_regex_dev_close(uint8_t dev_id)
int rte_regex_dev_start(uint8_t dev_id)
uint64_t rte_iova_t
Definition: rte_memory.h:82
int rte_regex_dev_xstats_by_name_get(uint8_t dev_id, const char *name, uint16_t *id, uint64_t *value)
int rte_regex_rule_db_import(uint8_t dev_id, const char *rule_db, uint32_t rule_db_len)
int rte_regex_dev_attr_get(uint8_t dev_id, enum rte_regex_dev_attr_id attr_id, void *attr_value)
void rte_regex_dev_stop(uint8_t dev_id)
uint64_t user_id
uint16_t rte_regex_rule_db_update(uint8_t dev_id, const struct rte_regex_rule *rules, uint16_t nb_rules)
uint16_t max_payload_size
Definition: rte_regexdev.h:469
uint16_t nb_rules_per_group
Definition: rte_regexdev.h:536
#define RTE_REGEX_DEV_XSTATS_NAME_SIZE
Definition: rte_regexdev.h:858
const char * pcre_rule
Definition: rte_regexdev.h:774
char name[RTE_REGEX_DEV_XSTATS_NAME_SIZE]
Definition: rte_regexdev.h:869
rte_iova_t buf_iova
uint64_t pcre_unsup_flags
Definition: rte_regexdev.h:483
const char * driver_name
Definition: rte_regexdev.h:463