From b47bde6cda3f81b540bdc67388e8fa1fd74883a9 Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Tue, 30 Jun 2026 16:43:03 +0200 Subject: [PATCH] dnp3/doc: list possible values for enum keywords Ticket: 8675 --- doc/userguide/rules/dnp3-keywords.rst | 2 ++ rust/src/dnp3/detect.rs | 9 +++++++++ src/detect-dnp3.c | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/doc/userguide/rules/dnp3-keywords.rst b/doc/userguide/rules/dnp3-keywords.rst index b16263c4cb..64b14cd3d2 100644 --- a/doc/userguide/rules/dnp3-keywords.rst +++ b/doc/userguide/rules/dnp3-keywords.rst @@ -64,6 +64,8 @@ Where value is one of: * unsolicited_response * authenticate_resp +See ``suricata --list-keywords=json | jq .dnp3_func.enum_values`` + dnp3_ind -------- diff --git a/rust/src/dnp3/detect.rs b/rust/src/dnp3/detect.rs index 00331b9ea4..21c6acf829 100644 --- a/rust/src/dnp3/detect.rs +++ b/rust/src/dnp3/detect.rs @@ -18,6 +18,9 @@ use crate::detect::uint::{ detect_parse_uint_bitflags, detect_parse_uint_enum, DetectBitflagModifier, DetectUintData, }; +use crate::detect::EnumString; +use crate::jsonbuilder::JsonBuilder; +use suricata_sys::sys::SCJsonBuilder; use std::ffi::CStr; @@ -103,6 +106,12 @@ pub unsafe extern "C" fn SCDnp3DetectIndParse( return std::ptr::null_mut(); } +#[no_mangle] +pub unsafe extern "C" fn SCDnp3DetectFuncListValues(jsb: *mut SCJsonBuilder) { + let jsb = cast_pointer!(jsb, JsonBuilder); + let _ = Dnp3Func::list_values(jsb); +} + #[no_mangle] pub unsafe extern "C" fn SCDnp3DetectFuncParse( ustr: *const std::os::raw::c_char, diff --git a/src/detect-dnp3.c b/src/detect-dnp3.c index 812d10a8de..163a996df6 100644 --- a/src/detect-dnp3.c +++ b/src/detect-dnp3.c @@ -268,6 +268,11 @@ static int DetectDNP3IndMatch(DetectEngineThreadCtx *det_ctx, return DetectU16Match((uint16_t)((tx->iin.iin1 << 8) | tx->iin.iin2), detect); } +static void DetectDNP3FuncListValues(SCJsonBuilder *jsb) +{ + SCDnp3DetectFuncListValues(jsb); +} + static void DetectDNP3FuncRegister(void) { SCEnter(); @@ -282,6 +287,7 @@ static void DetectDNP3FuncRegister(void) sigmatch_table[DETECT_DNP3FUNC].Setup = DetectDNP3FuncSetup; sigmatch_table[DETECT_DNP3FUNC].Free = DetectDNP3FuncFree; sigmatch_table[DETECT_DNP3FUNC].flags = SIGMATCH_INFO_UINT8 | SIGMATCH_INFO_ENUM_UINT; + sigmatch_table[DETECT_DNP3FUNC].JsonAdditionalInfo = DetectDNP3FuncListValues; #ifdef UNITTESTS sigmatch_table[DETECT_DNP3FUNC].RegisterTests = DetectDNP3FuncRegisterTests; #endif