]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1686 in SNORT/snort3 from ~SBAIGAL/snort3:noack_api to master
authorDavis McPherson (davmcphe) <davmcphe@cisco.com>
Tue, 30 Jul 2019 19:16:43 +0000 (15:16 -0400)
committerDavis McPherson (davmcphe) <davmcphe@cisco.com>
Tue, 30 Jul 2019 19:16:43 +0000 (15:16 -0400)
Squashed commit of the following:

commit aae5c979ba07cd80103d0a5c05acbefca4840bfe
Author: Steven Baigal (sbaigal) <sbaigal@cisco.com>
Date:   Thu Jul 18 15:30:44 2019 -0400

    stream_tcp: add API for switching no_ack mode

    add assert to make sure the session is tcp

src/stream/libtcp/tcp_stream_session.h
src/stream/stream.cc
src/stream/stream.h
src/stream/tcp/tcp_session.cc
src/stream/tcp/tcp_state_established.cc

index 9c097923635ad5ab4718cfa06c4f744fa77c168d..d09ae2be0b064b3eb9a65e0a09e9a61d8d602945 100644 (file)
@@ -67,6 +67,8 @@ public:
     void SetPacketHeaderFoo(const snort::Packet* p);
     void GetPacketHeaderFoo(DAQ_PktHdr_t* pkth, uint32_t dir);
     void SwapPacketHeaderFoo();
+    void set_no_ack(bool b) { no_ack = b; }
+    bool no_ack_mode_enabled() { return no_ack; }
 
     virtual void update_perf_base_state(char) { }
     virtual void clear_session(
@@ -148,6 +150,9 @@ public:
     TcpStreamConfig* config = nullptr;
     TcpEventLogger tel;
 
+private:
+    bool no_ack = false;
+
 protected:
     TcpStreamSession(snort::Flow*);
     virtual void set_os_policy() = 0;
index 405b941f589d312a618e1873c433dc6a2d767c74..0e3ee4fab46638c368bb5f4e7f108eb19c332aef 100644 (file)
@@ -810,6 +810,14 @@ bool Stream::set_packet_action_to_hold(Packet* p)
     return p->flow->session->set_packet_action_to_hold(p);
 }
 
+void Stream::set_no_ack_mode(Flow* flow, bool on_off)
+{
+    assert(flow and flow->session and flow->pkt_type == PktType::TCP);
+
+    TcpStreamSession* tcp_session = (TcpStreamSession*)flow->session;
+    tcp_session->set_no_ack(on_off);
+}
+
 #ifdef UNIT_TEST
 
 TEST_CASE("Stream API", "[stream_api][stream]")
index 4168f4d18b3caf4ed54e36e79b82cb2579b98fee..fa03fe2365561799a8e6ba4486af5ca95e1d961d 100644 (file)
@@ -233,6 +233,7 @@ public:
     static uint8_t get_tcp_options_len(Flow*, bool to_server);
 
     static bool set_packet_action_to_hold(Packet*);
+    static void set_no_ack_mode(Flow*, bool);
 
 private:
     static void set_ip_protocol(Flow*);
index 5700889c58760c178a98c2cec4e54d7175149e38..5abc535349d50dbd147689ae52c8579ba7cdebe9 100644 (file)
@@ -1023,7 +1023,10 @@ int TcpSession::process(Packet* p)
 
     // FIXIT-H need to do something here to handle check for need to swap trackers??
     if ( !config )
+    {
         config = get_tcp_cfg(flow->ssn_server);
+        set_no_ack(config->no_ack);
+    }
 
     if( !tcp_init )
         set_os_policy( );
index ad97cb3b1564ba02796079c0de89d748bf838313..cde765901f2c9b684f83a9bbc577610305e3ea27 100644 (file)
@@ -79,7 +79,7 @@ bool TcpStateEstablished::ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker&
 bool TcpStateEstablished::data_seg_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     trk.update_tracker_ack_sent(tsd);
-    if ( trk.session->config->no_ack )
+    if ( trk.session->no_ack_mode_enabled() )
         trk.update_tracker_no_ack_recv(tsd);
     return true;
 }
@@ -88,7 +88,7 @@ bool TcpStateEstablished::data_seg_recv(TcpSegmentDescriptor& tsd, TcpStreamTrac
 {
     trk.update_tracker_ack_recv(tsd);
     trk.session->handle_data_segment(tsd);
-    if ( trk.session->config->no_ack )
+    if ( trk.session->no_ack_mode_enabled() )
         trk.update_tracker_no_ack_sent(tsd);
     return true;
 }