return res;
}}}
+
+struct ip6_udp* parse_ip6_udp(struct ip6_pkt* pkt) {{{
+ struct ip6_udp* res = (struct ip6_udp*) pkt;
+
+ return res;
+}}}
extern struct ip6_pkt* parse_ip6(struct pkt_tun* pkt);
extern struct ip6_tcp* parse_ip6_tcp(struct ip6_pkt*);
+extern struct ip6_udp* parse_ip6_udp(struct ip6_pkt*);
extern short payload(struct ip6_hdr* pkt);
case 0x06:
memcpy(dest, "TCP)", 4);
break;
+ case 0x11:
+ memcpy(dest, "UDP)", 4);
+ break;
default:
memcpy(dest, "unknown)", 8);
break;
pkt->data.flg & 0x01 ? 'F' : '.'
);
}}}
+
+void pkt_printf_ip6udp(struct ip6_udp* pkt) {{{
+ printf("spt: %u\n", ntohs(pkt->data.spt));
+ printf("dpt: %u\n", ntohs(pkt->data.dpt));
+ printf("len: %u\n", ntohs(pkt->data.len));
+ printf("crc: 0x%x\n", ntohs(pkt->data.crc));
+}}}
extern void pkt_printf(struct ip6_pkt* pkt);
void pkt_printf_ip6tcp(struct ip6_tcp* pkt);
+void pkt_printf_ip6udp(struct ip6_udp* pkt);
#endif
struct ip6_pkt* pkt6 = parse_ip6(pkt);
pkt_printf(pkt6);
struct ip6_tcp* pkt6_tcp;
+ struct ip6_udp* pkt6_udp;
switch(pkt6->hdr.nxthdr) {
case 0x06:
pkt6_tcp = parse_ip6_tcp(pkt6);
pkt_printf_ip6tcp(pkt6_tcp);
handle_tcp(pkt6_tcp);
break;
+ case 0x11:
+ pkt6_udp = parse_ip6_udp(pkt6);
+ pkt_printf_ip6udp(pkt6_udp);
+ break;
}
break;
default: