1 //--------------------------------------------------------------------------
2 // Copyright (C) 2020-2021 Cisco and/or its affiliates. All rights reserved.
3 //
4 // This program is free software; you can redistribute it and/or modify it
5 // under the terms of the GNU General Public License Version 2 as published
6 // by the Free Software Foundation.  You may not use, modify or distribute
7 // this program under any other version of the GNU General Public License.
8 //
9 // This program is distributed in the hope that it will be useful, but
10 // WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 // General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License along
15 // with this program; if not, write to the Free Software Foundation, Inc.,
16 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 //--------------------------------------------------------------------------
18 // stubs.h author Ron Dempster <rdempste@cisco.com>
19 
20 #include "detection/context_switcher.h"
21 #include "detection/detection_engine.h"
22 #include "detection/detection_util.h"
23 #include "detection/ips_context.h"
24 #include "detection/tag.h"
25 #include "file_api/file_service.h"
26 #include "filters/detection_filter.h"
27 #include "filters/rate_filter.h"
28 #include "filters/sfrf.h"
29 #include "filters/sfthreshold.h"
30 #include "flow/ha.h"
31 #include "framework/data_bus.h"
32 #include "latency/packet_latency.h"
33 #include "latency/rule_latency.h"
34 #include "log/messages.h"
35 #include "managers/action_manager.h"
36 #include "managers/codec_manager.h"
37 #include "managers/event_manager.h"
38 #include "managers/inspector_manager.h"
39 #include "managers/ips_manager.h"
40 #include "managers/module_manager.h"
41 #include "main.h"
42 #include "main/analyzer.h"
43 #include "main/oops_handler.h"
44 #include "main/policy.h"
45 #include "main/snort_config.h"
46 #include "main/swapper.h"
47 #include "main/thread_config.h"
48 #include "network_inspectors/packet_tracer/packet_tracer.h"
49 #include "packet_io/active.h"
50 #include "packet_io/sfdaq.h"
51 #include "packet_io/sfdaq_instance.h"
52 #include "packet_io/sfdaq_module.h"
53 #include "profiler/profiler.h"
54 #include "profiler/profiler_defs.h"
55 #include "protocols/packet.h"
56 #include "protocols/packet_manager.h"
57 #include "side_channel/side_channel.h"
58 #include "stream/stream.h"
59 #include "target_based/host_attributes.h"
60 #include "time/packet_time.h"
61 #include "trace/trace_api.h"
62 #include "utils/dnet_header.h"
63 #include "utils/stats.h"
64 
65 THREAD_LOCAL DAQStats daq_stats;
66 
start()67 void Profiler::start() { }
stop(uint64_t)68 void Profiler::stop(uint64_t) { }
consolidate_stats()69 void Profiler::consolidate_stats() { }
apply(Analyzer &)70 void Swapper::apply(Analyzer&) { }
71 Swapper::~Swapper() = default;
tinit()72 void OopsHandler::tinit() { }
tterm()73 void OopsHandler::tterm() { }
get_run_num()74 uint16_t get_run_num() { return 0; }
set_run_num(uint16_t)75 void set_run_num(uint16_t) { }
set_instance_id(unsigned)76 void set_instance_id(unsigned) { }
set_thread_type(SThreadType)77 void set_thread_type(SThreadType) { }
push(snort::IpsContext *)78 void ContextSwitcher::push(snort::IpsContext*) { }
stop()79 void ContextSwitcher::stop() { }
80 ContextSwitcher::~ContextSwitcher() = default;
get_context()81 snort::IpsContext* ContextSwitcher::get_context() const { return nullptr; }
start()82 void ContextSwitcher::start() { }
InitTag()83 void InitTag() { }
CleanupTag()84 void CleanupTag() { }
RateFilter_Cleanup()85 void RateFilter_Cleanup() { }
sfthreshold_alloc(unsigned int,unsigned int)86 int sfthreshold_alloc(unsigned int, unsigned int) { return -1; }
sfthreshold_reset()87 void sfthreshold_reset() { }
sfthreshold_free()88 void sfthreshold_free() { }
EventTrace_Init()89 void EventTrace_Init() { }
EventTrace_Term()90 void EventTrace_Term() { }
detection_filter_init(DetectionFilterConfig *)91 void detection_filter_init(DetectionFilterConfig*) { }
detection_filter_term()92 void detection_filter_term() { }
tterm()93 void RuleLatency::tterm() { }
tterm()94 void PacketLatency::tterm() { }
thread_init()95 void SideChannelManager::thread_init() { }
thread_term()96 void SideChannelManager::thread_term() { }
thread_init(const snort::SnortConfig *)97 void CodecManager::thread_init(const snort::SnortConfig*) { }
thread_term()98 void CodecManager::thread_term() { }
open_outputs()99 void EventManager::open_outputs() { }
close_outputs()100 void EventManager::close_outputs() { }
setup_options(const snort::SnortConfig *)101 void IpsManager::setup_options(const snort::SnortConfig*) { }
clear_options(const snort::SnortConfig *)102 void IpsManager::clear_options(const snort::SnortConfig*) { }
thread_init(const snort::SnortConfig *)103 void ActionManager::thread_init(const snort::SnortConfig*) { }
thread_term()104 void ActionManager::thread_term() { }
thread_reinit(const snort::SnortConfig *)105 void ActionManager::thread_reinit(const snort::SnortConfig*) { }
SFRF_Alloc(unsigned int)106 int SFRF_Alloc(unsigned int) { return -1; }
packet_time_update(const struct timeval *)107 void packet_time_update(const struct timeval*) { }
main_poke(unsigned)108 void main_poke(unsigned) { }
set_default_policy(const snort::SnortConfig *)109 void set_default_policy(const snort::SnortConfig*) { }
snort_ignore(snort::Packet *)110 bool snort_ignore(snort::Packet*) { return false; }
ip_open()111 ip_t* ip_open() { return nullptr; }
ip_close(ip_t *)112 ip_t* ip_close(ip_t*) { return nullptr; }
ip_send(ip_t *,const void *,size_t)113 ssize_t ip_send(ip_t*, const void*, size_t) { return -1; }
eth_open(const char *)114 eth_t* eth_open(const char*) { return nullptr; }
eth_close(eth_t *)115 eth_t* eth_close(eth_t*) { return nullptr; }
eth_send(eth_t *,const void *,size_t)116 ssize_t eth_send(eth_t*, const void*, size_t) { return -1; }
initialize()117 void HostAttributesManager::initialize() { }
118 
119 namespace snort
120 {
121 static struct timeval s_packet_time = { 0, 0 };
122 THREAD_LOCAL PacketTracer* s_pkt_trace;
123 THREAD_LOCAL TimeContext* ProfileContext::curr_time = nullptr;
124 bool TimeProfilerStats::enabled = false;
125 THREAD_LOCAL PacketCount pc;
126 
packet_gettimeofday(struct timeval * tv)127 void packet_gettimeofday(struct timeval* tv) { *tv = s_packet_time; }
MemoryContext(MemoryTracker &)128 MemoryContext::MemoryContext(MemoryTracker&) : saved(nullptr) { }
129 MemoryContext::~MemoryContext() = default;
Packet(bool)130 Packet::Packet(bool)
131 {
132     memset(this , 0, sizeof(*this));
133     ip_proto_next = IpProtocol::PROTO_NOT_SET;
134     packet_flags = PKT_FROM_CLIENT;
135 }
136 Packet::~Packet()  = default;
get_ips_policy()137 IpsPolicy* get_ips_policy() { return nullptr; }
publish(const char *,Packet *,Flow *)138 void DataBus::publish(const char*, Packet*, Flow*) { }
publish(const char *,DataEvent &,Flow *)139 void DataBus::publish(const char*, DataEvent&, Flow*) { }
SFDAQInstance(const char *,unsigned,const SFDAQConfig *)140 SFDAQInstance::SFDAQInstance(const char*, unsigned, const SFDAQConfig*) { }
141 SFDAQInstance::~SFDAQInstance() = default;
reload()142 void SFDAQInstance::reload() { }
start()143 bool SFDAQInstance::start() { return false; }
stop()144 bool SFDAQInstance::stop() { return false; }
get_error()145 const char* SFDAQInstance::get_error() { return nullptr; }
interrupt()146 bool SFDAQInstance::interrupt() { return false; }
inject(DAQ_Msg_h,int,const uint8_t *,uint32_t)147 int SFDAQInstance::inject(DAQ_Msg_h, int, const uint8_t*, uint32_t) { return -1; }
receive_messages(unsigned)148 DAQ_RecvStatus SFDAQInstance::receive_messages(unsigned) { return DAQ_RSTAT_ERROR; }
ioctl(DAQ_IoctlCmd,void *,size_t)149 int SFDAQInstance::ioctl(DAQ_IoctlCmd, void*, size_t) { return -4; }
set_local_instance(SFDAQInstance *)150 void SFDAQ::set_local_instance(SFDAQInstance*) { }
verdict_to_string(DAQ_Verdict)151 const char* SFDAQ::verdict_to_string(DAQ_Verdict) { return nullptr; }
forwarding_packet(const DAQ_PktHdr_t *)152 bool SFDAQ::forwarding_packet(const DAQ_PktHdr_t*) { return false; }
inject(DAQ_Msg_h,int,const uint8_t *,uint32_t)153 int SFDAQ::inject(DAQ_Msg_h, int, const uint8_t*, uint32_t) { return -1; }
can_inject()154 bool SFDAQ::can_inject() { return false; }
can_inject_raw()155 bool SFDAQ::can_inject_raw() { return false; }
set_packet_verdict_reason(DAQ_Msg_h,uint8_t)156 int SFDAQInstance::set_packet_verdict_reason(DAQ_Msg_h, uint8_t) { return 0; }
157 DetectionEngine::DetectionEngine() = default;
158 DetectionEngine::~DetectionEngine() = default;
onload()159 void DetectionEngine::onload() { }
thread_init()160 void DetectionEngine::thread_init() { }
thread_term()161 void DetectionEngine::thread_term() { }
idle()162 void DetectionEngine::idle() { }
reset()163 void DetectionEngine::reset() { }
wait_for_context()164 void DetectionEngine::wait_for_context() { }
set_file_data(const DataPointer &)165 void DetectionEngine::set_file_data(const DataPointer&) { }
clear_replacement()166 void DetectionEngine::clear_replacement() { }
disable_all(Packet *)167 void DetectionEngine::disable_all(Packet*) { }
get_instance_id()168 unsigned get_instance_id() { return 0; }
get_conf()169 const SnortConfig* SnortConfig::get_conf() { return nullptr; }
thread_init()170 void PacketTracer::thread_init() { }
thread_term()171 void PacketTracer::thread_term() { }
log(const char *,...)172 void PacketTracer::log(const char*, ...) { }
dump(Packet *)173 void PacketTracer::dump(Packet*) { }
daq_dump(Packet *)174 void PacketTracer::daq_dump(Packet*) { }
activate(const Packet &)175 void PacketTracer::activate(const Packet&) { }
thread_init(const TraceConfig *)176 void TraceApi::thread_init(const TraceConfig*) { }
thread_term()177 void TraceApi::thread_term() { }
thread_reinit(const TraceConfig *)178 void TraceApi::thread_reinit(const TraceConfig*) { }
thread_init()179 void PacketManager::thread_init() { }
decode(Packet *,const DAQ_PktHdr_t *,const uint8_t *,uint32_t,bool,bool)180 void PacketManager::decode(
181     Packet*, const DAQ_PktHdr_t*, const uint8_t*, uint32_t, bool, bool) { }
encode_update(Packet *)182 void PacketManager::encode_update(Packet*) { }
thread_term()183 void PacketManager::thread_term() { }
encode_response(TcpResponse,EncodeFlags,const Packet *,uint32_t &,const uint8_t * const,uint32_t)184 const uint8_t* PacketManager::encode_response(TcpResponse, EncodeFlags, const Packet*, uint32_t&,
185     const uint8_t* const, uint32_t) { return nullptr; }
encode_get_max_payload(const Packet *)186 uint16_t PacketManager::encode_get_max_payload(const Packet*) { return 0; }
encode_reject(UnreachResponse,EncodeFlags,const Packet *,uint32_t &)187 const uint8_t* PacketManager::encode_reject(UnreachResponse, EncodeFlags, const Packet*, uint32_t&)
188 { return nullptr; }
thread_init()189 void FileService::thread_init() { }
thread_term()190 void FileService::thread_term() { }
ErrorMessage(const char *,...)191 void ErrorMessage(const char*,...) { }
LogMessage(const char *,...)192 void LogMessage(const char*,...) { }
FatalError(const char *,...)193 [[noreturn]] void FatalError(const char*,...) { exit(-1); }
ParseWarning(WarningGroup,const char *,...)194 void ParseWarning(WarningGroup, const char*, ...) { }
thread_init()195 void HighAvailabilityManager::thread_init() { }
process_receive()196 void HighAvailabilityManager::process_receive() { }
thread_term()197 void HighAvailabilityManager::thread_term() { }
thread_term_beginning()198 void HighAvailabilityManager::thread_term_beginning() { }
process_update(Flow *,Packet *)199 void HighAvailabilityManager::process_update(Flow*, Packet*) { }
thread_init(const SnortConfig *)200 void InspectorManager::thread_init(const SnortConfig*) { }
thread_term()201 void InspectorManager::thread_term() { }
thread_stop(const SnortConfig *)202 void InspectorManager::thread_stop(const SnortConfig*) { }
thread_reinit(const SnortConfig *)203 void InspectorManager::thread_reinit(const SnortConfig*) { }
thread_stop_removed(const SnortConfig *)204 void InspectorManager::thread_stop_removed(const SnortConfig*) { }
accumulate()205 void ModuleManager::accumulate() { }
handle_timeouts(bool)206 void Stream::handle_timeouts(bool) { }
purge_flows()207 void Stream::purge_flows() { }
set_packet_action_to_hold(Packet *)208 bool Stream::set_packet_action_to_hold(Packet*) { return false; }
init_active_response(const Packet *,Flow *)209 void Stream::init_active_response(const Packet*, Flow*) { }
drop_flow(const Packet *)210 void Stream::drop_flow(const Packet* ) { }
block_flow(const Packet *)211 void Stream::block_flow(const Packet*) { }
IpsContext(unsigned)212 IpsContext::IpsContext(unsigned) { }
get_network_policy()213 NetworkPolicy* get_network_policy() { return nullptr; }
get_inspection_policy()214 InspectionPolicy* get_inspection_policy() { return nullptr; }
215 Flow::Flow() = default;
216 Flow::~Flow() = default;
implement_thread_affinity(SThreadType,unsigned)217 void ThreadConfig::implement_thread_affinity(SThreadType, unsigned) { }
218 }
219