]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust: use AppProto from generated bindings instead of duplicating
authorJason Ish <jason.ish@oisf.net>
Thu, 23 Jan 2025 22:40:22 +0000 (16:40 -0600)
committerVictor Julien <victor@inliniac.net>
Mon, 17 Feb 2025 06:31:29 +0000 (07:31 +0100)
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

28 files changed:
rust/src/applayer.rs
rust/src/applayertemplate/template.rs
rust/src/bittorrent_dht/bittorrent_dht.rs
rust/src/core.rs
rust/src/dcerpc/dcerpc.rs
rust/src/dcerpc/dcerpc_udp.rs
rust/src/detect/mod.rs
rust/src/dhcp/dhcp.rs
rust/src/dns/dns.rs
rust/src/enip/enip.rs
rust/src/http2/http2.rs
rust/src/ike/ike.rs
rust/src/krb/krb5.rs
rust/src/ldap/ldap.rs
rust/src/modbus/modbus.rs
rust/src/mqtt/mqtt.rs
rust/src/nfs/nfs.rs
rust/src/ntp/ntp.rs
rust/src/pgsql/pgsql.rs
rust/src/quic/quic.rs
rust/src/rdp/rdp.rs
rust/src/rfb/rfb.rs
rust/src/sip/sip.rs
rust/src/smb/smb.rs
rust/src/snmp/snmp.rs
rust/src/ssh/ssh.rs
rust/src/telnet/telnet.rs
rust/src/websocket/websocket.rs

index 12bc3d42bfefe0f7fbc0401f578fb2acf76f8d07..4367825727ae18760012dbfa44d73c709667fa8e 100644 (file)
@@ -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 {
index 9f706a74bba029062871be9106bd3781e79a6cc8..88f66af34b3a4933d6ace11341661d96f30dac53 100644 (file)
 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;
index 812625b3debdbfe7c2acf6da82dcecf0f856db54..3f447635dbbfb61820c489e8b8986bb7d08956b1 100644 (file)
  * 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;
index a1b74ceaf51a83838c03b4b686712175ea9eae78..bef967b0e10ad58697174bc0b96cc26ad76a83ef 100644 (file)
@@ -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;
index 57a57e6e1f8d2632dd5894610aaa22f46be3645c..0e5d08dcb1cffc4bb11e7d3b5329d573492e3ee1 100644 (file)
@@ -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 _;
index 634e02ad605653731ad78dbe11b63857c8a9cefa..700ba3adbbaa518dc096d8be8936d767ff31e59d 100644 (file)
@@ -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() {
index 899950730a217ccc7629434c321f995f6e15be06..b040014c441d88ab712f63a5ad84c466b522eec2 100644 (file)
@@ -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<T> {
index 9655353750212446fac90aa97f73379accd62c9c..42d0a57824c10e4af2a3227fe8e19d817da7af48 100644 (file)
  * 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;
index 30c1254274b80c23cb43ca7812e24d91f159e8fb..7b2f67b43a2a5d266f45d56409a5c8804eb262e2 100644 (file)
@@ -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;
index d58efde5b00f86c39eada3c1f248e90db7701770..0cf2cbcc2adbd2c2f6c88e1ecc2f1824b931d2f2 100644 (file)
@@ -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;
index fd5cf12abd3145eea82dbca9fada0d22d33faa2b..eac3c884828b904f84c5fca5828f2ffd37a9fcdd 100644 (file)
@@ -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;
index 297b01f61c49fb97c436e5b030dfd13e6ab9b523..c62499d6e62546b73a2d75f3c108d56c30d949d7 100644 (file)
@@ -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;
index 9d90cdd992a756bac9cd036a48d4c19b3b5332e9..4a07ea45a84b3e7e29fc4fed7ee4bce2d3112c6e 100644 (file)
@@ -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;
 
index 7c0ce1960b942804e38919313df8626b5e6bdbf7..37a6b4a476ca9c8b512761fb3a1ca30146571e93 100644 (file)
@@ -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;
index 33cb9787c47efefdd9da307a379f8bb907d5dd33..52486b5b22b0df64935e0ff598f27afcb00bc7e3 100644 (file)
@@ -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 };
index 697d2ef266cbf75d427f24b3125678bff207f522..71e90573de938964bc5060d816eb1ec49ea6ed36 100644 (file)
@@ -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;
index 48a6bba1c18bf8350dd968a426d06491a811287b..9d8872e9a788d85ee8511b489388afd5fa9b60b3 100644 (file)
@@ -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::*;
index 576e1b6fc80d661e9b1cefb6c7b2b1f29484fe66..e6f1dd656254b6a5e918349aec036fd47a346017 100644 (file)
@@ -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 {
index 4054eac0c3c7b6f38ace219dcc617d10768d5fac..0ea9d6106744f7acc0a1a0d251c7b7704cadcb52 100644 (file)
 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;
index 442cfc944a65fac0a3ec0e83a4fba9967cccc086..94f4edc62f31544f7ee398b7204f0af483b13df1 100644 (file)
@@ -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;
index b5684aa248a9e3e500ee55b777346af5f7e30482..45c924e49ef12bdeb365a5af117e505e0373dc6a 100644 (file)
 //! 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};
index 6901c973dd746b332dd40daeeae4bba3caab2262..3c34196171fb4e78115bc1c43bf9a69d10ca0807 100644 (file)
 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;
index 1743953f1f33b493f2f515adfdedfe5a77262c2f..d0549685facdcc95b29dd821020abb06fae95396 100755 (executable)
 
 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;
index 43a44545ad0968f4caa82653b0587a4852ede211..2ff1ad15ea43d7eec439dde6ed8a5f330471cdfe 100644 (file)
@@ -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::*;
index a30e182aefb40a8497346b25eb8b747bf1005cc7..aa4b0b3f60d29a8a79cb19ee882804cb31f796a9 100644 (file)
@@ -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 {
index e0c4ecc7c0c8ba53747d0472c63b37e41f98f568..202969958b76fb1bdfc9995424d9a26372d0b6f2 100644 (file)
@@ -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};
 
index 01f0e38c9ab47d77bc7834d5a70175d95e7ed5f1..88dcd3638eaf5173fda37e44e2e5eb10a80ad976 100644 (file)
  */
 
 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;
index 3f49efbc19eef1f2e52f50f0caa2034ee3c9a218..516065ebfbc2e22d3010582bc8577ab533cd5d7b 100644 (file)
@@ -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;