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
pull/12590/head
Jason Ish 6 months ago committed by Victor Julien
parent 21ccc4f307
commit 4554c4778d

@ -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 {

@ -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;

@ -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;

@ -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;

@ -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 _;

@ -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() {

@ -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> {

@ -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;

@ -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;

@ -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;

@ -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;

@ -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;

@ -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;

@ -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;

@ -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 };

@ -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;

@ -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::*;

@ -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 {

@ -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;

@ -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;

@ -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};

@ -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;

@ -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;

@ -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::*;

@ -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 {

@ -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};

@ -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;

@ -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;

Loading…
Cancel
Save