Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Dynamic Modules Examples

> Envoy Version: [af61c6b2101e8c70281b661d2bd726115ae1da2d] v1.36-dev
> Envoy Version: [78fc79f72c883549cd6b29db11e02e6fb74c63d0] v1.36-dev
>
> Since dynamic modules are tied with a specific Envoy version, this repository is based on the specific commit of Envoy.
> For examples for a specific Envoy version, please check out `release/v<version>` branches:
Expand Down 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
6 changes: 3 additions & 3 deletions go/gosdk/abi.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
package gosdk

// Following is a distillation of the Envoy ABI for dynamic modules:
// https://github.com/envoyproxy/envoy/blob/af61c6b2101e8c70281b661d2bd726115ae1da2d/source/extensions/dynamic_modules/abi.h
// https://github.com/envoyproxy/envoy/blob/78fc79f72c883549cd6b29db11e02e6fb74c63d0/source/extensions/dynamic_modules/abi.h
//
// Why not using the header file directly? That is because Go runtime complains
// about passing pointers to C code on the boundary. In the following code, we replace
Expand Down 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}"),
}
}
Loading