d_lcc=reinterpret_cast<struct pdns_lcc_header*>(d_buffer);
d_ip=reinterpret_cast<struct ip*>(d_buffer + d_skipMediaHeader);
-
+ d_ip6=reinterpret_cast<struct ip6_hdr*>(d_buffer + d_skipMediaHeader);
uint16_t contentCode=0;
if(d_pfh.linktype==1)
contentCode=ntohs(d_ether->ether_type);
d_correctpackets++;
return true;
}
+ if(contentCode==0x86dd && d_ip6->ip6_ctlun.ip6_un1.ip6_un1_nxt==17) { // udpv6, we ignore anything with extension hdr
+ d_udp=reinterpret_cast<const struct udphdr*>(d_buffer + d_skipMediaHeader + sizeof(struct ip6_hdr));
+ d_payload = (unsigned char*)d_udp + sizeof(struct udphdr);
+ d_len = ntohs(d_udp->uh_ulen) - sizeof(struct udphdr);
+ d_correctpackets++;
+ return true;
+ }
+
else {
d_nonetheripudp++;
}
#define __FAVOR_BSD
#include <netinet/in_systm.h>
#include <netinet/ip.h>
+#include <netinet/ip6.h>
#include <netinet/udp.h>
#if defined(__NetBSD__)
#include <net/if.h>
struct pdns_lcc_header* d_lcc;
struct ether_header* d_ether;
struct ip *d_ip;
+ struct ip6_hdr *d_ip6;
const struct tcphdr *d_tcp;
const struct udphdr *d_udp;
const uint8_t* d_payload;