private:
bool valid_checksum_from_daq(const RawData&);
- void IP4AddrTests(const ip::IP4Hdr*, const CodecData&, DecodeData&);
+ void IP4AddrTests(const ip::IP4Hdr*, const RawData&, const CodecData&, DecodeData&);
void IPMiscTests(const ip::IP4Hdr* const ip4h, const CodecData& codec, uint16_t len);
void DecodeIPOptions(const uint8_t* start, uint8_t& o_len, CodecData& data);
};
/*
* IP Header tests: Land attack, and Loop back test
*/
- IP4AddrTests(iph, codec, snort);
+ IP4AddrTests(iph, raw, codec, snort);
if (snort::get_network_policy()->ip_checksums() && !valid_checksum_from_daq(raw))
{
}
void Ipv4Codec::IP4AddrTests(
- const ip::IP4Hdr* iph, const CodecData& codec, DecodeData& snort)
+ const ip::IP4Hdr* iph, const RawData& raw, const CodecData& codec,
+ DecodeData& snort)
{
uint8_t msb_src, msb_dst;
// check all 32 bits ...
if ( iph->ip_src == iph->ip_dst )
{
- codec_event(codec, DECODE_BAD_TRAFFIC_SAME_SRCDST);
+ const DAQ_PktHdr_t* pkth = daq_msg_get_pkthdr(raw.daq_msg);
+
+ if ( pkth->flags & DAQ_PKT_FLAG_SIGNIFICANT_GROUPS )
+ {
+ if ( pkth->ingress_group == pkth->egress_group )
+ codec_event(codec, DECODE_BAD_TRAFFIC_SAME_SRCDST);
+ }
+ else
+ codec_event(codec, DECODE_BAD_TRAFFIC_SAME_SRCDST);
}
// check all 32 bits ...
void IPV6CheckIsatap(const ip::IP6Hdr* const,
const DecodeData&,
const CodecData&);
- void IPV6MiscTests(const DecodeData&, const CodecData&);
+ void IPV6MiscTests(const RawData&, const DecodeData&, const CodecData&);
void CheckIPV6Multicast(const ip::IP6Hdr* const, const CodecData&);
bool CheckTeredoPrefix(const ip::IP6Hdr* const hdr);
};
snort.ip_api.update(real_src, real_dst);
}
- IPV6MiscTests(snort, codec);
+ IPV6MiscTests(raw, snort, codec);
CheckIPV6Multicast(ip6h, codec);
if (ip6h->is_valid_next_header() == false)
}
}
-void Ipv6Codec::IPV6MiscTests(const DecodeData& snort, const CodecData& codec)
+void Ipv6Codec::IPV6MiscTests(const RawData& raw, const DecodeData& snort,
+ const CodecData& codec)
{
const SfIp* ip_src = snort.ip_api.get_src();
const SfIp* ip_dst = snort.ip_api.get_dst();
*/
if (ip_src->fast_eq6(*ip_dst))
{
- codec_event(codec, DECODE_BAD_TRAFFIC_SAME_SRCDST);
+ const DAQ_PktHdr_t* pkth = daq_msg_get_pkthdr(raw.daq_msg);
+
+ if (pkth->flags & DAQ_PKT_FLAG_SIGNIFICANT_GROUPS)
+ {
+ if (pkth->ingress_group == pkth->egress_group)
+ codec_event(codec, DECODE_BAD_TRAFFIC_SAME_SRCDST);
+ }
+ else
+ codec_event(codec, DECODE_BAD_TRAFFIC_SAME_SRCDST);
}
if (ip_src->is_loopback() || ip_dst->is_loopback())