PKT_DROP_REASON_DEFRAG_MEMCAP,
PKT_DROP_REASON_FLOW_MEMCAP,
PKT_DROP_REASON_FLOW_DROP,
- PKT_DROP_REASON_STREAM_ERROR,
- PKT_DROP_REASON_STREAM_MEMCAP,
PKT_DROP_REASON_APPLAYER_ERROR,
PKT_DROP_REASON_APPLAYER_MEMCAP,
PKT_DROP_REASON_RULES,
PKT_DROP_REASON_RULES_THRESHOLD, /**< detection_filter in action */
+ PKT_DROP_REASON_STREAM_ERROR,
+ PKT_DROP_REASON_STREAM_MEMCAP,
+ PKT_DROP_REASON_STREAM_MIDSTREAM,
};
/* forward declaration since Packet struct definition requires this */
stream_config.ssn_memcap_policy = ExceptionPolicyParse("stream.memcap-policy", true);
stream_config.reassembly_memcap_policy =
ExceptionPolicyParse("stream.reassembly.memcap-policy", true);
+ stream_config.midstream_policy = ExceptionPolicyParse("stream.midstream-policy", true);
SCLogConfig("memcap-policy: %u/%u", stream_config.ssn_memcap_policy,
stream_config.reassembly_memcap_policy);
return -1;
/* SYN/ACK */
- } else if ((p->tcph->th_flags & (TH_SYN|TH_ACK)) == (TH_SYN|TH_ACK)) {
- if (stream_config.midstream == FALSE &&
- stream_config.async_oneside == FALSE)
+ } else if ((p->tcph->th_flags & (TH_SYN | TH_ACK)) == (TH_SYN | TH_ACK)) {
+ /* Drop reason will only be used if midstream policy is set to fail closed */
+ ExceptionPolicyApply(p, stream_config.midstream_policy, PKT_DROP_REASON_STREAM_MIDSTREAM);
+
+ if (stream_config.midstream == FALSE && stream_config.async_oneside == FALSE) {
+ SCLogDebug("Midstream not enabled, so won't pick up a session");
return 0;
+ }
+ if (!(stream_config.midstream_policy == EXCEPTION_POLICY_IGNORE ||
+ stream_config.midstream_policy == EXCEPTION_POLICY_PASS_FLOW ||
+ stream_config.midstream_policy == EXCEPTION_POLICY_PASS_PACKET)) {
+ SCLogDebug("Midstream policy not permissive, so won't pick up a session");
+ return 0;
+ }
+ SCLogDebug("midstream picked up");
if (ssn == NULL) {
ssn = StreamTcpNewSession(p, stt->ssn_pool_id);
ssn->client.last_ack);
} else if (p->tcph->th_flags & TH_ACK) {
- if (stream_config.midstream == FALSE)
+ /* Drop reason will only be used if midstream policy is set to fail closed */
+ ExceptionPolicyApply(p, stream_config.midstream_policy, PKT_DROP_REASON_STREAM_MIDSTREAM);
+
+ if (stream_config.midstream == FALSE) {
+ SCLogDebug("Midstream not enabled, so won't pick up a session");
+ return 0;
+ }
+ if (!(stream_config.midstream_policy == EXCEPTION_POLICY_IGNORE ||
+ stream_config.midstream_policy == EXCEPTION_POLICY_PASS_FLOW ||
+ stream_config.midstream_policy == EXCEPTION_POLICY_PASS_PACKET)) {
+ SCLogDebug("Midstream policy not permissive, so won't pick up a session");
return 0;
+ }
+ SCLogDebug("midstream picked up");
if (ssn == NULL) {
ssn = StreamTcpNewSession(p, stt->ssn_pool_id);