if ( pci->ip_proto )
{
set_ip(pci, codec, snort);
- snort.set_pkt_type(PktType::PDU);
+ snort.set_pkt_type(PktType::USER);
}
else
{
case PktType::UDP:
case PktType::ICMP:
case PktType::FILE:
+ case PktType::USER:
if ( offload_ok and p->flow )
return offload(p);
{ return (ssn_state.session_flags & SSNFLAG_PROXIED) != 0; }
bool is_stream()
- { return pkt_type == PktType::TCP or pkt_type == PktType::PDU; }
+ { return pkt_type == PktType::TCP or pkt_type == PktType::USER; }
void block()
{ ssn_state.session_flags |= SSNFLAG_BLOCK; }
init_roles_udp(p, flow);
break;
- case PktType::PDU:
case PktType::FILE:
+ case PktType::USER:
swapped = init_roles_user(p, flow);
break;
/* NOTE: if A protocol is added, update DecodeFlags! */
enum class PktType : std::uint8_t
{
- NONE, IP, TCP, UDP, ICMP, PDU, FILE, MAX
+ NONE, IP, TCP, UDP, ICMP, USER, FILE, PDU, MAX
};
// the first several of these bits must map to PktType
#define PROTO_BIT__TCP 0x000002
#define PROTO_BIT__UDP 0x000004
#define PROTO_BIT__ICMP 0x000008
-#define PROTO_BIT__PDU 0x000010
+#define PROTO_BIT__USER 0x000010
#define PROTO_BIT__FILE 0x000020
-#define PROTO_BIT__ARP 0x000040
+#define PROTO_BIT__PDU 0x000040
#define PROTO_BIT__TEREDO 0x000080
#define PROTO_BIT__GTP 0x000100
#define PROTO_BIT__MPLS 0x000200
#define PROTO_BIT__UDP_TUNNELED 0x080000
#define PROTO_BIT__OTHER 0x100000
#define PROTO_BIT__GENEVE 0x200000
-#define PROTO_BIT__ALL 0x3FFFFF
+#define PROTO_BIT__ARP 0x400000
+#define PROTO_BIT__ALL 0x7FFFFF
#define PROTO_BIT__ICMP_EMBED \
(PROTO_BIT__TCP_EMBED_ICMP | PROTO_BIT__UDP_EMBED_ICMP | \
#define PROTO_BIT__ANY_IP (PROTO_BIT__IP | PROTO_BIT__TCP | PROTO_BIT__UDP | PROTO_BIT__ICMP)
#define PROTO_BIT__ANY_PDU (PROTO_BIT__TCP | PROTO_BIT__UDP | PROTO_BIT__PDU)
-#define PROTO_BIT__ANY_SSN (PROTO_BIT__ANY_IP | PROTO_BIT__PDU | PROTO_BIT__FILE)
+#define PROTO_BIT__ANY_SSN (PROTO_BIT__ANY_IP | PROTO_BIT__PDU | PROTO_BIT__FILE | PROTO_BIT__USER)
#define PROTO_BIT__ANY_TYPE (PROTO_BIT__ANY_SSN | PROTO_BIT__ARP)
enum DecodeFlags : std::uint16_t
m->add(PROTO_BIT__UDP, wiz_id);
if ( tcp or udp or pdu )
- m->add(PROTO_BIT__PDU, wiz_id);
+ m->add(PROTO_BIT__USER, wiz_id);
const InspectApi* api = get_plugin(bind_id);
InspectorManager::instantiate(api, m, sc);
const unsigned mask[] =
{
PROTO_BIT__ANY_TYPE, PROTO_BIT__IP, PROTO_BIT__ICMP,
- PROTO_BIT__TCP, PROTO_BIT__UDP, PROTO_BIT__PDU, PROTO_BIT__FILE
+ PROTO_BIT__TCP, PROTO_BIT__UDP, PROTO_BIT__USER, PROTO_BIT__FILE, PROTO_BIT__PDU,
};
binding.when.protos = mask[v.get_uint8()];
binding.when.add_criteria(BindWhen::Criteria::BWC_PROTO);
return "tcp";
case PROTO_BIT__UDP:
return "udp";
- case PROTO_BIT__PDU:
+ case PROTO_BIT__USER:
return "user";
case PROTO_BIT__FILE:
return "file";
case PktType::TCP: name = "stream_tcp"; break;
case PktType::UDP: name = "stream_udp"; break;
case PktType::ICMP: name = "stream_icmp"; break;
- case PktType::PDU: name = "stream_user"; break;
+ case PktType::USER: name = "stream_user"; break;
case PktType::FILE: name = "stream_file"; break;
default: name = nullptr; break;
}
return "UDP";
case PktType::PDU:
+ case PktType::USER:
case PktType::FILE:
if ( proto_bits & PROTO_BIT__TCP )
return "TCP";
{ return ptrs.get_pkt_type() == PktType::ICMP; }
bool is_data() const
- { return (ptrs.get_pkt_type() == PktType::PDU) or (ptrs.get_pkt_type() == PktType::FILE); }
+ { return (ptrs.get_pkt_type() == PktType::PDU) or (ptrs.get_pkt_type() == PktType::FILE) or
+ (ptrs.get_pkt_type() == PktType::USER); }
bool is_cooked() const
{ return ((packet_flags & PKT_PSEUDO) != 0); }
if ( (f = InspectorManager::get_session(PROTO_BIT__UDP)) )
flow_con->init_proto(PktType::UDP, f);
- if ( (f = InspectorManager::get_session(PROTO_BIT__PDU)) )
- flow_con->init_proto(PktType::PDU, f);
+ if ( (f = InspectorManager::get_session(PROTO_BIT__USER)) )
+ flow_con->init_proto(PktType::USER, f);
if ( (f = InspectorManager::get_session(PROTO_BIT__FILE)) )
flow_con->init_proto(PktType::FILE, f);
}
break;
- case PktType::PDU:
- flow_con->process(PktType::PDU, p);
+ case PktType::USER:
+ flow_con->process(PktType::USER, p);
break;
case PktType::FILE:
flow_con->process(PktType::FILE, p);
break;
- case PktType::MAX:
+ default:
break;
}
}
else if ( strstr(fqn, "udp_cache") )
type = PktType::UDP;
else if ( strstr(fqn, "user_cache") )
- type = PktType::PDU;
+ type = PktType::USER;
else if ( strstr(fqn, "file_cache") )
type = PktType::FILE;
else
ConfigLogger::log_value("max_aux_ip", SnortConfig::get_conf()->max_aux_ip);
ConfigLogger::log_value("pruning_timeout", flow_cache_cfg.pruning_timeout);
- for (int i = to_utype(PktType::IP); i < to_utype(PktType::MAX); ++i)
+ for (int i = to_utype(PktType::IP); i < to_utype(PktType::PDU); ++i)
{
std::string tmp;
tmp += "{ idle_timeout = " + std::to_string(flow_cache_cfg.proto[i].nominal_timeout);
mod_dtor
},
IT_STREAM,
- PROTO_BIT__PDU,
+ PROTO_BIT__USER,
nullptr, // buffers
nullptr, // service
nullptr, // pinit
up->proto_bits = p->proto_bits;
up->pseudo_type = PSEUDO_PKT_USER;
+ up->ptrs.set_pkt_type(PktType::PDU);
up->packet_flags = flags | PKT_REBUILT_STREAM | PKT_PSEUDO;
up->packet_flags |= (p->packet_flags & (PKT_FROM_CLIENT|PKT_FROM_SERVER));