Feature #462 » 0001-Add-support-for-IPv4-in-IPv6.patch
| src/decode-ipv6.c | ||
|---|---|---|
|
#define IPV6_EXTHDRS ip6eh.ip6_exthdrs
|
||
|
#define IPV6_EH_CNT ip6eh.ip6_exthdrs_cnt
|
||
|
static int DecodeIPv4inIPv6(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t plen, PacketQueue *pq)
|
||
|
{
|
||
|
/* Try to detect IPv4 in IPv6 */
|
||
|
if (IP_GET_RAW_VER(pkt) == 4) {
|
||
|
if (pq != NULL) {
|
||
|
Packet *tp = PacketPseudoPktSetup(p, pkt, plen, IPPROTO_IP);
|
||
|
if (tp != NULL) {
|
||
|
DecodeTunnel(tv, dtv, tp, GET_PKT_DATA(tp),
|
||
|
GET_PKT_LEN(tp), pq, IPPROTO_IP);
|
||
|
PacketEnqueue(pq,tp);
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
static void
|
||
|
DecodeIPV6ExtHdrs(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, uint16_t len, PacketQueue *pq)
|
||
|
{
|
||
| ... | ... | |
|
SCReturn;
|
||
|
default:
|
||
|
if (DecodeIPv4inIPv6(tv, dtv, p, pkt, plen, pq) == 1) {
|
||
|
SCReturn;
|
||
|
}
|
||
|
IPV6_SET_L4PROTO(p,nh);
|
||
|
SCReturn;
|
||
|
}
|
||
| ... | ... | |
|
DecodeIPV6ExtHdrs(tv, dtv, p, pkt + IPV6_HEADER_LEN, IPV6_GET_PLEN(p), pq);
|
||
|
break;
|
||
|
default:
|
||
|
if (DecodeIPv4inIPv6(tv, dtv, p, pkt + IPV6_HEADER_LEN, IPV6_GET_PLEN(p), pq) == 1) {
|
||
|
SCReturn;
|
||
|
}
|
||
|
p->proto = IPV6_GET_NH(p);
|
||
|
break;
|
||
|
}
|
||
- « Previous
- 1
- 2
- Next »