From: Jason Ish Date: Thu, 23 Jan 2025 22:40:22 +0000 (-0600) Subject: rust: use AppProto from generated bindings instead of duplicating X-Git-Tag: suricata-8.0.0-beta1~425 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4554c4778d67e7529769be4c8f4f1cf6647b77a9;p=thirdparty%2Fsuricata.git rust: use AppProto from generated bindings instead of duplicating Have bindgen generate bindings for app-layer-protos.h, then use the generated definitions of AppProto/AppProtoEnum instead if defining them ourselves. This header was chosen as its used by Rust, and its a simple header with no circular dependencies. Ticket: #7341 --- diff --git a/rust/src/applayer.rs b/rust/src/applayer.rs index 12bc3d42bf..4367825727 100644 --- a/rust/src/applayer.rs +++ b/rust/src/applayer.rs @@ -18,7 +18,7 @@ //! Parser registration functions and common interface module. use std; -use crate::core::{self,DetectEngineState,AppLayerEventType,AppProto}; +use crate::core::{self,DetectEngineState,AppLayerEventType}; use crate::direction::Direction; use crate::filecontainer::FileContainer; use crate::flow::Flow; @@ -29,6 +29,7 @@ use crate::core::StreamingBufferConfig; // Make the AppLayerEvent derive macro available to users importing // AppLayerEvent from this module. pub use suricata_derive::AppLayerEvent; +use suricata_sys::sys::AppProto; #[repr(C)] pub struct StreamSlice { diff --git a/rust/src/applayertemplate/template.rs b/rust/src/applayertemplate/template.rs index 9f706a74bb..88f66af34b 100644 --- a/rust/src/applayertemplate/template.rs +++ b/rust/src/applayertemplate/template.rs @@ -18,9 +18,10 @@ use super::parser; use crate::applayer::{self, *}; use crate::conf::conf_get; -use crate::core::{AppProto, ALPROTO_UNKNOWN, IPPROTO_TCP}; +use crate::core::{ALPROTO_UNKNOWN, IPPROTO_TCP}; use crate::flow::Flow; use nom7 as nom; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use std::ffi::CString; diff --git a/rust/src/bittorrent_dht/bittorrent_dht.rs b/rust/src/bittorrent_dht/bittorrent_dht.rs index 812625b3de..3f447635db 100644 --- a/rust/src/bittorrent_dht/bittorrent_dht.rs +++ b/rust/src/bittorrent_dht/bittorrent_dht.rs @@ -15,11 +15,13 @@ * 02110-1301, USA. */ +use suricata_sys::sys::AppProto; + use crate::applayer::{self, *}; use crate::bittorrent_dht::parser::{ parse_bittorrent_dht_packet, BitTorrentDHTError, BitTorrentDHTRequest, BitTorrentDHTResponse, }; -use crate::core::{AppProto, ALPROTO_UNKNOWN, IPPROTO_UDP}; +use crate::core::{ALPROTO_UNKNOWN, IPPROTO_UDP}; use crate::direction::Direction; use crate::flow::Flow; use std::ffi::CString; diff --git a/rust/src/core.rs b/rust/src/core.rs index a1b74ceaf5..bef967b0e1 100644 --- a/rust/src/core.rs +++ b/rust/src/core.rs @@ -18,6 +18,8 @@ //! This module exposes items from the core "C" code to Rust. use std; +use suricata_sys::sys::{AppProto, AppProtoEnum}; + use crate::filecontainer::*; use crate::flow::Flow; @@ -41,11 +43,8 @@ pub const STREAM_GAP: u8 = 0x10; pub const STREAM_DEPTH: u8 = 0x20; pub const STREAM_MIDSTREAM:u8 = 0x40; -// Application layer protocol identifiers (app-layer-protos.h) -pub type AppProto = u16; - -pub const ALPROTO_UNKNOWN : AppProto = 0; -pub const ALPROTO_FAILED : AppProto = 1; +pub const ALPROTO_UNKNOWN : AppProto = AppProtoEnum::ALPROTO_UNKNOWN as AppProto; +pub const ALPROTO_FAILED : AppProto = AppProtoEnum::ALPROTO_FAILED as AppProto; pub const IPPROTO_TCP : u8 = 6; pub const IPPROTO_UDP : u8 = 17; diff --git a/rust/src/dcerpc/dcerpc.rs b/rust/src/dcerpc/dcerpc.rs index 57a57e6e1f..0e5d08dcb1 100644 --- a/rust/src/dcerpc/dcerpc.rs +++ b/rust/src/dcerpc/dcerpc.rs @@ -24,6 +24,7 @@ use crate::frames::*; use nom7::error::{Error, ErrorKind}; use nom7::number::Endianness; use nom7::{Err, IResult, Needed}; +use suricata_sys::sys::AppProto; use std; use std::cmp; use std::ffi::CString; @@ -1109,7 +1110,7 @@ pub unsafe extern "C" fn rs_dcerpc_parse_response( } #[no_mangle] -pub extern "C" fn rs_dcerpc_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: core::AppProto) -> *mut std::os::raw::c_void { +pub extern "C" fn rs_dcerpc_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: AppProto) -> *mut std::os::raw::c_void { let state = DCERPCState::new(); let boxed = Box::new(state); return Box::into_raw(boxed) as *mut _; diff --git a/rust/src/dcerpc/dcerpc_udp.rs b/rust/src/dcerpc/dcerpc_udp.rs index 634e02ad60..700ba3adbb 100644 --- a/rust/src/dcerpc/dcerpc_udp.rs +++ b/rust/src/dcerpc/dcerpc_udp.rs @@ -24,6 +24,7 @@ use crate::dcerpc::dcerpc::{ use crate::direction::{Direction, DIR_BOTH}; use crate::flow::Flow; use nom7::Err; +use suricata_sys::sys::AppProto; use std; use std::ffi::CString; use std::collections::VecDeque; @@ -252,7 +253,7 @@ pub extern "C" fn rs_dcerpc_udp_state_free(state: *mut std::os::raw::c_void) { } #[no_mangle] -pub extern "C" fn rs_dcerpc_udp_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: core::AppProto) -> *mut std::os::raw::c_void { +pub extern "C" fn rs_dcerpc_udp_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: AppProto) -> *mut std::os::raw::c_void { let state = DCERPCUDPState::new(); let boxed = Box::new(state); return Box::into_raw(boxed) as *mut _; @@ -315,7 +316,7 @@ fn probe(input: &[u8]) -> (bool, bool) { } pub unsafe extern "C" fn rs_dcerpc_probe_udp(_f: *const Flow, direction: u8, input: *const u8, - len: u32, rdir: *mut u8) -> core::AppProto + len: u32, rdir: *mut u8) -> AppProto { SCLogDebug!("Probing the packet for DCERPC/UDP"); if len == 0 || input.is_null() { diff --git a/rust/src/detect/mod.rs b/rust/src/detect/mod.rs index 899950730a..b040014c44 100644 --- a/rust/src/detect/mod.rs +++ b/rust/src/detect/mod.rs @@ -32,9 +32,10 @@ pub mod tojson; pub mod vlan; pub mod datasets; -use crate::core::AppProto; use std::os::raw::{c_int, c_void}; +use suricata_sys::sys::AppProto; + /// EnumString trait that will be implemented on enums that /// derive StringEnum. pub trait EnumString { diff --git a/rust/src/dhcp/dhcp.rs b/rust/src/dhcp/dhcp.rs index 9655353750..42d0a57824 100644 --- a/rust/src/dhcp/dhcp.rs +++ b/rust/src/dhcp/dhcp.rs @@ -15,8 +15,10 @@ * 02110-1301, USA. */ +use suricata_sys::sys::AppProto; + use crate::applayer::{self, *}; -use crate::core::{AppProto, ALPROTO_UNKNOWN, IPPROTO_UDP}; +use crate::core::{ALPROTO_UNKNOWN, IPPROTO_UDP}; use crate::dhcp::parser::*; use crate::flow::Flow; use std; diff --git a/rust/src/dns/dns.rs b/rust/src/dns/dns.rs index 30c1254274..7b2f67b43a 100644 --- a/rust/src/dns/dns.rs +++ b/rust/src/dns/dns.rs @@ -30,6 +30,7 @@ use crate::frames::Frame; use nom7::number::streaming::be_u16; use nom7::{Err, IResult}; +use suricata_sys::sys::AppProto; /// DNS record types. pub const DNS_RECORD_TYPE_A: u16 = 1; diff --git a/rust/src/enip/enip.rs b/rust/src/enip/enip.rs index d58efde5b0..0cf2cbcc2a 100644 --- a/rust/src/enip/enip.rs +++ b/rust/src/enip/enip.rs @@ -20,7 +20,7 @@ use super::parser; use crate::applayer::{self, *}; use crate::conf::conf_get; use crate::core::{ - AppProto, ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP, IPPROTO_UDP, + ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP, IPPROTO_UDP, STREAM_TOCLIENT, STREAM_TOSERVER, }; use crate::detect::EnumString; @@ -28,6 +28,7 @@ use crate::direction::Direction; use crate::flow::Flow; use crate::frames::Frame; use nom7 as nom; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use std::ffi::CString; diff --git a/rust/src/http2/http2.rs b/rust/src/http2/http2.rs index fd5cf12abd..eac3c88482 100644 --- a/rust/src/http2/http2.rs +++ b/rust/src/http2/http2.rs @@ -32,6 +32,7 @@ use crate::frames::Frame; use crate::dns::dns::{dns_parse_request, dns_parse_response, DNSTransaction}; use nom7::Err; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use std::ffi::CString; diff --git a/rust/src/ike/ike.rs b/rust/src/ike/ike.rs index 297b01f61c..c62499d6e6 100644 --- a/rust/src/ike/ike.rs +++ b/rust/src/ike/ike.rs @@ -29,6 +29,7 @@ use crate::ike::ikev1::{handle_ikev1, IkeV1Header, Ikev1Container}; use crate::ike::ikev2::{handle_ikev2, Ikev2Container}; use crate::ike::parser::*; use nom7::Err; +use suricata_sys::sys::AppProto; use std; use std::collections::HashSet; use std::ffi::CString; diff --git a/rust/src/krb/krb5.rs b/rust/src/krb/krb5.rs index 9d90cdd992..4a07ea45a8 100644 --- a/rust/src/krb/krb5.rs +++ b/rust/src/krb/krb5.rs @@ -26,9 +26,10 @@ use der_parser::ber::Class; use kerberos_parser::krb5_parser; use kerberos_parser::krb5::{EncryptionType,ErrorCode,MessageType,PrincipalName,Realm,KrbError}; use asn1_rs::FromDer; +use suricata_sys::sys::AppProto; use crate::applayer::{self, *}; use crate::core; -use crate::core::{AppProto,ALPROTO_FAILED,ALPROTO_UNKNOWN, IPPROTO_TCP, IPPROTO_UDP}; +use crate::core::{ALPROTO_FAILED,ALPROTO_UNKNOWN, IPPROTO_TCP, IPPROTO_UDP}; use crate::direction::Direction; use crate::flow::Flow; diff --git a/rust/src/ldap/ldap.rs b/rust/src/ldap/ldap.rs index 7c0ce1960b..37a6b4a476 100644 --- a/rust/src/ldap/ldap.rs +++ b/rust/src/ldap/ldap.rs @@ -24,6 +24,7 @@ use crate::direction::Direction; use crate::flow::Flow; use crate::frames::*; use nom7 as nom; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use std::ffi::CString; diff --git a/rust/src/modbus/modbus.rs b/rust/src/modbus/modbus.rs index 33cb9787c4..52486b5b22 100644 --- a/rust/src/modbus/modbus.rs +++ b/rust/src/modbus/modbus.rs @@ -15,7 +15,7 @@ * 02110-1301, USA. */ use crate::applayer::{self, *}; -use crate::core::{AppProto, ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP}; +use crate::core::{ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP}; use crate::flow::Flow; use std::ffi::CString; @@ -25,6 +25,7 @@ use sawp::error::ErrorKind as SawpErrorKind; use sawp::parser::{Direction, Parse}; use sawp::probe::{Probe, Status}; use sawp_modbus::{self, AccessType, ErrorFlags, Flags, Message}; +use suricata_sys::sys::AppProto; pub const REQUEST_FLOOD: usize = 500; // Default unreplied Modbus requests are considered a flood pub const MODBUS_PARSER: sawp_modbus::Modbus = sawp_modbus::Modbus { probe_strict: true }; diff --git a/rust/src/mqtt/mqtt.rs b/rust/src/mqtt/mqtt.rs index 697d2ef266..71e90573de 100644 --- a/rust/src/mqtt/mqtt.rs +++ b/rust/src/mqtt/mqtt.rs @@ -27,6 +27,7 @@ use crate::direction::Direction; use crate::flow::Flow; use crate::frames::*; use nom7::Err; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use std::ffi::CString; diff --git a/rust/src/nfs/nfs.rs b/rust/src/nfs/nfs.rs index 48a6bba1c1..9d8872e9a7 100644 --- a/rust/src/nfs/nfs.rs +++ b/rust/src/nfs/nfs.rs @@ -23,6 +23,7 @@ use std::collections::HashMap; use std::ffi::CString; use nom7::{Err, Needed}; +use suricata_sys::sys::AppProto; use crate::applayer; use crate::applayer::*; diff --git a/rust/src/ntp/ntp.rs b/rust/src/ntp/ntp.rs index 576e1b6fc8..e6f1dd6562 100644 --- a/rust/src/ntp/ntp.rs +++ b/rust/src/ntp/ntp.rs @@ -21,13 +21,14 @@ extern crate ntp_parser; use self::ntp_parser::*; use crate::applayer::{self, *}; use crate::core; -use crate::core::{AppProto, ALPROTO_FAILED, ALPROTO_UNKNOWN}; +use crate::core::{ALPROTO_FAILED, ALPROTO_UNKNOWN}; use crate::direction::Direction; use crate::flow::Flow; use std; use std::ffi::CString; use nom7::Err; +use suricata_sys::sys::AppProto; #[derive(AppLayerEvent)] pub enum NTPEvent { diff --git a/rust/src/pgsql/pgsql.rs b/rust/src/pgsql/pgsql.rs index 4054eac0c3..0ea9d61067 100644 --- a/rust/src/pgsql/pgsql.rs +++ b/rust/src/pgsql/pgsql.rs @@ -22,10 +22,11 @@ use super::parser::{self, ConsolidatedDataRowPacket, PgsqlBEMessage, PgsqlFEMessage}; use crate::applayer::*; use crate::conf::*; -use crate::core::{AppProto, ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP, *}; +use crate::core::{ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP, *}; use crate::direction::Direction; use crate::flow::Flow; use nom7::{Err, IResult}; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use std::ffi::CString; diff --git a/rust/src/quic/quic.rs b/rust/src/quic/quic.rs index 442cfc944a..94f4edc62f 100644 --- a/rust/src/quic/quic.rs +++ b/rust/src/quic/quic.rs @@ -22,9 +22,10 @@ use super::{ parser::{quic_pkt_num, QuicData, QuicHeader, QuicType}, }; use crate::{applayer::{self, *}, direction::Direction, flow::Flow}; -use crate::core::{AppProto, ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_UDP}; +use crate::core::{ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_UDP}; use std::collections::VecDeque; use std::ffi::CString; +use suricata_sys::sys::AppProto; use tls_parser::TlsExtensionType; static mut ALPROTO_QUIC: AppProto = ALPROTO_UNKNOWN; diff --git a/rust/src/rdp/rdp.rs b/rust/src/rdp/rdp.rs index b5684aa248..45c924e49e 100644 --- a/rust/src/rdp/rdp.rs +++ b/rust/src/rdp/rdp.rs @@ -20,10 +20,11 @@ //! RDP application layer use crate::applayer::{self, *}; -use crate::core::{AppProto, ALPROTO_UNKNOWN, IPPROTO_TCP}; +use crate::core::{ALPROTO_UNKNOWN, IPPROTO_TCP}; use crate::flow::Flow; use crate::rdp::parser::*; use nom7::Err; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use tls_parser::{parse_tls_plaintext, TlsMessage, TlsMessageHandshake, TlsRecordType}; diff --git a/rust/src/rfb/rfb.rs b/rust/src/rfb/rfb.rs index 6901c973dd..3c34196171 100644 --- a/rust/src/rfb/rfb.rs +++ b/rust/src/rfb/rfb.rs @@ -21,11 +21,12 @@ use super::parser; use crate::applayer; use crate::applayer::*; -use crate::core::{AppProto, ALPROTO_UNKNOWN, IPPROTO_TCP}; +use crate::core::{ALPROTO_UNKNOWN, IPPROTO_TCP}; use crate::direction::Direction; use crate::flow::Flow; use crate::frames::*; use nom7::Err; +use suricata_sys::sys::AppProto; use std; use std::ffi::CString; use std::os::raw::c_char; diff --git a/rust/src/sip/sip.rs b/rust/src/sip/sip.rs index 1743953f1f..d0549685fa 100755 --- a/rust/src/sip/sip.rs +++ b/rust/src/sip/sip.rs @@ -19,12 +19,13 @@ use crate::applayer::{self, *}; use crate::core; -use crate::core::{AppProto, ALPROTO_UNKNOWN, IPPROTO_TCP, IPPROTO_UDP}; +use crate::core::{ALPROTO_UNKNOWN, IPPROTO_TCP, IPPROTO_UDP}; use crate::direction::Direction; use crate::flow::Flow; use crate::frames::*; use crate::sip::parser::*; use nom7::Err; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque; use std::ffi::CString; diff --git a/rust/src/smb/smb.rs b/rust/src/smb/smb.rs index 43a44545ad..2ff1ad15ea 100644 --- a/rust/src/smb/smb.rs +++ b/rust/src/smb/smb.rs @@ -34,6 +34,7 @@ use nom7::{Err, Needed}; use nom7::error::{make_error, ErrorKind}; use lru::LruCache; +use suricata_sys::sys::AppProto; use std::num::NonZeroUsize; use crate::core::*; diff --git a/rust/src/snmp/snmp.rs b/rust/src/snmp/snmp.rs index a30e182aef..aa4b0b3f60 100644 --- a/rust/src/snmp/snmp.rs +++ b/rust/src/snmp/snmp.rs @@ -30,6 +30,7 @@ use der_parser::ber::BerObjectContent; use der_parser::der::parse_der_sequence; use nom7::{Err, IResult}; use nom7::error::{ErrorKind, make_error}; +use suricata_sys::sys::AppProto; #[derive(AppLayerEvent)] pub enum SNMPEvent { diff --git a/rust/src/ssh/ssh.rs b/rust/src/ssh/ssh.rs index e0c4ecc7c0..202969958b 100644 --- a/rust/src/ssh/ssh.rs +++ b/rust/src/ssh/ssh.rs @@ -22,6 +22,7 @@ use crate::direction::Direction; use crate::flow::Flow; use crate::frames::Frame; use nom7::Err; +use suricata_sys::sys::AppProto; use std::ffi::CString; use std::sync::atomic::{AtomicBool, Ordering}; diff --git a/rust/src/telnet/telnet.rs b/rust/src/telnet/telnet.rs index 01f0e38c9a..88dcd3638e 100644 --- a/rust/src/telnet/telnet.rs +++ b/rust/src/telnet/telnet.rs @@ -16,12 +16,13 @@ */ use std; -use crate::core::{ALPROTO_UNKNOWN, AppProto, IPPROTO_TCP}; +use crate::core::{ALPROTO_UNKNOWN, IPPROTO_TCP}; use crate::applayer::{self, *}; use crate::flow::Flow; use crate::frames::*; use std::ffi::CString; use nom7::IResult; +use suricata_sys::sys::AppProto; use super::parser; static mut ALPROTO_TELNET: AppProto = ALPROTO_UNKNOWN; diff --git a/rust/src/websocket/websocket.rs b/rust/src/websocket/websocket.rs index 3f49efbc19..516065ebfb 100644 --- a/rust/src/websocket/websocket.rs +++ b/rust/src/websocket/websocket.rs @@ -18,7 +18,7 @@ use super::parser; use crate::applayer::{self, *}; use crate::conf::conf_get; -use crate::core::{AppProto, ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP}; +use crate::core::{ALPROTO_FAILED, ALPROTO_UNKNOWN, IPPROTO_TCP}; use crate::direction::Direction; use crate::flow::Flow; use crate::frames::Frame; @@ -27,6 +27,7 @@ use nom7 as nom; use nom7::Needed; use flate2::read::DeflateDecoder; +use suricata_sys::sys::AppProto; use std; use std::collections::VecDeque;