]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust: use bindgened Flow definition
authorPhilippe Antoine <pantoine@oisf.net>
Thu, 22 May 2025 08:34:11 +0000 (10:34 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 27 May 2025 19:43:50 +0000 (21:43 +0200)
Ticket: 7667

examples/plugins/altemplate/src/template.rs
rust/src/flow.rs
rust/src/nfs/nfs.rs
rust/src/smb/smb.rs

index dd183021a76b693e61a0c7fbb11d5bb176912e67..39c8b19383d6ade332dcf49c61a5b801c59ac7a8 100644 (file)
@@ -36,11 +36,10 @@ use suricata::applayer::{
 };
 use suricata::conf::conf_get;
 use suricata::core::{ALPROTO_UNKNOWN, IPPROTO_TCP};
-use suricata::flow::Flow;
 use suricata::{
     build_slice, cast_pointer, export_state_data_get, export_tx_data_get, SCLogError, SCLogNotice,
 };
-use suricata_sys::sys::AppProto;
+use suricata_sys::sys::{AppProto, Flow};
 
 static mut TEMPLATE_MAX_TX: usize = 256;
 
index 27c4d658f56d981e502be5981d4ec24cbdf7fd3a..3c611281787b5da23265525f42c7033cac3b935c 100644 (file)
@@ -28,28 +28,25 @@ extern "C" {
 pub const FLOW_DIR_REVERSED: u32 = BIT_U32!(26);
 
 /// Opaque flow type (defined in C)
-pub enum Flow {}
+pub use suricata_sys::sys::Flow;
 
-/// Rust implementation of Flow.
-impl Flow {
-    /// Return the time of the last flow update as a `Duration`
-    /// since the epoch.
-    pub fn get_last_time(&mut self) -> std::time::Duration {
-        unsafe {
-            let mut secs: u64 = 0;
-            let mut usecs: u64 = 0;
-            FlowGetLastTimeAsParts(self, &mut secs, &mut usecs);
-            std::time::Duration::new(secs, usecs as u32 * 1000)
-        }
+/// Return the time of the last flow update as a `Duration`
+/// since the epoch.
+pub fn flow_get_last_time(flow: &Flow) -> std::time::Duration {
+    unsafe {
+        let mut secs: u64 = 0;
+        let mut usecs: u64 = 0;
+        FlowGetLastTimeAsParts(flow, &mut secs, &mut usecs);
+        std::time::Duration::new(secs, usecs as u32 * 1000)
     }
+}
 
-    /// Return the flow flags.
-    pub fn get_flags(&self) -> u32 {
-        unsafe { FlowGetFlags(self) }
-    }
+/// Return the flow flags.
+pub fn flow_get_flags(flow: &Flow) -> u32 {
+    unsafe { FlowGetFlags(flow) }
+}
 
-    /// Return flow ports
-    pub fn get_ports(&self) -> (u16, u16) {
-        unsafe { (FlowGetSourcePort(self), FlowGetDestinationPort(self)) }
-    }
+/// Return flow ports
+pub fn flow_get_ports(flow: &Flow) -> (u16, u16) {
+    unsafe { (FlowGetSourcePort(flow), FlowGetDestinationPort(flow)) }
 }
index 645e1f30f379a523bc76d0b2165fa1646a123765..66d355e2eef4a1d631d01e3b94c06b08bb683969 100644 (file)
@@ -33,7 +33,7 @@ use crate::direction::Direction;
 use crate::direction::DIR_BOTH;
 use crate::filecontainer::*;
 use crate::filetracker::*;
-use crate::flow::Flow;
+use crate::flow::{Flow, flow_get_last_time};
 use crate::frames::*;
 
 use crate::nfs::nfs2_records::*;
@@ -1946,7 +1946,7 @@ unsafe extern "C" fn nfs_parse_request(
     }
     SCLogDebug!("parsing {} bytes of request data", stream_slice.len());
 
-    state.update_ts(flow.get_last_time().as_secs());
+    state.update_ts(flow_get_last_time(flow).as_secs());
     state.parse_tcp_data_ts(flow, &stream_slice)
 }
 
@@ -1966,7 +1966,7 @@ unsafe extern "C" fn nfs_parse_response(
     }
     SCLogDebug!("parsing {} bytes of response data", stream_slice.len());
 
-    state.update_ts(flow.get_last_time().as_secs());
+    state.update_ts(flow_get_last_time(flow).as_secs());
     state.parse_tcp_data_tc(flow, &stream_slice)
 }
 
index ea12e29dde188461f937c06561c3d9a4f21d16e2..6b4f139701a1c08adeff27206566fc26dea1641b 100644 (file)
@@ -41,7 +41,7 @@ use crate::core::*;
 use crate::applayer;
 use crate::applayer::*;
 use crate::direction::Direction;
-use crate::flow::{Flow, FLOW_DIR_REVERSED};
+use crate::flow::{Flow, FLOW_DIR_REVERSED, flow_get_flags, flow_get_last_time, flow_get_ports};
 use crate::frames::*;
 use crate::conf::*;
 use crate::applayer::{AppLayerResult, AppLayerTxData, AppLayerEvent};
@@ -2025,7 +2025,7 @@ unsafe extern "C" fn smb_parse_request_tcp(flow: *const Flow,
         state.ts_gap = true;
     }
 
-    state.update_ts(flow.get_last_time().as_secs());
+    state.update_ts(flow_get_last_time(flow).as_secs());
     state.parse_tcp_data_ts(flow, &stream_slice)
 }
 
@@ -2058,7 +2058,7 @@ unsafe extern "C" fn smb_parse_response_tcp(flow: *const Flow,
         state.tc_gap = true;
     }
 
-    state.update_ts(flow.get_last_time().as_secs());
+    state.update_ts(flow_get_last_time(flow).as_secs());
     state.parse_tcp_data_tc(flow, &stream_slice)
 }
 
@@ -2273,8 +2273,8 @@ unsafe extern "C" fn smb3_probe_tcp(f: *const Flow, dir: u8, input: *const u8, l
     if retval != ALPROTO_SMB {
         return retval;
     }
-    let (sp, dp) = f.get_ports();
-    let flags = f.get_flags();
+    let (sp, dp) = flow_get_ports(f);
+    let flags = flow_get_flags(f);
     let fsp = if (flags & FLOW_DIR_REVERSED) != 0 { dp } else { sp };
     let fdp = if (flags & FLOW_DIR_REVERSED) != 0 { sp } else { dp };
     if fsp == 445 && fdp != 445 {