Merge in SNORT/snort3 from ~SBAIGAL/snort3:ok2noack to master
Squashed commit of the following:
commit
f0de602d7c910b796ec11da3e1ffd7d42356960c
Author: Steven Baigal (sbaigal) <sbaigal@cisco.com>
Date: Wed Mar 30 21:49:46 2022 -0400
stream: add can_set_no_ack() api to check if policy allows no-ack mode
return p->flow->session->set_packet_action_to_hold(p);
}
-void Stream::set_no_ack_mode(Flow* flow, bool on_off)
+bool Stream::can_set_no_ack_mode(Flow* flow)
{
assert(flow and flow->session and flow->pkt_type == PktType::TCP);
TcpStreamSession* tcp_session = (TcpStreamSession*)flow->session;
- tcp_session->set_no_ack(on_off);
+ return tcp_session->can_set_no_ack();
+}
+
+bool 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;
+ return tcp_session->set_no_ack(on_off);
}
void Stream::partial_flush(Flow* flow, bool to_server)
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);
+ static bool can_set_no_ack_mode(Flow*);
+ static bool set_no_ack_mode(Flow*, bool);
static void partial_flush(Flow*, bool to_server);
static bool get_held_pkt_seq(Flow*, uint32_t&);
flow->set_ttl(tsd.get_pkt(), true);
}
-void TcpStreamSession::set_no_ack(bool b)
+bool TcpStreamSession::can_set_no_ack()
{
- if ( server.get_flush_policy() == STREAM_FLPOLICY_ON_DATA and
- client.get_flush_policy() == STREAM_FLPOLICY_ON_DATA )
+ return ( server.get_flush_policy() == STREAM_FLPOLICY_ON_DATA and
+ client.get_flush_policy() == STREAM_FLPOLICY_ON_DATA );
+}
+
+bool TcpStreamSession::set_no_ack(bool b)
+{
+ if ( can_set_no_ack() )
{
no_ack = b;
+ return true;
}
+ else
+ return false;
}
void TcpStreamSession::disable_reassembly(Flow* f)
void set_packet_header_foo(const TcpSegmentDescriptor&);
void get_packet_header_foo(DAQ_PktHdr_t*, uint32_t dir);
- void set_no_ack(bool);
+ bool can_set_no_ack();
+ bool set_no_ack(bool);
bool no_ack_mode_enabled() { return no_ack; }
virtual void update_perf_base_state(char) = 0;
virtual void clear_session(