contrib: add Hyperscan matcher (#19473)
Signed-off-by: Xie Zhihao <zhihao.xie@intel.com> Mirrored from https://github.com/envoyproxy/envoy @ 2572ce6de1a582547a30b59b40f0c614c713f03apull/626/head
parent
cb7ca91dbf
commit
03bb74eb26
4 changed files with 94 additions and 0 deletions
@ -0,0 +1,9 @@ |
||||
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py. |
||||
|
||||
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_package( |
||||
deps = ["@com_github_cncf_udpa//udpa/annotations:pkg"], |
||||
) |
@ -0,0 +1,83 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.matching.input_matchers.hyperscan.v3alpha; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.matching.input_matchers.hyperscan.v3alpha"; |
||||
option java_outer_classname = "HyperscanProto"; |
||||
option java_multiple_files = true; |
||||
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/matching/input_matchers/hyperscan/v3alpha"; |
||||
option (udpa.annotations.file_status).package_version_status = ACTIVE; |
||||
|
||||
// [#protodoc-title: Hyperscan matcher] |
||||
// [#extension: envoy.matching.input_matchers.hyperscan] |
||||
|
||||
// `Hyperscan <https://github.com/intel/hyperscan>`_ regex matcher. The engine of the matcher uses |
||||
// hybrid automata techniques to allow simultaneous matching of large numbers of regular |
||||
// expressions across streams of data. |
||||
// |
||||
// The matcher follows PCRE pattern syntax, and the regex string must adhere to the documented |
||||
// `pattern support <https://intel.github.io/hyperscan/dev-reference/compilation.html#pattern-support>`_. |
||||
// The syntax is not compatible with the default RE2 regex matcher. Depending on configured expressions, |
||||
// swapping regex matcher may cause match rules to no longer be valid. |
||||
message Hyperscan { |
||||
// [#next-free-field: 11] |
||||
message Regex { |
||||
// The regex expression. |
||||
// |
||||
// The expression must represent only the pattern to be matched, with no delimiters or flags. |
||||
string regex = 1 [(validate.rules).string = {min_len: 1}]; |
||||
|
||||
// The ID of the regex expression. |
||||
// |
||||
// This option is designed to be used on the sub-expressions in logical combinations. |
||||
uint32 id = 2; |
||||
|
||||
// Matching will be performed case-insensitively. |
||||
// |
||||
// The expression may still use PCRE tokens (notably `(?i)` and `(?-i)`) to switch |
||||
// case-insensitive matching on and off. |
||||
bool caseless = 3; |
||||
|
||||
// Matching a `.` will not exclude newlines. |
||||
bool dot_all = 4; |
||||
|
||||
// `^` and `$` anchors match any newlines in data. |
||||
bool multiline = 5; |
||||
|
||||
// Allow expressions which can match against an empty string. |
||||
// |
||||
// This option instructs the compiler to allow expressions that can match against empty buffers, |
||||
// such as `.?`, `.*`, `(a|)`. Since Hyperscan can return every possible match for an expression, |
||||
// such expressions generally execute very slowly. |
||||
bool allow_empty = 6; |
||||
|
||||
// Treat the pattern as a sequence of UTF-8 characters. |
||||
bool utf8 = 7; |
||||
|
||||
// Use Unicode properties for character classes. |
||||
// |
||||
// This option instructs Hyperscan to use Unicode properties, rather than the default ASCII |
||||
// interpretations, for character mnemonics like `\w` and `\s` as well as the POSIX character |
||||
// classes. It is only meaningful in conjunction with `utf8`. |
||||
bool ucp = 8; |
||||
|
||||
// Logical combination. |
||||
// |
||||
// This option instructs Hyperscan to parse this expression as logical combination syntax. |
||||
// Logical constraints consist of operands, operators and parentheses. The operands are |
||||
// expression indices, and operators can be `!`, `&` or `|`. |
||||
bool combination = 9; |
||||
|
||||
// Don’t do any match reporting. |
||||
// |
||||
// This option instructs Hyperscan to ignore match reporting for this expression. It is |
||||
// designed to be used on the sub-expressions in logical combinations. |
||||
bool quiet = 10; |
||||
} |
||||
|
||||
// Specifies a set of regex expressions that the input should match on. |
||||
repeated Regex regexes = 1 [(validate.rules).repeated = {min_items: 1}]; |
||||
} |
Loading…
Reference in new issue