Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ RUN CC="zig cc -target aarch64-linux-gnu" CXX="zig c++ -target aarch64-linux-gnu
RUN CC="zig cc -target x86_64-linux-gnu" CXX="zig c++ -target x86_64-linux-gnu" CGO_ENABLED=1 GOARCH=amd64 go build -buildmode=c-shared -o /build/amd64_libgo_module.so .

##### Build the final image #####
FROM envoyproxy/envoy-dev:af61c6b2101e8c70281b661d2bd726115ae1da2d AS envoy
FROM envoyproxy/envoy:dev-78fc79f72c883549cd6b29db11e02e6fb74c63d0 AS envoy
ARG TARGETARCH
ENV ENVOY_DYNAMIC_MODULES_SEARCH_PATH=/usr/local/lib
COPY --from=rust_builder /build/${TARGETARCH}_librust_module.so /usr/local/lib/librust_module.so
Expand Down
2 changes: 1 addition & 1 deletion ENVOY_VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
af61c6b2101e8c70281b661d2bd726115ae1da2d
78fc79f72c883549cd6b29db11e02e6fb74c63d0
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,6 @@ If you want to explicitly specify the docker image, use `ENVOY_IMAGE` environmen
ENVOY_IMAGE=foo-bar-image:latest go test . -v -count=1
```

[af61c6b2101e8c70281b661d2bd726115ae1da2d]: https://github.com/envoyproxy/envoy/tree/af61c6b2101e8c70281b661d2bd726115ae1da2d
[78fc79f72c883549cd6b29db11e02e6fb74c63d0]: https://github.com/envoyproxy/envoy/tree/78fc79f72c883549cd6b29db11e02e6fb74c63d0
[Envoy]: https://github.com/envoyproxy/envoy
[High Level Doc]: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/advanced/dynamic_modules
4 changes: 2 additions & 2 deletions go/gosdk/abi.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,8 @@ import (
"unsafe"
)

// https://github.com/envoyproxy/envoy/blob/af61c6b2101e8c70281b661d2bd726115ae1da2d/source/extensions/dynamic_modules/abi_version.h
var version = append([]byte("c32cc7696650a6a54653327e6609734a8b32aeb5c80a6a664687636a0d671666"), 0)
// https://github.com/envoyproxy/envoy/blob/78fc79f72c883549cd6b29db11e02e6fb74c63d0/source/extensions/dynamic_modules/abi_version.h
var version = append([]byte("f2712929b605772d35c34d9ac8ccd7e168197a50951e9c96b64e03256bf80265"), 0)

//export envoy_dynamic_module_on_program_init
func envoy_dynamic_module_on_program_init() uintptr {
Expand Down
2 changes: 1 addition & 1 deletion rust/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ repository = "https://github.com/envoyproxy/dynamic-modules-example"

[dependencies]
# The SDK version must match the Envoy version due to the strict compatibility requirements.
envoy-proxy-dynamic-modules-rust-sdk = { git = "https://github.com/envoyproxy/envoy", rev = "af61c6b2101e8c70281b661d2bd726115ae1da2d" }
envoy-proxy-dynamic-modules-rust-sdk = { git = "https://github.com/envoyproxy/envoy", rev = "78fc79f72c883549cd6b29db11e02e6fb74c63d0" }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
rand = "0.9.0"
Expand Down
4 changes: 2 additions & 2 deletions rust/src/http_access_logger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ impl FilterConfig {
}
}

impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF> for FilterConfig {
impl<EHF: EnvoyHttpFilter> HttpFilterConfig<EHF> for FilterConfig {
/// This is called for each new HTTP filter.
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EHF) -> Box<dyn HttpFilter<EHF>> {
let tx = self.tx.clone();
Box::new(Filter {
tx,
Expand Down
4 changes: 2 additions & 2 deletions rust/src/http_header_mutation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ impl FilterConfig {
}
}

impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF> for FilterConfig {
impl<EHF: EnvoyHttpFilter> HttpFilterConfig<EHF> for FilterConfig {
/// This is called for each new HTTP filter.
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EHF) -> Box<dyn HttpFilter<EHF>> {
Box::new(Filter {
request_headers: self.request_headers.clone(),
remove_request_headers: self.remove_request_headers.clone(),
Expand Down
4 changes: 2 additions & 2 deletions rust/src/http_passthrough.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ impl FilterConfig {
}
}

impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF> for FilterConfig {
impl<EHF: EnvoyHttpFilter> HttpFilterConfig<EHF> for FilterConfig {
/// This is called for each new HTTP filter.
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EHF) -> Box<dyn HttpFilter<EHF>> {
Box::new(Filter {})
}
}
Expand Down
4 changes: 2 additions & 2 deletions rust/src/http_random_auth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ impl FilterConfig {
}
}

impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF> for FilterConfig {
impl<EHF: EnvoyHttpFilter> HttpFilterConfig<EHF> for FilterConfig {
/// This is called for each new HTTP filter.
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EHF) -> Box<dyn HttpFilter<EHF>> {
Box::new(Filter {})
}
}
Expand Down
12 changes: 4 additions & 8 deletions rust/src/http_zero_copy_regex_waf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ impl FilterConfig {
}
}

impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF> for FilterConfig {
impl<EHF: EnvoyHttpFilter> HttpFilterConfig<EHF> for FilterConfig {
/// This is called for each new HTTP filter.
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EHF) -> Box<dyn HttpFilter<EHF>> {
Box::new(Filter {
re: self.re.clone(),
})
Expand Down Expand Up @@ -126,14 +126,10 @@ mod tests {
#[test]
/// This demonstrates how to write a test without Envoy using a mock provided by the SDK.
fn test_filter() {
struct EnvoyConfig {}
impl EnvoyHttpFilterConfig for EnvoyConfig {}
let mut envoy_config = EnvoyConfig {};
let mut filter_config = FilterConfig::new("Hello [Ww].+").unwrap();
let mut filter: Box<dyn HttpFilter<MockEnvoyHttpFilter>> =
filter_config.new_http_filter(&mut envoy_config);

let mut envoy_filter = MockEnvoyHttpFilter::new();
let mut filter: Box<dyn HttpFilter<MockEnvoyHttpFilter>> =
filter_config.new_http_filter(&mut envoy_filter);

// Not end of stream, so we should buffer the request body.
assert_eq!(filter.on_request_body(&mut envoy_filter, false), abi::envoy_dynamic_module_type_on_http_filter_request_body_status::StopIterationAndBuffer);
Expand Down
8 changes: 4 additions & 4 deletions rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ fn new_http_filter_config_fn<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter>(
_envoy_filter_config: &mut EC,
filter_name: &str,
filter_config: &[u8],
) -> Option<Box<dyn HttpFilterConfig<EC, EHF>>> {
) -> Option<Box<dyn HttpFilterConfig<EHF>>> {
let filter_config = std::str::from_utf8(filter_config).unwrap();
match filter_name {
"passthrough" => Some(Box::new(http_passthrough::FilterConfig::new(filter_config))),
"access_logger" => http_access_logger::FilterConfig::new(filter_config)
.map(|config| Box::new(config) as Box<dyn HttpFilterConfig<EC, EHF>>),
.map(|config| Box::new(config) as Box<dyn HttpFilterConfig<EHF>>),
"random_auth" => Some(Box::new(http_random_auth::FilterConfig::new(filter_config))),
"zero_copy_regex_waf" => http_zero_copy_regex_waf::FilterConfig::new(filter_config)
.map(|config| Box::new(config) as Box<dyn HttpFilterConfig<EC, EHF>>),
.map(|config| Box::new(config) as Box<dyn HttpFilterConfig<EHF>>),
"header_mutation" => http_header_mutation::FilterConfig::new(filter_config)
.map(|config| Box::new(config) as Box<dyn HttpFilterConfig<EC, EHF>>),
.map(|config| Box::new(config) as Box<dyn HttpFilterConfig<EHF>>),
_ => panic!("Unknown filter name: {filter_name}"),
}
}